• ETHERNET数据包格式( IP & UDP & ICMP & ARP )


    ETHERNET数据包格式( IP & UDP & ICMP & ARP )

    ETHERNET数据包格式( <wbr>IP <wbr>& <wbr>UDP <wbr>& <wbr>ICMP <wbr>& <wbr>ARP <wbr>)ETHERNET数据包格式

    一、ETHERNET 数据包的协议类型 TYPE 的值为 0x0800:IP协议,即:ETHERTYPE_IP,
        该值在 /usr/include/net/ethernet.h中有定义。ETHERNET 数据包的格式又细分
        为如下几种情况:

    (1) IP 报头中的协议号码为 IPPROTO_TCP,其值为 6 。ETHERNET 数据包的格式如下:

        |<------------ Ethernet Header ---------->|
        -------------------------------------------------------------------------
        |DST MAC ADDR |SRC MAC ADDR |    TYPE     |   IP PACKET  |  TCP PACKET  |
        -------------------------------------------------------------------------
        |<- 6 bytes ->|<- 6 bytes ->|<- 2 bytes ->|<- 20 bytes ->|<- 20 bytes ->|

        如下例所示:

        00 00 21 cd a8 48 00 0a 98 1f 0a 8a 08 00 45 00
        -- -- -- -- -- -- -- -- -- -- -- -- -- --

        00 28 38 13 40 00 7e 06 85 48 a6 6f e5 87 a6 6f
                             --       -- -- -- -- -- --

        e5 0d 04 3a 01 95 bc 5d 5a 8b 25 69 20 82 50 11
        -- -- -- -- -- --

        41 87 cc 34 00 00 00 00 00 00 00 00 00 00 00 00
        -- --

        其中作如下说明:

        00 00 --- 08 00         : ETHERNET PACKET,共 14 个字节

              00 00 21 cd a8 48 : 接收方的 MAC 地址,6 个字节
              00 0a 98 1f 0a 8a : 发送方的 MAC 地址,6 个字节
              08 00             : 协议类型,2 个字节,
                                  0x0800:IP协议,该值在/usr/include/net/ethernet.h
                                                  中有定义,其值为:ETHERTYPE_IP

        45 00 --- e5 0d         : IP PACKET ,共 20 个字节

              06                : 协议类型,1 是 ICMP,6 是 TCP,17 是 UDP
              a6 6f e5 87       : 发送方 IP 地址,4 个字节,十进制:166.111.229.135
              a6 6f e5 0d       : 接收方 IP 地址,4 个字节,十进制:166.111.229.13

        04 3a --- 00 00         : TCP PACKET,共 20 个字节

              04 3a             : 发送方的端口号,2 个字节,其十进制表示为:1082
              01 95             : 接收方的端口号,2 个字节,其十进制表示为:405
              41 87             : TCP PACKET 的窗口大小

    (2) IP 报头中的协议号码为 IPPROTO_UDP,其值为 17 。ETHERNET 数据包的格式如下:

        |<------------ Ethernet Header ---------->|
        ------------------------------------------------------------------------
        |DST MAC ADDR |SRC MAC ADDR |    TYPE     |   IP PACKET  | UDP PACKET  |
        ------------------------------------------------------------------------
        |<- 6 bytes ->|<- 6 bytes ->|<- 2 bytes ->|<- 20 bytes ->|<- 8 bytes ->|

        如下例所示:

        ff ff ff ff ff ff 00 80 c8 f7 0b 99 08 00 45 00
        -- -- -- -- -- -- -- -- -- -- -- -- -- --

        00 4e 0b 46 00 00 80 11 24 ff c0 a8 44 0a c0 a8
                             --

        44 ff 00 89 00 89 00 3a fa 63 80 37 01 10 00 01
              -- -- -- -- -- -- -- --

        00 00 00 00 00 00 20 45 4e 46 44 45 49 45 50 45

        4e 45 46 43 41 43 41 43 41 43 41 43 41 43 41 43

        41 43 41 43 41 42 4c 00 00 20 00 01

        其中作如下说明:

        ETHERNET PACKET、IP PACKET 的报头格式同 (1) ,
                            其中:第二行的 11 表示 IPPROTO_UDP 协议。

        00 89 --- fa 63         : UDP PACKET,共 8 个字节

              00 89             : 发送方的端口号,2 个字节,其十进制表示为:137
              00 89             : 接收方的端口号,2 个字节,其十进制表示为:137
              00 3a             : UDP 包长度,其十进制表示为:58
              fa 63             : UDP 检查和

    (3) IP 报头中的协议号码为 IPPROTO_ICMP,其值为 1 。ETHERNET数据包的格式如下:

        |<------------ Ethernet Header ---------->|
        -------------------------------------------------------------------------
        |DST MAC ADDR |SRC MAC ADDR |    TYPE     |   IP PACKET  | ICMP PACKET |
        -------------------------------------------------------------------------
        |<- 6 bytes ->|<- 6 bytes ->|<- 2 bytes ->|<- 20 bytes ->|<- 8 bytes ->|

        如下例所示:

        00 0a 98 1f 0a 8a 00 00 21 cd a8 48 08 00 45 00

        00 54 00 00 40 00 40 01 d0 97 a6 6f f9 0d ca 70
                             --

        00 24 08 00 bc 04 1b 21 00 01 c3 e6 2b 41 3b ae
              -- -- -- -- -- -- -- --

        0b 00 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15

        16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25

        26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35

        36 37

        其中作如下说明:

        ETHERNET PACKET、IP PACKET 的报头格式同 (1) ,
                            其中:第二行的 01 表示 IPPROTO_ICMP 协议。

        08 00 --- 00 01         : ICMP PACKET,共 8 个字节

              08                : ICMP_TYPE,1 个字节。
              00                : ICMP_CODE,1 个字节。
              bc 04             : ICMP 检查和
              1b 21             : ICMP 标识
              00 01             : ICMP 数据包序列号

    二、ETHERNET 数据包的协议类型 TYPE 的值为 0x0806:ARP协议,即:ETHERTYPE_ARP,
        该值在 /usr/include/net/ethernet.h中有定义。ETHERNET 数据包的格式如下:

        |<------------ Ethernet Header ---------->|
        ------------------------------------------------------------
        |DST MAC ADDR |SRC MAC ADDR |    TYPE     | ARP 协议数据包 |
        ------------------------------------------------------------
        |<- 6 bytes ->|<- 6 bytes ->|<- 2 bytes ->|<-- 28 bytes -->|

        如下例所示:

        ff ff ff ff ff ff 00 0a 98 1f 0a 8a 08 06 00 01
        -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

        08 00 06 04 00 01 00 0a 98 1f 0a 8a a6 6f e5 01
        -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

        00 00 00 00 00 00 a6 6f e5 58 00 00 00 00 00 00
        -- -- -- -- -- -- -- -- -- --

        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

        其中作如下说明:

        ff ff --- 08 06         : ETHERNET PACKET,共 14 个字节

              ff ff ff ff ff ff : 接收方的 MAC 地址,6 个字节
              00 0a 98 1f 0a 8a : 发送方的 MAC 地址,6 个字节
              08 06             : 协议类型,2 个字节,
                                  0x0806:ARP协议,在/usr/include/net/ethernet.h
                                                 中有定义,其值为:ETHERTYPE_ARP

        00 01 --- f9 58         : ARP PACKET ,共 28 个字节

              00 01             : 硬件地址格式,2 个字节
              08 00             : 协议地址格式,2 个字节
              06                : 硬件地址长度,1 个字节
              04                : 协议地址长度,1 个字节
              00 01             : 可选项,2 个字节,0x0001:ARPOP_REQUEST,
                                                  0x0002:ARPOP_REPLY
                                  该值在 /usr/include/net/if_arp.h中有定义
              00 0a 98 1f 0a 8a : 发送方的 MAC 地址,6 个字节
              a6 6f e5 01       : 发送方的 IP 地址, 4 个字节,十进制:166.111.229.1
              00 00 00 00 00 00 : 接收方的 MAC 地址,6 个字节
              a6 6f e5 58       : 接收方的 IP 地址, 4 个字节,十进
    制:166.111.229.88
     
  • 相关阅读:
    ASP.NET CORE 使用Consul实现服务治理与健康检查(2)——源码篇
    ASP.NET CORE 使用Consul实现服务治理与健康检查(1)——概念篇
    Asp.Net Core 单元测试正确姿势
    如何通过 Docker 部署 Logstash 同步 Mysql 数据库数据到 ElasticSearch
    Asp.Net Core2.2 源码阅读系列——控制台日志源码解析
    使用VS Code 开发.NET CORE 程序指南
    .NetCore下ES查询驱动 PlainElastic .Net 升级官方驱动 Elasticsearch .Net
    重新认识 async/await 语法糖
    EF添加
    EF修改部分字段
  • 原文地址:https://www.cnblogs.com/the-tops/p/5674229.html
Copyright © 2020-2023  润新知