Sian 发表于 2014-2-10 17:32:04

二层三层数据流分析

本帖最后由 Sian 于 2014-2-11 09:20 编辑

一、拓扑图与配置脚本

Route:
interface FastEthernet0/0.2
encapsulation dot1Q 2
ip address 192.168.20.1 255.255.255.0
interface FastEthernet0/0.3
encapsulation dot1Q 3
ip address 192.168.30.1 255.255.255.0
Router#show ip route
.....
C    192.168.30.0/24 is directly connected, FastEthernet0/0.3
C    192.168.20.0/24 is directly connected, FastEthernet0/0.2
SWA:
interfce Fastethernet 0/1
switchport mode access
switchport access vlan 2
interfce Fastethernet 0/2
switchport mode access
switchport access vlan 3
interfce Fastethernet 0/10
switchport mode trunk
switchport trunk encapsulation dot1q
switchport trunk allowed vlan add 2 3
interfce Fastethernet 0/24
switchport mode trunk
switchport trunk encapsulation dot1q
switchport trunk allowed vlan add 2
SWB:
interfce Fastethernet 0/1
switchport mode access
switchport access vlan 2
interfce Fastethernet 0/24
switchport mode trunk
switchport trunk encapsulation dot1q
switchport trunk allowed vlan add 2
二、不同交换机同一VLAN互ping的完整通信过程
● PC1 Ping PC3,同一VLAN互ping,发出的ICMP Echo request报文,共40字节。32字节的内容,8字节的ICMP报文头(type=8,code=0)
IP报文头:20字节
以太帧头:14(18)字节
在PC上的帧长度是74Byte
● 以下是输出结果:
C:\Documents and Settings\lgg>ping 192.168.20.3
Pinging 192.168.100.1 with 32 bytes of data:
Reply from 192.168.20.3: bytes=32 time<1ms TTL=64
Reply from 192.168.20.3: bytes=32 time<1ms TTL=64
Reply from 192.168.20.3: bytes=32 time<1ms TTL=64
Reply from 192.168.20.3: bytes=32 time<1ms TTL=64
Ping statistics for 192.168.20.3:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
Ping的过程:
说明:为了能够清楚的说明数据交换通信流的转发过程,假设网络中的PC、交换机和路由器上的ARP表、MAC表都是空的。

1、PC1通过命令(应用程序)发出ping 192.168.20.3的命令,PC1的ICMP协议对ping数据包进行封装,type=8,code=0,数据是“abcdefgxyhijklmnopqrstuvwabcdefghi”。

2、PC1进行网络层的数据封装,源IP是本机,目的IP是PC3的IP,上层协议类型是0x01(ICMP).

3、PC1判断192.168.20.3的IP是与自己同网段:自己的IP 192.168.20.2和ping对端主机的IP 192.169.20.3都与主机的子网掩码进行AND运算,得出相同的网络号值。

4、PC1的网络协议栈(操作系统的网络协议驱动程序)需要进行二层的数据帧装。此时PC1还不知道PC3的MAC地址。PC1发起ARP请求来获取PC3的MAC:
帧头:源MAC是本机网卡MAC,目的MAC是广播,type是0x0806(ARP)。
ARP请求帧数据内容:源MAC是本机网卡,源IP是本机IP,目的MAC是0,目的IP是ping命令中指定的PC3的IP)


5、PC1将ARP请求从网卡发送出来,SWA的F0/1口接收到该ARP请求数据帧并加上vlan 2的tag后,将PC的MAC记录到MAC表中(PC1_MAC,F0/1,vlan 2)。然后SWA将ARP请求广播给VLAN2的所有端口(除F0/1口外)。


6、ARP请求从F0/24端口发送出去,发送出去的数据是加上vlan 2的tag的。


7、SWB从F0/24端口接入收到ARP请求,记录MAC地址(PC1_MAC,F0/24,vlan 2)后,转发给vlan2内所有其他的端口。SWB将ARP剥离vlan 2的tag请求从F0/1端口发送出去。


8、PC3收到ARP请求后,由于目的ARP请求数据中的目的IP是本机的,PC3发起一个ARP回应单播帧。同时,PC3记录下PC1的ARP条目到缓存。ARP回应的内容:
帧头:目的MAC是PC1_MAC,源MAC是PC3的MAC,type是0x0806。
ARP回应帧数据:源MAC是PC3的,源IP是PC3的,目的MAC是PC1的,目的IP是PC1的。


9、PC3将ARP回应发送出去。SWB收到ARP回应帧,加上vlan 2的tag,记录MAC(PC3_MAC,F0/1,vlan 2)。SWB根据vlan2的MAC表直接将ARP回应帧F0/24端口发送出去,带有vlan2的tag。


10、SWA收到ARP回应帧后,根据vlan2的MAC表直接将ARP回应帧F0/1端口发送出去,发送时剥离vlan tag。


11、PC1收到ARP回应帧后,将PC3的ARP条目记录到缓存。PC1将ICMP数据包封装以太帧:
目的MAC:PC3的MAC,源MAC:PC1的MAC,协议类型是0x0800(IP包)。


12、PC1将封装的{}以太帧发送出去。SWA收到后,加上vlan2的tag,根据vlan2的MAC表从F0/24端口发送出去,发送时包含vlan 2的tag.


13、SWB接收到数据帧后,根据vlan2的MAC表将数据直接转发到F0/1端口,发送时剥离vlan 2的tag.


14、PC3收到数据后,操作系统网卡驱动和协议软件按层从底层到高层的拆包过程,首先识别是自己的MAC,和协议类型,指定为0x0800,因此IP协议软件处理该数据,IP协议软件标识的上层协议为0x01,交由ICMP协议模块来处理,ICMP模块判断该数据是一个Echo Request包,因此回应一个Echo reply,进行ICMP relay包封装。
ICMP Echo reply包:type=0,code=0,data=ICMP Echo Request包中的数据


15、PC3操作系统的IP协议模块对ICMP Echo relay进行IP包封装,目的IP是PC1,源IP是PC3(本机IP),协议是0x01(ICMP协议),上层数据是上一步封装的ICMP包。


16、PC3操作系统的MAC协议模块对数据进行封装,目的MAC(在操作系统的ARP缓存中)是PC1的MAC,源MAC是PC3的MAC,协议是0x0800(IP协议),上层数据包是上一步封装的IP包。


17、PC3将封装好的MAC帧发送出去。


18、SWB接收到数据后加上vlan2的tag并根据MAC表转发,SWA接收到数据后根据MAC转发,从F0/1端口剥离vlan tag后发出去。


19、PC1收到数据后,逐层拆包,解封装,最后由应该层的ping命令输出“Reply from 192.168.20.3: bytes=32 time<1ms TTL=64”。


20、重复上述过程,通过多个回合来判定网络连通性和稳定性,一次ping过程完了后输出如下值, 表明,连通性正常:
Ping statistics for 192.168.20.3:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

三、单臂路由不同网段通信过程
●PC1 Ping PC2,不同VLAN互ping,
发出的ICMP Echo request报文,共40字节。32字节的内容,8字节的ICMP报文头(type=8,code=0)
IP报文头:20字节
以太帧头:14字节
在PC上的帧长度是74Byte


●以下是输出结果:
C:\Documents and Settings\lgg>ping 192.168.30.2
Pinging 192.168.30.2 with 32 bytes of data:
Reply from 192.168.30.2: bytes=32 time<1ms TTL=64
Reply from 192.168.30.2: bytes=32 time<1ms TTL=64
Reply from 192.168.30.2: bytes=32 time<1ms TTL=64
Reply from 192.168.30.2: bytes=32 time<1ms TTL=64
Ping statistics for 192.168.30.2:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms
Ping的过程:
说明:为了能够清楚的说明数据交换通信流的转发过程,假设网络中的PC、交换机和路由器上的ARP表、MAC表都是空的。


1、PC1通过命令(应用程序)发出ping 192.168.30.2的命令,PC1的ICMP协议对ping数据包进行封装,type=8,code=0,数据是“abcdefgxyhijklmnopqrstuvwabcdefghi”。


2、PC1进行网络层的数据封装,源IP是本机,目的IP是PC2的IP,上层协议类型是0x01(ICMP).


3、PC1判断192.168.30.2的IP与自己不是同网段:自己的IP 192.168.20.2和ping对端主机的IP 192.169.30.2都与主机的子网掩码进行AND运算,得出相不同的网络号值。


4、PC1的网络协议栈(操作系统的网络协议驱动程序)需要进行二层的数据帧装。此时PC1还不知道PC2的MAC地址。PC1发起ARP请求来获取PC2的MAC:
帧头:源MAC是本机网卡MAC,目的MAC是广播,type是0x0806(ARP)。
ARP请求帧数据内容:源MAC是本机网卡,源IP是本机IP,目的MAC是0,目的IP是本机对应的网卡配置的网关IP 192.168.20.1(Router F0/0.2的IP))。


5、PC1将ARP请求从网卡发送出来,SWA的F0/1口接收到该ARP请求数据帧并加上vlan 2的tag后,将PC的MAC记录到MAC表中(PC1_MAC,F0/1,vlan 2)。然后SWA将ARP请求广播给VLAN2的所有端口(除F0/1口外)。


6、ARP请求从F0/10端口发送出去,发送出去的数据是加上vlan 2的tag的。


7、Router从F0/0.2端口接入收到ARP请求,由于ARP请求数据中的目的IP是Route的F0/0.2子接口的, Route发起一个ARP回应单播帧。同时, Router记录下PC1的ARP条目到缓存。ARP回应的内容:
帧头:目的MAC是PC1_MAC,源MAC是Router F0/0.2的MAC,type是0x0806。
ARP回应帧数据:源MAC是Router F0/0.2的接口MAC,源IP是Router的,目的MAC是PC1的,目的IP是PC1的。


8、Router将ARP回应发送出去,发送时是加上vlan 2的tag的。


9、SWA收到ARP回应帧后,记录MAC表(Router F0/0.1_MAC,F0/10,vlna 2),根据vlan2的MAC表直接将ARP回应帧从F0/1端口发送出去,发送时剥离vlan tag。


10、PC1收到ARP回应帧后,将Router的ARP条目记录到缓存。PC1将ICMP数据包封装以太帧:
目的MAC: Router F0/0.2的MAC,源MAC:PC1的MAC,协议类型是0x0800(IP包)。


11、PC1将封装的{}以太帧发送出去。SWA收到后,加上vlan2的tag,根据vlan2的MAC表从F0/10端口发送出去,发送时包含vlan 2的tag.


12、Router 从F0/0.2接收到数据帧后,解二层帧的封装,根据IP的目的IP选择路由,目的IP是PC2的IP,是F0/0.3接口的直连路由。Router将IP包的TTL值减1并重新封装。根据路由,Router需要将数据发送到vlan3的网段,需要进行二层帧的重新封装,需要知道PC2的MAC地址。


13、Router从F0/0.3发送ARP请求,从F0/0.3发送时加上vlan3 tag,ARP请求帧内容为:
ARP请求帧头:目的MAC:广播,源MAC:F0/0.3的MAC,协议类型0x0806(ARP协议)
ARP请求帧数据:源MAC:F0/0.3的MAC,源IP:F0/0.3的IP;目的MAC:0,目的IP是PC2的IP。


14、SWA收到ARP请求帧请求后,记录MAC(Router F0/0.3_MAC,F0/10,vlan 3)。将ARP请求帧广播到vlan 3内除F0/10外的其他端口。其中会从F0/2端口剥离vlan 3 tag后发送出去。


15、PC2接收到ARP请求后,回应ARP请求,将回应请求帧发送出去,回应帧内容:
ARP回应帧头:目的MAC:Router F0/0.3子接口的MAC,源MAC:PC2的MAC,协议类型0x0806(ARP协议)
ARP回应帧数据:源MAC:PC2的MAC,源IP:PC2的IP;目的MAC:Router F0/0.3的MAC,目的IP:Router F0/0.3的IP 。


16、SWA收到ARP回应帧后,记录MAC(PC2_MAC,F0/2,Vlan3),然后根据MAC表将ARP回应帧发送给Router。


17、Router收到ARP回应帧后解封装并将ARP条目记录到ARP表中。


18、Router根据ARP表中的MAC地址进行二层数据帧重写:
目的MAC:PC2的MAC,源MAC:Router F0/0.3的MAC,协议类型:0x0800(IP包)。


19、Router将重写的二层帧从F0/0.3端口发送,加上vlan 3的tag。


20、SWA从F0/10收到数据,根据MAC表转发给PC2,往F0/2端口发送时剥离vlan 3的tag。


21、PC2接收到数据后,进行按层次从底层到高层的拆包过程,首先识别是自己的MAC,和协议类型,指定为0x0800,因此IP协议软件处理该数据,IP协议软件标识的上层协议为0x01,交由ICMP协议模块来处理,ICMP模块判断该数据是一个Echo Request包,因此回应一个Echo reply,进行ICMP relay包封装。
Echo reply包:type=0,code=0,data=ICMP Echo Request包中的数据


22、PC2操作系统的IP协议模块对ICMP Echo relay进行IP包封装,目的IP是PC1,源IP是PC2(本机IP),协议是0x01(ICMP协议),上层数据是上一步封装的ICMP包。


23、PC2操作系统的MAC协议模块对数据进行封装,目的MAC(在操作系统的ARP缓存中)是Router F0/0.3的MAC,源MAC是PC2的MAC,协议是0x0800(IP协议),上层数据包是上一步封装的IP包。


24、PC2将封装好的MAC帧发送出去。


25、SWA从F0/2收到数据后加上vlan 3的tag,根据MAC从F0/10转发给Router。


26、Router从F0/0.3接收到数据后,选择路由,存在直连路由,接着对数据进行重写,TTL减1,根据ARP表,二层数帧头为:
目标MAC是PC1的MAC,源MAC是F0/0.2的MAC,类型是0x0800。
数据从F0/0.2发送出去,发送时加上vlan 2的tag。


27、SWA收到数据后,根据vlan 2的MAC表转发,从F0/1端口剥离vlan 2 tag发送出去。


28、PC1收到数据后,逐层拆包,解封装,最后由应该层的ping命令输出“Reply from 192.168.30.2: bytes=32 time<1ms TTL=64”。


29、重复上述过程,通过多个回合来判定网络连通性和稳定性,一次ping过程完了后输出如下值, 表明,连通性正常:
Ping statistics for 192.168.30.2:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms


四、附 PING ICMP包格式和ARP请求帧格式

Ping Echo request:


Ping Echo reply:


ARP请求:



ARP回应:


五、附几种数据格式


以太帧II:



ICMP协议



IP协议






页: [1]
查看完整版本: 二层三层数据流分析