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中是必需的。

相关推荐

  1. ipv4ipv6、tcp、udp结构以及字段解释

    2024-03-25 08:26:04       46 阅读
  2. IPv4/IPv6 组播对应的MAC地址

    2024-03-25 08:26:04       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 08:26:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 08:26:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 08:26:04       87 阅读
  4. Python语言-面向对象

    2024-03-25 08:26:04       96 阅读

热门阅读

  1. 快速入门Kotlin③类与对象

    2024-03-25 08:26:04       44 阅读
  2. 如何理解React

    2024-03-25 08:26:04       47 阅读
  3. Linux命令-dig命令(域名查询工具)

    2024-03-25 08:26:04       40 阅读
  4. 利用K8S Statefulset搭建Etcd集群 - 本地存储

    2024-03-25 08:26:04       43 阅读
  5. 数据分析-概率分布

    2024-03-25 08:26:04       57 阅读
  6. 蔚来-安全开发一面/二面

    2024-03-25 08:26:04       37 阅读
  7. 亚马逊认证考试系列 - 知识点 - 安全组简介

    2024-03-25 08:26:04       38 阅读
  8. Rust教程:How to Rust-基本类型

    2024-03-25 08:26:04       37 阅读
  9. 每天学习一个Linux命令之apt

    2024-03-25 08:26:04       48 阅读
  10. RabbitMQ的事务机制

    2024-03-25 08:26:04       36 阅读
  11. RabbitMQ如何保证消息不丢?

    2024-03-25 08:26:04       45 阅读
  12. 14个Python自动化实战脚本

    2024-03-25 08:26:04       31 阅读
  13. [AIGC] 使用Spring Boot进行单元测试:一份指南

    2024-03-25 08:26:04       42 阅读