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

ipv4、ipv6、tcp、udp

存在csdn上方便多端查看

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

json 复制代码
 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字节):

json 复制代码
 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字节):

json 复制代码
 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字节):

json 复制代码
 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中是必需的。
相关推荐
andxe9 小时前
安科士 AndXe 技术博客:400G QSFP112 SR4 光模块|AI 算力与超算短距互联最优方案
网络·人工智能·光模块·光通信
shiyi.十一10 小时前
第2章:应用层 — 知识要点与架构
网络·计算机网络·架构
DFT计算杂谈11 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
水境传感 李兆栋11 小时前
GNSS 位移监测站 :毫米级感知,筑牢安全监测防线
网络
中微极客12 小时前
2026主流AI Agent框架技术选型与性能对比
运维·网络·人工智能
猿的天空16 小时前
机器人双手迎来全栈训练系统:灵初智能EgoSteer让灵巧手无所不能
网络·人工智能·计算机·ai·程序员·机器人·编程
Xzaveir_77716 小时前
OPPO、vivo、荣耀号码认证:多终端拨测矩阵与异常复现
大数据·网络·科技·矩阵·产品经理·ai-native
wuqingshun31415916 小时前
从网络角度来看,用户从输入网址到网页显示,期间发生了什么?
网络
牛马工作号17 小时前
Zigbee 专业详解:从协议到排障
网络·物联网·安全
牛马工作号17 小时前
Wi‑Fi 完全指南:从 802.11 协议到 Wi‑Fi 7、AC+AP 与 Mesh 工程组网
网络·网络协议·智能路由器