对网络知识的简单认识——wsdchong

对网络知识的认识

前言

做网站开发当然得懂得点计算机网络知识,今天参加了一次面试,本来以为这部分我掌握了,结果发现好长一段时间没看,又有些生疏了。

下面从三个角度讲计算机网络:计算机网络基础、浏览器原理、TCP连接和HTTP协议;

参考《计算机网络(谢希仁第七版》、《前端技术框架与工程》、以及网络上的一些博客;

计算机网络基础

根据我之前写的计算机网络 :理论知识结合试题。

绪论(组成、性能、体系结构)

物理层(信号编码、码元传输率):香农公式

数据链路层(点对点信道、广播信道):CRC检验、最短帧长等

网络层(IP、路由选择协议):数据报片、子网划分等

运输层(UDP、TCP):端口、RTT

应用层(域名系统、HTTP)

在计算机网络基础的五层体系结构中,我个人感觉,网络开发人员用得比较多的是TCP协议和HTTP协议,比如后端设置端口,前端进行接口测试就需要用到。

网络基础其实细节许多,但在这里就不具体展开,这里讲网络基础的意义在于给后面网络知识应用打下基础。好比去某个景区游玩,给你份地图,你就能很好地知道路线,如果没有这地图(网络基础),虽然多转转也能知道路线,但无疑会走许多重复的路。

浏览器原理

根据《前端技术框架与工程》中性能部分 写的。正是这一章,让我把网络知识串联起来,而不是零零碎碎记忆着。作者从浏览器原理的角度,把我们常用的DNS、TCP连接知识(三次握手、四次挥手)、HTTP知识、网站优化这几大块知识有逻辑地联系在一起。

每次看都觉得讲的好,网络的应用在,浏览器扮演了重要角色,了解了浏览器的原理,其他网络知识的应用也触类旁通了。

浏览器的大致架构从底层到上层依次为:操作系统层、内核层、应用层;

  • 操作系统层:提供浏览器所需的系统API,如多线程、文件I/O等;
  • 内核层:浏览器的核心,包括两个部分,一是渲染引擎,包括HTML、CSS、SVG的解释器和JavaScript引擎,以及布局、绘制相关的模块;二是相对底层的功能模块集合,如网络模块、图形库、存储、多媒体解码器;
  • 应用层:包含一些可视化的交互模块,如书签管理、窗口管理等;以及一些不可见的数据管理模块,如历史记录等;

其中内核层是其中的核心。关键点在于网络方面、渲染方面。在这里我主要讲讲网络方面。

浏览器打开URL的完整流程依次是:当前文档卸载、重定向处理、缓存判断、DNS查询、建立TCP连接、HTTP请求/响应处理、HTML文档解析。在这过程中,截止至开始渲染前,浏览器的所有操作实质上就是尝试获取URL对应的信息,这一部分可以定义为Fetch阶段;接收到HTML文档的HTTP响应后,浏览器开始解析和渲染工作,这一阶段可以定义为Render阶段。在Fetch阶段的时间消耗主要取决于网络环境,不受前端代码的影响;在Render阶段的时间消耗受网络环境和前端逻辑代码的双重影响。

简单来说是四个步骤。

第一步:看本地有无缓存,有缓存直接返回缓存数据,没缓存进入下一步;

第二步:浏览器向DNS服务器发出DNS查询请求,然后DNS服务器就会返回域名对应的IP;

第三步:获得IP后,浏览器就尝试向web服务器建立TCP连接,使得客户端能与服务器交换数据;(TCP协议的三次握手建立连接,四次挥手断开连接)

第四步:连接成功后,浏览器就会发送HTTP请求,等待web服务器响应;(HTTP请求方法、HTTP响应组成、状态码、消息报头、HTTPS)

在这四步中,用的比较多的是HTTP协议。

目前针对网络的优化策略仍然主要面向HTTP1.1。虽然有HTTP2.0,突破了HTTP1.1的性能瓶颈,但是其短时间内难以普及,一是因为浏览器兼容性不理想,二是服务器迁移成本太高。未来会发展出HTTP3.0,可能是基于UDP,因为建立在TCP协议上的HTTP出现了瓶颈并且短时间内无法突破。

其实我还没有具体工作,对这些的理解还很浅薄,各位大佬请辩证理解。

TCP连接和HTTP协议

TCP连接和HTTP协议在面试中常被问到。下面我把一些我经常看的博客放在放在下面,大家想了解,点开链接阅读即可。

连三次握手,四次挥手都不知道,还敢说自己是学IT的?

看完这篇HTTP,跟面试官扯皮就没问题了

看完这篇 HTTPS,和面试官扯皮就没问题了

看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了

实在是这几个博主把点面都讲清楚了,特别是第二篇。我也没有多余要补充的。

不过我把一些简单必备的罗列一下。一个是请求头、一个是响应头;

请求头

首先是请求头由起始行和请求头部组成。不同点在于URL字段。

起始行由三个字段组成:方法、URL字段、HTTP版本字段;如

img

方法一般分为8种,常用的有两种:GET获取资源、POST传输实体;

URL一般有:协议(如HTTP)、主机(域名)、端口、路径、查询、片段六部分组成

HTTP版本字段一般是HTTP/1.1

请求头部信息比较少,首先host表示的是对象所在的主机,提供给web代理高速缓存;connection:close表示浏览器告诉服务器使用的是非持久连接,要求服务器在发送完响应对象后关闭连接;User-agent告诉web服务器,浏览器使用的类型是Mozilla/5.0,即Firefox浏览器;Accept-language告诉服务器,浏览器想要法语版本;

响应头

响应头也类似,由状态行和消息报头组成。不同点在于状态行,如

200 OK
Access-Control-Allow-Origin: *
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Mon, 18 Jul 2016 16:06:00 GMT
Etag: "c561c68d0ba92bbeb8b0f612a9199f722e3a621a"
Keep-Alive: timeout=5, max=997
Last-Modified: Mon, 18 Jul 2016 02:36:04 GMT
Server: Apache
Set-Cookie: mykey=myvalue; expires=Mon, 17-Jul-2017 16:06:00 GMT; Max-Age=31449600; Path=/; secure
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding
x-frame-options: DENY

状态码200表示成功响应;

状态码3*表示重定向,需要进一步操作以完成请求,如301表示永久性重定向,302表示临时性重定向。

状态码4*表示客户端错误,如400表示请求报文中存在语法错误,404表示服务器中没有找到请求的资源;

状态码5*表示服务器错误,如500表示内部服务器错误,503表示服务器超负载或者停机维护;

除了请求头和响应头,还有就是对HTTP的优缺点的分析

HTTP优缺点

1HTTP的突出特点就是简单、易于扩展。它的主要组成就是header+body,头部信息也是简单的文本格式,而且请求报文根据英文也能猜出大概意思,降低学习门槛。此外HTTP协议中的请求方法、URL、状态码等每一个核心组成要素都没有被限制严格。

2此外HTTP因为简单、易于扩展,所以其应用广泛,且环境成熟。

3最后HTTP是无状态的,也就是说服务器是没有记忆功能的,不需要额外的资源记录状态信息,不仅实现简单,而且减轻服务器的负担。

1不过无状态既是优点也是缺点,由于没有记忆功能,每次都得问一遍身份信息,由此出现了cookie技术(现在又有了JSON web Tokens)。

2HTTP还有一个既是优点也是缺点的特点——明文传输,header部分不使用二进制,二是可阅读的文本形式(HTTP2.0采用二进制),这样容易被监听和窥探。

3性能,虽然性能不算差,但是不完全适应现在的互联网,还有很大提升空间。

我个人对计算机网络的认知

透过现象看本质,我觉得计算机网络就是把计算机联系在一起。什么协议都是暂时的,网站的发展朝着更高效、更安全这两个方向发展。并且计算机网络的本质,我觉得就是计算机组成原理操作系统;计算机网络建立在这两者的基础上,和这两者有千丝万缕的联系。它的优越性一个是沟通,一个是众人拾柴火焰高;

联系的过程中,首先是物理上的连接,可以划分为物理层。这是基础,和计算机基础相关。物理层的发展一个是主机性能的发展,一个是连接的发展;主机的发展自然就是芯片的发展,未来可能朝着量子计算机的方向发展;连接的发展,有线连接是光纤,无线连接是5G;

物理上连接后,还需要进行操作系统上的连接。随着规模的扩大,出于性能和安全的考虑,对传输数据、命名、路由、连接等方面进行了优化,发展出了数据链路层的点对点信道和广播信道、网络层的IP、网络层的路由、运输层的TCP协议和UDP协议;

最后就是应用。有DNS、HTTP。

更新地址:GitHub

更多内容请关注:CSDNGitHub掘金

猜你喜欢

转载自blog.csdn.net/weixin_42875245/article/details/107115753