《网络是怎么连接的》读书笔记
我们每天都在上网,在浏览器中输入url到结果返回页面呈现,只有秒级的时间。那么问题来了,url发往何处,信息又从何处获取?了解这个我们首先要了解下网络是怎么连接的?其中HTTP协议在其中又发挥什么作用呢?
网络是怎么连接的
总的来言,网络连接过程主要包含下面六个步骤,我们对每个步骤进行详细分析。
浏览器生成消息
用户输入url时,浏览器会生成消息主要通过下面4个步骤。
(1)浏览器解析url
web服务器的url都满足下图所示的规则,当浏览器解析url时,会按照下图的格式将各个元素拆分出来。
举个例子,对于http://hackr.jp/这个url,解析后可以明确,是用http协议访问服务器名为hackr.jp的文件,这里缺省数据源(文件)的路径名,是默认文件名,比如index.html。根据服务器的配置确定的,这个设置根据服务器不同而不同。
(2)生成HTTP请求消息
对URL进行解析之后,浏览器确定了Web服务器和文件名,接下来就是根据这些信息来生成HTTP请求消息了。HTTP请求消息主要有请求行、消息头、消息体三部分组成,在HTTP消息会详细介绍。
(3)向DNS服务器查询Web服务器的IP地址
ip地址是计算机“识别”用的,服务器名是人类来“识别记忆”用的。DNS服务器会返回web服务器对应的ip地址,便于后续的网络连接。
和浏览器一样,解析器本身也不具备使用网络收发数据的功能。解析器调用协议栈后,控制流程会再次转移,协议栈会执行发送消息的操作,然后通过网卡将消息发送给DNS服务器。向DNS服务器发送消息时,我们当然也需要知道DNS服务器的IP地址。只不过这个IP地址是作为TCP/IP的一个设置项目事先设置好的,不需要再去查询了。
(4)委托协议栈发送消息
浏览器可以将消息委托给操作系统以发送给Web服务器,这就涉及到下一小节传输协议和信号传输等。
电信号传输数据
数据收发操作是从应用程序调用write将要发送的数据交给协议栈开始的,协议栈收到数据后执行发送操作。
TCP模块给数据加上TCP头部生成TCP包,发送给IP模块委托其进行发送,IP模块给TCP包加上IP头部和MAC头部,生成网络数据包。IP模块将网络数据包发送给网卡设备,传递给网卡的网络包是由一连串0和1组成的数字信息,网卡会将这些数字信息转换为电信号或光信号,并通过网线(或光纤)发送出去,然后这些信号就会到达集线器、路由器等转发设备,再由转发设备一步一步地送达接收方。
信号在网线和集线器中的传输
所有的包在传输到目的地的过程中都是独立的,相互之间没有任何关联。
网络包从客户端计算机发出之后,要经过集线器、交换机和路由器最终进入互联网。
(1)基线器( Hub )
它可以视作多端口的中继器。主要发挥:信号放大,广播分发的作用。
(2)交换机(Switch)
交换机是一种基于MAC(网卡的硬件地址)识别,能完成封装转发数据包功能的网络设备。交换机可以“学习”MAC地址,并把其存放在内部地址表中,通过在数据帧的始发者和目标接收者之间建立临时的交换路径,使数据帧直接由源地址到达目的地址。
(3)路由器(Router)
路由器是连接因特网中各局域网、广域网的设备。在路由器中记录着路由表,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。
值得注意的是,我们家里用的路由器已经集成了集线器和交换机的功能。但是,如果把这种“不纯粹”的路由器拆分成“纯粹”的路由器和“纯粹”的交换机,则它们各自都适用上面的内容。
接入互联网
(1)ADSL入网
早期家庭接入网都是ADSL的方式,通过复用电话线的方式接入网。信号从电话线传入,分离器将电话的语音信号和ADSL的信号进行分离,语音信号传入电话机完成电话的通讯工作,另外的ADSL信号等传入ADSL MOdem(即经常说的“猫”)。“猫”将电信号转化为数字信号,然后接入网络设备。
(2)光纤入网
随着时代的发展,号称“速度更快”的光纤入网慢慢普及开来。这种方式用光纤作为主要的传输媒质,从运营商拉入进户线之后,“光猫”将光信号转化为数字信号,然后接入无线路由器。网络设备接入无线网络就可以正常上网。
那么,问题来了,为什么光纤上网比ADSL快?
有种常见的误解说因为“光速快”,事实当然不是如此,如果还记得起初中物理的话,光是电磁波的一种,电传输也是电磁波,所以本质上传输速度应该一致。
差别在于对于大容量数据传输来看, 一般网线支持带宽最大到1G(近似1000M),而光纤本身支持带宽则为数G甚至数十上百G。所以,如果所传输数据非常庞大,则光纤有很大优势,能在较短时间内,传输完较大数据(数据超过1G情况)。
服务器预处理
网络包从互联网到达服务器,根据服务器部署地点的不同而不同。最简单的部署方式是,服务器直接部署在公司网络上,并且可以从互联网直接访问。但是这种方式需要为公司网络中的所有设备都分配各自的公有地址,会导致ip地址不足;另一方面,从互联网传来的网络包会无节制地进入服务器,服务器在攻击者看来处于“裸奔”状态,会导致安全问题,所以网络包进入公司内网之前,都会做预处理,比如部署防火墙等。
(1)防火墙
防火墙的作用类似于海关,它只允许发往指定服务器的指定应用程序的网络包通过,从而屏蔽其他不允许通过的包。目前最普及的方式是包过滤方式,包过滤方式的防火墙可根据接收方的IP地址、发送方IP地址、接收方端口号、发送方端口号、控制位等信息来判断是否允许某个包通过。
(2)负载均衡器
当服务器的访问量上升时,增加服务器线路的带宽是有效的,但并不是网络变快就可以解决问题,高速线路传输大量网络包,会导致服务器的性能跟不上。这种情况下,使用多台服务器来分担负载的方法更有效,而负载均衡器就是这样的一种方式。
使用负载均衡器时,首先要用负载均衡器的IP地址代替Web服务器的实际地址注册到DNS服务器上。客户端认为负载均衡器就是一台Web服务器,并向其发送请求,然后由负载均衡器来判断将请求转发给哪台Web服务器。
如何判断将请求转发给哪台Web服务器?
主要是通过操作是否跨多个页面、Web服务器负载状况来确定的。
(3)缓存服务器
除了使用多台功能相同的Web服务器分担负载外,还有另外一种方法,就是将整个系统按功能分成不同的服务器,如Web服务器、数据库服务器、缓存服务器等。缓存服务器就是一种按功能来分担负载的方法。
缓存服务器是一台通过代理机制对数据进行缓存的服务器。当进行中转时,它可以将Web服务器返回的数据保存在磁盘中,并可以代替Web服务器将磁盘中的数据返回给客户端。
服务器响应
服务器的接收操作和客户端发送过程相对应,是发送倒序的过程。
(1)网卡的MAC 模块将网络包从信号还原为数字 信息,校验FCS并存入缓冲区。
网卡驱动会根据MAC头部判断协议类型,并将 包交给相应的协议栈。
(2)协议栈的IP模块会检查IP头部,判断是不是发给自己的;判断网络包是否经过分片;
将包转交给TCP模块或UDP模块。
(3)TCP执行对应的收发连接时对应的操作。
(4)Web服务器程序解释请求消息并做出响应:
将请求的URL并转换为实际的文件名或者调用接口返回信息
参考文献
《图解Http》
《网络是怎样链接的?》