ipv4、ipv6、tcp、udp包结构以及字段解释

ipv4、ipv6、tcp、udp

存在csdn上方便多端查看

IPv4头部(通常20-60字节):

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1. Version (4位)

    • 指定IP协议的版本,IPv4的这个值为4。
  2. Internet Header Length (IHL) (4位)

    • 指定头部的长度,单位为32位字(4字节)。最小值为5,表示没有任何选项的20字节头部。
  3. Type of Service (ToS) (8位) / Differential Services Field (DS Field)

    • 指定数据包的服务质量。现在更常用于DiffServ(区分服务),它指定了数据包的优先级和路由策略。
  4. Total Length (16位)

    • 指定整个IP数据包的长度,包括头部和数据,单位为字节。
  5. Identification (16位)

    • 数据包的唯一标识符,用于重组分段的数据包。
  6. Flags (3位)

    • 控制和标识分段。有两个标记:
      • DF (Don’t Fragment):设置时,表示数据包不允许被分段。
      • MF (More Fragments):除了最后一个分段外,其它分段设置该标记。
  7. Fragment Offset (13位)

    • 用于分段的数据包。指定该分段在原始数据中的位置。
  8. Time to Live (TTL) (8位)

    • 指定数据包在网络中可以经过的最大路由器数量。每经过一个路由器,这个值减1,减至0时数据包被丢弃。
  9. Protocol (8位)

    • 指定上层协议的类型,例如TCP是6,UDP是17。
  10. Header Checksum (16位)

    • 用于错误检测的校验和,仅覆盖头部。
  11. Source Address (32位)

    • 发送者的IP地址。
  12. Destination Address (32位)

    • 接收者的IP地址。
  13. Options (最多40字节)

    • 可选字段,用于支持诸如安全性、路由和时间戳等功能。
  14. Padding

    • 保证头部长度为32位的整数倍,通常是0。

IPv6头部(固定40字节):

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Traffic Class |           Flow Label                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Payload Length        |  Next Header  |   Hop Limit   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                         Source Address                        +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                      Destination Address                      +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1. Version (4位)

    • 指定了IP协议的版本,IPv6的这个值为6。
  2. Traffic Class (8位)

    • 与IPv4中的Type of Service(ToS)字段类似,用于区分不同类型的数据流和服务质量(QoS)。
  3. Flow Label (20位)

    • 用于标识来自同一“流”的数据包,这些数据包会被特殊处理,如保持相同的路径,用于实时通信服务。
  4. Payload Length (16位)

    • 指定跟在头部后面的数据的长度,单位为字节。这不包括头部本身的长度。
  5. Next Header (8位)

    • 指定了紧接着IPv6头部之后的首个扩展头部或上层协议头部(如TCP或UDP)。
  6. Hop Limit (8位)

    • 类似于IPv4中的Time to Live (TTL)字段,用于防止数据包在网络中无限制地循环。数据包每经过一个路由器,此值减1。
  7. Source Address (128位)

    • 发送者的IPv6地址。
  8. Destination Address (128位)

    • 接收者的IPv6地址。

TCP头部(通常20-60字节):

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |       Destination Port        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence Number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Acknowledgment Number                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Data |           |U|A|P|R|S|F|                               |
| Offset| Reserved  |R|C|S|S|Y|I|            Window             |
|       |           |G|K|H|T|N|N|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |         Urgent Pointer        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             data                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1. Source Port (16位)

    • 发送方的端口号,用于标识发送方的应用程序。
  2. Destination Port (16位)

    • 接收方的端口号,用于标识接收方的应用程序。
  3. Sequence Number (32位)

    • 数据段的序列号,用于数据的有序重组和丢失数据段的重传。
  4. Acknowledgment Number (32位)

    • 发送方期望收到的下一个数据段的序列号。确认号确认直到该号码前的所有数据都已正确接收。
  5. Data Offset (4位)

    • 指示TCP头部的大小,以32位字为单位。这告诉接收方数据从哪里开始。
  6. Reserved (6位)

    • 保留用于未来使用,但目前必须设为0。
  7. Flags (6位)

    • 控制位,包含如下标志:
      • URG:紧急指针字段有效。
      • ACK:确认字段有效。
      • PSH:提示接收方尽快将这个数据段传给应用层。
      • RST:重置连接。
      • SYN:同步序列号,用于建立连接。
      • FIN:释放连接。
  8. Window Size (16位)

    • 控制接收方愿意接收的数据量(以字节为单位),用于流量控制。
  9. Checksum (16位)

    • 对整个TCP段,包括TCP头部、数据和一个伪头部(包括源和目标IP地址、协议类型和TCP长度)的校验和,用于错误检测。
  10. Urgent Pointer (16位)

    • 当URG标志置位时,这个字段表示在数据段中有多少紧急数据需要被优先处理。
  11. Options (可变长)

    • TCP头部选项提供了一种机制来扩展TCP协议,支持如最大报文段大小(MSS)、窗口扩大因子、选择性确认(SACK)等高级特性。此字段不是必需的,长度可以是0。
  12. Padding (变长)

    • 保证TCP头部长度是32位字的整数倍。此字段不含重要信息,仅用于填充。

UDP头部(固定8字节):

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Source Port               |     Destination Port          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Length                    |     Checksum                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             data                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  1. Source Port (16位)

    • 源端口号,用于标识发送方的应用程序。在响应报文中,此字段也可以被用作目标端口。
  2. Destination Port (16位)

    • 目的端口号,用于标识接收方的应用程序。数据包到达目的地后,此端口号用来确定数据应交给哪个应用程序处理。
  3. Length (16位)

    • UDP头部和数据的总长度,单位是字节。这个字段的最小值是8(仅头部,无数据)。
  4. Checksum (16位)

    • 用于错误检测的校验和。它覆盖了UDP头部、数据和一个伪头部(包括源和目标IP地址、协议类型和UDP长度)。校验和是可选的,在IPv4中可以设为0表示不使用,但在IPv6中是必需的。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>