年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2979|回复: 0

二层三层数据流分析

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

    发表于 2014-2-10 17:32:04 | 显示全部楼层 |阅读模式
    本帖最后由 Sian 于 2014-2-11 09:20 编辑

    一、拓扑图与配置脚本
    001.png
    Route:
    1. interface FastEthernet0/0.2
    2. encapsulation dot1Q 2
    3. ip address 192.168.20.1 255.255.255.0
    4. interface FastEthernet0/0.3
    5. encapsulation dot1Q 3
    6. ip address 192.168.30.1 255.255.255.0
    7. Router#show ip route
    8. .....
    9. C    192.168.30.0/24 is directly connected, FastEthernet0/0.3
    10. C    192.168.20.0/24 is directly connected, FastEthernet0/0.2
    复制代码
    SWA:
    1. interfce Fastethernet 0/1
    2.   switchport mode access
    3.   switchport access vlan 2
    4. interfce Fastethernet 0/2
    5.   switchport mode access
    6.   switchport access vlan 3
    7. interfce Fastethernet 0/10
    8.   switchport mode trunk
    9.   switchport trunk encapsulation dot1q
    10.   switchport trunk allowed vlan add 2 3
    11. interfce Fastethernet 0/24
    12.   switchport mode trunk
    13.   switchport trunk encapsulation dot1q
    14.   switchport trunk allowed vlan add 2
    复制代码
    SWB:
    1. interfce Fastethernet 0/1
    2.   switchport mode access
    3.   switchport access vlan 2
    4. interfce Fastethernet 0/24
    5.   switchport mode trunk
    6.   switchport trunk encapsulation dot1q
    7.   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
    ● 以下是输出结果:
    1. C:\Documents and Settings\lgg>ping 192.168.20.3
    2. Pinging 192.168.100.1 with 32 bytes of data:
    3. Reply from 192.168.20.3: bytes=32 time<1ms TTL=64
    4. Reply from 192.168.20.3: bytes=32 time<1ms TTL=64
    5. Reply from 192.168.20.3: bytes=32 time<1ms TTL=64
    6. Reply from 192.168.20.3: bytes=32 time<1ms TTL=64
    7. Ping statistics for 192.168.20.3:
    8.     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    9. Approximate round trip times in milli-seconds:
    10. 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将封装的{[MAC][IP][ICMP Echo request]}以太帧发送出去。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


    ●  以下是输出结果:
    1. C:\Documents and Settings\lgg>ping 192.168.30.2
    2. Pinging 192.168.30.2 with 32 bytes of data:
    3. Reply from 192.168.30.2: bytes=32 time<1ms TTL=64
    4. Reply from 192.168.30.2: bytes=32 time<1ms TTL=64
    5. Reply from 192.168.30.2: bytes=32 time<1ms TTL=64
    6. Reply from 192.168.30.2: bytes=32 time<1ms TTL=64
    7. Ping statistics for 192.168.30.2:
    8.     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    9. Approximate round trip times in milli-seconds:
    10.     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将封装的{[MAC][IP][ICMP Echo request]}以太帧发送出去。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:
    002.png

    Ping Echo reply:
    003.png

    ARP请求:
    004.png


    ARP回应:
    005.png

    五、附几种数据格式


    以太帧II:
    006.png


    ICMP协议
    007.png


    IP协议
    008.png





    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-3-29 06:49 , Processed in 0.048266 second(s), 21 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表