前言
今天是第七节分享了,不知道大家看完前六篇内容感觉怎么样? 应该留言的朋友不多,所以我也不知道大家的一个观感如何,只能尽力的来更新了
好吧!话不多说,开始今天的内容~
数据的封装
数据的解封装
数据转发过程
如图,主机A想访问服务器A由一个数据传输过程:
数据的封装
传输层的封装
主机A会对待发送的应用数据首先执行加密和压缩等相关操作,之后进行传输层封装。然后将数据从应用层下放到传输层,以传输层TCP封装为例:
当主机建立了到达目的地的TCP连接后,开始对应用层数据进行封装,将数据段的源端口号为主机A随机选择的1027号端口,目的端口号为服务器A的TCP知名端口80(源端口:使用动态端口 目的端口:根据所需要的服务来封装 HTTP=80)
网络层的封装
主机A完成传输层封装后,一般会进行网络层数据封装,以IP封装为例:
在使用IP进行封装时,需要明确IP报文的源和目的地址。如果IP报文的大小大于网络的最大传输单元(MTU),则该报文有可能在传输过程中被分片。
生存时间(TTL)字段用来减少网络环路造成的影响。默认TTL值为255。路由器转发一个数据包时,该值会被减1,如果路由器发现该值被减为0,就会丢弃该数据包
本例中,Protocol: 根据上层的协议来决定取值 TCP=6/UDP=17,SIP:自己的IP地址,DIP:目标服务器的IP地址
查找路由表
主机A在发送数据前需要先检查是否能够到达目的端,这个过程是通过查找路由来完成的。
在此示例中,主机A拥有一条到达“任何网络”的路由,它发往其他网络的数据都会通过IP地址为10.1.1.1的接口转发到下一跳,即网关10.1.1.254。
查找ARP缓存
接下来,由于数据包要被封装成数据帧,所以主机A需要获取下一跳的MAC地址,也就是网关的MAC地址。主机首先会查询ARP缓存表。
本例中,主机A的ARP缓存表中存在网关MAC地址的表项。
如果没有查找到网关的MAC地址表项,主机A会通过发送ARP请求来获取网关的MAC地址。
数据链路层的封装
DMAC:根据路由表查找下一跳,封装去往服务器的下一跳的MAC地址
SMAC:自己的MAC地址
此时数据封装完毕,就可以在网络中进行转发
数据的解封装
数据链路层的解封装
当下一跳的设备收到报文后,对数据帧进行解封装
发现目的MAC是自己,则继续处理
发现目的MCA不是自己,则丢弃报文
网络层的解封装
此时继续处理报文,对IP报文进行解封装
发现IP地址是自己,则会送往上层协议处理
发现IP地址不是自己,则会路由表查找去往该网段的下一跳地址。如果存在转发路径,会为数据包添加一个新的二层帧头和帧尾部
DMAC: 自己的MAC
SMAC: 下一跳的MAC
传输层的解封装
服务器检查TCP头部的目的端口,然后将数据段发送给应用层相应的协议进行处理