前言
TCP/IP协议簇和底层协议配合,保证了数据能够实现端到端的传输。数据传输过程是一个非常复杂的过程,例如数据在转发的过程中会进行一系列的封装和解封装。只有深入地理解了数据在各种不同设备上的转发过程,才能够对网络进行正确的分析和检测。
OK,下面我们进入数据转发的开始。现在你想要在你电脑(主机A)访问百度网站,你首先会打开浏览器输入网址,网址的开头都是http或者https开头的。因此你访问的是http服务器(服务器A)。使用的是http协议。
TCP封装
主机A把待发送的应用数据首先进行加密和压缩等操作,之后就交给传输层。因为使用的是Http协议来传输数据的。所以在传输层采取的是TCP协议来封装数据段的头部。封装时,必须填充源端口为高位随机选择的端口1027,目的端口为知名端口80,初始序列号和确认序列号字段,标识位,窗口字段以及校验和字段。然后将封装好的数据段交给网络层处理。
IP封装
现在来到网络层,进行IP头部的封装。由于上层传输层使用的是TCP协议封装,所以网络层在进行IP头部封装时显示的上层协议类型是TCP协议(Protocol字段:0X06),源IP地址:10.1.1.1,目的IP地址:172.16.10.1。
如果IP报文的大小大于网络的最大传输单元(MTU),则该报文在传输中被分片处理。
Time to Live 生存时间TTL字段用来减少网络环路造成的影响。默认TTL值为255。路由器转发一个数据包时,该值会被减1,如果路由器发现该值被减为0,就会丢弃该数据包。这样,即使网络中存在环路,数据包也不会在网络上一直被转发。
以太网封装
由于源IP和目的IP不在同一个网段,所以将触发路由功能。那么在封装数据链路层的帧头时源MAC地址是源IP10.1.1.1所对应的MAC地址,目的MAC是主机A网关10.1.1.254所对应的MAC地址。
如果直接查找到对应的MAC地址,则直接进行数据链路层帧头的封装。如果未查到对应的MAC地址,就先暂停数据帧的封装,开始启动ARP广播请求网关的MAC地址,再通过ARP请求后,获取到网关的MAC地址后,就继续开始数据链路层帧头和帧尾的封装,并标准上层封装协议为IP协议。
数据帧转发过程
接下来就把数据帧交给物理层转化成比特流。通过传输介质将电信号发送到路由器A的0/0接口。该接口在收到电信号后,在数据连路层重新转化成数据帧,转换完成后会根据数据帧的FCS校验功能先校验该数据帧的传输完整性。如不完整,将丢弃该数据。如完整将进行下一步处理。
现在路由器先查看该数据帧中的二层头部中的目的MAC地址,由于路由器A的0/0接口MAC地址就是主机A封装的数据帧的网关10.1.1.254所对应的MAC地址,所以路由器将进一步处理,拆掉帧头帧尾,显示出数据帧中的数据包的内容,根据数据帧中标注的上层封装的IP协议来查看数据包内容,发现数据包中的目的IP地址172.16.10.1不是自己的IP地址。
现在路由器就根据目的地址来查看路有表来确定转发的路径。在路由表中查到去往172.16.10.1的网段需要从E0/1口发出。所以,路由器就重新对该数据帧进行封装。帧头中的源MAC地址就是路由器出接口E0/1对应的MAC地址,目的MAC就是路由下一跳的IP地址所对应的MAC地址。通过路由器的ARP表查询获得下一跳接口即为目的IP地址所对应的MAC地址,此时路由器就重新为数据包添加一个新的帧头和帧尾,并继续转发。
数据帧解封装
封装完的数据帧再次被转成比特流,通过传输介质来到路由器B的E0/1口,该接口在接到数据后重复路由器A接到数据后一系列的操作,验证数据帧的完整性,确认二层头部中的MAC地址是不是自己的,发现目的MAC地址就是自身的E0/1接口所对应的MAC地址。
拆掉帧头帧尾,查验数据包中IP协议封装的内容,发现目的IP地址也是自身的IP地址,就再拆掉IP头部,根据标注的上层协议为TCP协议来继续处理数据段。
通过TCP协议处理数据段,发现TCP头部的目的端口号是80,就把该数据交给了上层应用层的HTTP协议来处理。
数据处理完成后,响应的数据将由HTTP服务器A沿原路发出,重复以上步骤直至响应数据发送到主机A。
标签:封装,IP,网络,MAC,转发,地址,数据,路由器 From: https://blog.51cto.com/garrett/6210109