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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Version (4位)
- 指定IP协议的版本,IPv4的这个值为4。
- Internet Header Length (IHL) (4位)
- 指定头部的长度,单位为32位字(4字节)。最小值为5,表示没有任何选项的20字节头部。
- Type of Service (ToS) (8位) / Differential Services Field (DS Field)
- 指定数据包的服务质量。现在更常用于DiffServ(区分服务),它指定了数据包的优先级和路由策略。
- Total Length (16位)
- 指定整个IP数据包的长度,包括头部和数据,单位为字节。
- Identification (16位)
- 数据包的唯一标识符,用于重组分段的数据包。
- Flags (3位)
- 控制和标识分段。有两个标记:
- DF (Don't Fragment):设置时,表示数据包不允许被分段。
- MF (More Fragments):除了最后一个分段外,其它分段设置该标记。
- 控制和标识分段。有两个标记:
- Fragment Offset (13位)
- 用于分段的数据包。指定该分段在原始数据中的位置。
- Time to Live (TTL) (8位)
- 指定数据包在网络中可以经过的最大路由器数量。每经过一个路由器,这个值减1,减至0时数据包被丢弃。
- Protocol (8位)
- 指定上层协议的类型,例如TCP是6,UDP是17。
- Header Checksum (16位)
- 用于错误检测的校验和,仅覆盖头部。
- Source Address (32位)
- 发送者的IP地址。
- Destination Address (32位)
- 接收者的IP地址。
- Options (最多40字节)
- 可选字段,用于支持诸如安全性、路由和时间戳等功能。
- 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 +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Version (4位)
- 指定了IP协议的版本,IPv6的这个值为6。
- Traffic Class (8位)
- 与IPv4中的Type of Service(ToS)字段类似,用于区分不同类型的数据流和服务质量(QoS)。
- Flow Label (20位)
- 用于标识来自同一"流"的数据包,这些数据包会被特殊处理,如保持相同的路径,用于实时通信服务。
- Payload Length (16位)
- 指定跟在头部后面的数据的长度,单位为字节。这不包括头部本身的长度。
- Next Header (8位)
- 指定了紧接着IPv6头部之后的首个扩展头部或上层协议头部(如TCP或UDP)。
- Hop Limit (8位)
- 类似于IPv4中的Time to Live (TTL)字段,用于防止数据包在网络中无限制地循环。数据包每经过一个路由器,此值减1。
- Source Address (128位)
- 发送者的IPv6地址。
- 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Source Port (16位)
- 发送方的端口号,用于标识发送方的应用程序。
- Destination Port (16位)
- 接收方的端口号,用于标识接收方的应用程序。
- Sequence Number (32位)
- 数据段的序列号,用于数据的有序重组和丢失数据段的重传。
- Acknowledgment Number (32位)
- 发送方期望收到的下一个数据段的序列号。确认号确认直到该号码前的所有数据都已正确接收。
- Data Offset (4位)
- 指示TCP头部的大小,以32位字为单位。这告诉接收方数据从哪里开始。
- Reserved (6位)
- 保留用于未来使用,但目前必须设为0。
- Flags (6位)
- 控制位,包含如下标志:
- URG:紧急指针字段有效。
- ACK:确认字段有效。
- PSH:提示接收方尽快将这个数据段传给应用层。
- RST:重置连接。
- SYN:同步序列号,用于建立连接。
- FIN:释放连接。
- 控制位,包含如下标志:
- Window Size (16位)
- 控制接收方愿意接收的数据量(以字节为单位),用于流量控制。
- Checksum (16位)
- 对整个TCP段,包括TCP头部、数据和一个伪头部(包括源和目标IP地址、协议类型和TCP长度)的校验和,用于错误检测。
- Urgent Pointer (16位)
- 当URG标志置位时,这个字段表示在数据段中有多少紧急数据需要被优先处理。
- Options (可变长)
- TCP头部选项提供了一种机制来扩展TCP协议,支持如最大报文段大小(MSS)、窗口扩大因子、选择性确认(SACK)等高级特性。此字段不是必需的,长度可以是0。
- 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Source Port (16位)
- 源端口号,用于标识发送方的应用程序。在响应报文中,此字段也可以被用作目标端口。
- Destination Port (16位)
- 目的端口号,用于标识接收方的应用程序。数据包到达目的地后,此端口号用来确定数据应交给哪个应用程序处理。
- Length (16位)
- UDP头部和数据的总长度,单位是字节。这个字段的最小值是8(仅头部,无数据)。
- Checksum (16位)
- 用于错误检测的校验和。它覆盖了UDP头部、数据和一个伪头部(包括源和目标IP地址、协议类型和UDP长度)。校验和是可选的,在IPv4中可以设为0表示不使用,但在IPv6中是必需的。