初识网络协议:从地址栏输入一个URL到页面加载都经历了什么

TCP/IP五层模型

包含的网络协议

在地址栏输入www.ymfen.cn后

应用层

DHCP, HTTP, HTTPS,  RTMP, P2P, DNS, GTP, RPC

浏览器通过DNS找到网址对应的IP地址,找到对应的IP:39.105.33.118后,浏览器开始打包它的请求。通过HTTP/HTTPS协议将数据封装后,将数据包通过socket编程传递给传输层。

传输层

TCP,  UDP

传输层里有面向连接的TCP协议和无连接的UDP协议。我们使用TCP协议将上层传输过来的数据包再次封装,主要是将浏览器监听的端口和目标服务器监听的端口封装在数据包的外层,这样服务器上的操作系统获取到数据包时,就会知道要将数据发送到哪个端口进行处理。传输层封装完毕后,浏览器会将包交给操作系统的网络层

网络层

IP, ICMP, OSPF, BGP, IPSec, GRE

网络层接收到数据包后会通过IP协议将包再封装一层,主要是将源IP地址与目标IP地址封装在数据包中。操作系统通过目标IP地址判断这个包是要发往外地还是就在本地传输

数据链路层

ARP,  VLAN, STP

如果是在目标地址就在本地,操作系统通过ARP协议获取目标地址的MAC地址,然后将源MAC地址与目标MAC地址封装在数据包的外层,直接将数据包发出即可。

可是如果目标地址不在本地。操作系统首先需要通过ARP协议获取本地网关的MAC地址,然后将封装好的包发往网关,通过网关去查询数据包该往哪发。

物理层

网络跳线


当数据在多个网关间路由之后到达目标局域网的网关。目标局域网的网关就会将数据包发给目标地址。目标地址获取到数据包之后,首先通过二层设备摘下MAC头,看看目标IP地址符不符合自身的MAC,如果不符合就转发这个包,符合就将包发送给三层设备。

三层设备摘下IP头,判断目标IP和我的IP是不是一样,不一样就将包转发出去,一样就将包丢给四层设备。四层设备接收到数据包之后会摘下TCP头,通过TCP头里面的信息判断这是一个发起,还是一个应答或者是一个正常的数据包。如果是一个发起或者应答,接下来可能就需要返回一个回复包。如果是一个正常就需要交给上层。这里的上层就是应用程序。通过TCP头中封装的端口信息,将数据包发给对应的端口。应用程序会一直监听着这个端口,接收到数据包之后,发现这是一个请求网站首页的信息。应用服务器就将网站首页需要的数据打包,然后逐层封装,最后将数据又传回浏览器。浏览器接受到数据,对数据进行解析,然后显示出网站首页的页面出来。


书山有路勤为径 学海无涯苦作舟