数据通讯封装解封装详细流程

一、pc1与pc2的通信过程

pc1 telnet pc2

1 从pc1的应用层向pc2发出一个telnet请求

2 该请求下到pc1的传输层,传输层在上层数据前面加上tcp报头,报头中包括目标端口为23,以及一个大于1024,小于65535的随机端口作为源端口。

3 传输层数据下到网络层,pc1在网络层封装,源ip地址为pc1的地址,目标ip地址为pc2的地址。

4 pc1将pc2的ip地址和子网掩码与自己做比对,可以发现pc2与自己处于相同的子网。所以数据传输不必经过网关设备。

5 数据包下到pc1的数据链路层进行封装,源mac地址为pc1的mac地址,目标mac地址查询自己的arp表。

6 如果pc1 arp表里没有pc2对应的mac地址,pc1发出一个arp广播查找pc2的mac地址,arp报文直接封装在2层之上,发送者(sender)的mac地址为pc1的mac地址,sender ip为pc1的ip地址。指向(target)mac为全0,target ip为pc2的ip。二层数据帧的目标指向二层广播地址(12个F)。

7 交换机sw1收到pc1的arp报文后,若mac地址表不存在pc1的mac地址,就会将pc1的mac地址和pc1所连端口号记录到mac地址表,pc1的mac地址对应的端口号为1。然后将其做除发送端口外的泛洪处理。若存在的pc1-mac与端口的对应关系,则复位其老化计时器。并按mac地址表所记录的接口发送出该报文

8 局域网所有其他pc,包括网关设备都能接收到pc1的arp广播,并拆封二层帧头,target ip地址,target ip地址是否为自己。因为target ip是pc2的ip地址,此时pc2会将pc1与其mac的对应关系写入自己的ARP缓存表,这样减少了pc2发送arp广播请求pc1的mac的广播报文,提高了网络效率。之后pc2会以单播的方式给pc1回应消息,消息内包括pc2的mac地址作为sender mac地址,pc1的mac地址作为target地址。pc2的ip地址作为sender ip地址,pc1的ip地址作为target ip地址。(具体ARP Reply报文如下)

9 交换机sw1收到pc2的回复帧后,读取二层的目标mac地址,并在自己的mac地址表里查询,mac地址表里有pc1的mac地址和端口的对应关系,所以sw1直接将报文从该端口发送出去,同时读出这个二层帧的源mac地址,记录pc2的mac地址和端口2的对应关系到mac地址表中。

10 pc1收到pc2的arp回复后将pc2的ip地址和mac地址对应关系写到自己的arp表中,并将pc2的mac地址作为目标mac地址写到待发送的帧内。

11 pc1把帧转换成bit流,从物理接口发出。

12 sw1收到这段bit流,读前6个字节的目标MAC地址,然后查看自己的mac地址表,表中有这个目标mac地址和端口的对应关系,并且和源mac地址不在同一个端口上。于是sw1把这个二层帧从对应的端口转发出去,其他端口不会转发该帧。

13 pc2接收到这个二层数据帧,查看帧的目标mac地址,和自己相等,说明该帧是发送给自己的,于是将二层帧头解开。

14 pc2查看三层包头,只要目标ip地址和自己匹配,即解开第三层封装。

15 pc2查看传输层报头,目标端口为23,pc2向上层应用查看自己是否开启了端口为23的上层服务。若开启则把传输层报头解封装后将数据送往上层。

二、pc1与pc4的通信

pc1 telnet pc4

1 从pc1的应用层向pc4发出一个telnet请求

2 该请求下到pc1的传输层,传输层在上层数据前面加上tcp报头,报头中包括目标端口为23,以及一个大于1024,小于65535的随机端口作为源端口。

3 传输层数据下到网络层,pc1在网络层封装,源ip地址为pc1地址,目标ip地址为pc4地址。

4 pc1将pc4的ip地址和子网掩码与自己做比对,可以发现pc4和自己不处于相同的子网。对于不处于相同子网的通信,是要通过网关处理的。本例中pc1的网关为r1的E0接口。

5 数据包下到pc1的数据链路层进行封装,源mac地址为pc1的mac地址,目标mac也就是网关mac地址,通过查询自己的arp表获取。

6 如果pc1 arp表里没有网关对应的mac地址,pc1发出一个arp广播查找网关的mac地址,arp报文直接封装在2层之上,发送者(sender)的mac地址为pc1的mac地址,sender ip为pc1的ip地址。指向(target)mac为全0,target ip为网关的ip。二层数据帧的目标指向二层广播地址(12个F)。

7 交换机sw1收到pc1的arp报文后,若mac地址表不存在pc1的mac地址,就会将pc1的mac地址和pc1所连端口号记录到mac地址表,之后将其做除发送端口外的泛洪处理。若存在该条目,则复位其aging timer老化计时器,之后按mac地址表所记录的接口发送出该报文。

8 局域网所有其他pc,包括网关设备都能接收到pc1的arp广播,并拆封二层帧头,查看target ip地址,target ip地址是否为自己。因为target ip是网关的ip地址,此时网关设备会将pc1与其mac的对应关系写入自己的ARP缓存表,这样减少了网关设备发送arp广播请求pc1的mac的广播报文,提高了网络效率。之后网关会以单播的方式给pc1回应消息,消息内包括网关的mac地址作为sender mac地址,pc1的mac地址作为target地址。网关的ip地址作为sender ip地址,pc1的ip地址作为target ip地址。

9 交换机sw1收到网关的回复帧后,读取二层的目标mac地址,并在自己的mac地址表里查询,mac地址表里有pc1的mac地址和端口的对应关系,所以sw1直接将报文从该端口发送出去,不再泛洪到其他端口。同时读出这个二层帧的源mac地址,记录路由器e0口的mac地址和端口4的对应关系到mac地址表中。

10 pc1收到网关的arp回复后将网关的ip地址和mac地址对应关系写到自己的arp表中,并将网关的mac地址作为目标mac地址写到待发送的帧内。

11 pc1把帧转换成bit流,从物理接口发出。

12 sw1收到这段bit流,读前6个字节的目标MAC地址,然后查看自己的mac地址表,表中有这个mac地址和端口的对应关系,并且和源mac地址不在同一个端口上。于是sw1把这个二层帧从对应的端口转发出去。

13 网关路由器接收到这个二层数据帧,查看帧的目标mac地址,和自己相等,说明该帧是发送给自己的,于是将二层帧头解开。

14 路由器R1查看三层包头,目标ip地址自己的e0口不匹配,也不等同于自己其他接口的ip地址,说明这不是一个给自己的包,而是一个去往其他网段的包,所以网关不再往上解封装。

15 路由器R1在自己的路由表里查询和数据包的目标ip地址匹配的路由,找出一条去往pc4所在网段的路由,该路由以自己的E1口为出口,下一跳路由器是r2。

16 路由器r1对数据包的三层数据不做任何改动,并封装上二层帧头,源mac地址是r1的e1口的mac地址,目标地址是r2的e1口的mac地址。(此处省略路由器r1获得r2的e1口mac地址的arp流程。)

17 路由器r1将这个二层帧转换成bit流从e1口发送出去。

18 路由器r2的e1口接收到这段bit流,并整合成帧,查看帧的目标mac地址,和自己的mac地址相等,说明这个帧是发送给自己的,于是路由器r2将该二层帧的帧头解掉。

19 路由器r2读取数据包的第三层信息。目标ip地址自己的e1口不匹配,也不等同于自己其他接口的ip地址,说明这不是一个给自己的包。于是不再往上解封装。

20 路由器R2在自己的路由表里查询和报文的目标ip地址匹配的路由,找出一条直连路由和数据包的目标网络匹配,于是认定该数据包是发往自己一个直连网段。

21 路由器R2对数据包的三层数据不做任何改动,并封装上二层帧头,源mac地址是r2的e0口的mac地址,目标地址是pc4的mac地址。

22 路由器查找自己的arp表,找寻和pc4对应的mac地址。如果arp表中没有和pc4对应的条目,就从e0口向该网段发起一个arp广播。arp报文直接封装在2层之上,sender mac地址为路由器e0口的mac地址,sender ip为路由器e0口的ip地址。Target mac为全0,target ip为pc4的ip。二层数据帧的目标指向二层广播地址(12个F)。

23 交换机sw2收到r2 e0口的arp报文后,若mac地址表不存在pc4的mac地址,就会将r2 e0口的mac地址和r2 e0所连端口号记录到mac地址表,之后将其做除发送端口外的泛洪处理。若存在该条目,则复位其aging timer老化计时器,之后按mac地址表所记录的接口发送出该报文。

24局域网所有其他pc,都能接收到路由器(网关)的arp广播,并拆封二层帧头,查看target ip地址,target ip地址是否为自己。因为target ip是pc4的ip地址,此时pc4会将网关e0口与其mac的对应关系写入自己的ARP缓存表,这样减少了设备发送arp广播请求网关e0口的mac的广播报文,提高了网络效率。之后pc4会以单播的方式给网关e0口回应消息,消息内包括pc4的mac地址作为sender mac地址,网关e0口的mac地址作为target地址。Pc4的ip地址作为sender ip地址,网关的ip地址作为target ip地址。

25 交换机sw2收到pc4的回复帧后,读取二层的目标mac地址,并在自己的mac地址表里查询,mac地址表里有该mac地址和端口的对应关系,所以sw2直接将报文从该端口发送出去,同时读出这个二层帧的源mac地址,记录pc4的mac地址和端口1的对应关系到mac地址表中(若原来不存在的话)。

26 路由器的e0口收到pc4的arp回复后将pc4的ip地址和mac地址对应关系写到自己的arp表中,并将pc4的mac地址作为目标mac地址写到待发送的帧内。

27 路由器e0口把帧转换成bit流,在物理从物理接口发出。

28 sw2收到这段bit流,读前6个字节的目标MAC地址,然后查看自己的mac地址表,表中有这个mac地址和端口的对应关系,并且和源mac地址不在同一个端口上。于是sw2把这个二层帧从对应的端口转发出去。

29 pc4接收到这个二层数据帧,查看帧的目标mac地址,和自己相等,说明该帧是发送给自己的,于是将二层帧头解开。

30 pc4查看三层包头,目标ip地址和mask和自己也是相等,于是解开第三层封装。

31 pc4查看传输层报头,目标端口为23,pc4向上层应用查看自己是否开启了端口为23的上层服务。若开启则把传输层报头解封装后将数据送往上层。

来源:http://www.12090603.com

发布于:2019-11-23 06:12:41