网络协议报文解析及工具使用介绍
1. 以太网帧格式及各字段作用
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination MAC Address (48 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source MAC Address (48 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| EtherType / Length (16 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload (可变长度) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Frame Check Sequence (FCS, 32 bits) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Destination MAC Address (48 bits):目的设备的 MAC 地址。
- Source MAC Address (48 bits):源设备的 MAC 地址。
- EtherType / Length (16 bits):表示上层协议类型或帧的长度。IP 的 EtherType 为 0x0800。
- Payload (可变长度):封装的 IP 报文。
- Frame Check Sequence (FCS) (32 bits):用于校验帧的完整性。
2. IP 报文格式及各字段作用
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|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 bits):IP 协议版本。IPv4 的值为 4。
- IHL (4 bits):IP 头部长度,以 32-bit words 计。
- Type of Service (8 bits):服务类型字段,定义数据报的优先级和服务质量。
- Total Length (16 bits):IP 数据报的总长度,包括头部和数据部分。
- Identification (16 bits):唯一标识主机发送的每一份数据报,用于数据报的重组。
- Flags (3 bits):控制数据报的分片。
- Fragment Offset (13 bits):表示数据报分片在原数据报中的位置。
- Time to Live (8 bits):数据报在网络中的生存时间,每经过一个路由器该值减 1。
- Protocol (8 bits):表示数据报中数据部分的协议类型。ICMP 的值为 1。
- Header Checksum (16 bits):IP 头部校验和,用于检验头部的完整性。
- Source Address (32 bits):源 IP 地址。
- Destination Address (32 bits):目的 IP 地址。
- Options (可变长度):可选字段,用于支持额外的 IP 功能。
- Padding (可变长度):用于填充 IP 头部,使其长度为 32-bit 的整数倍。
3. ICMP 报文格式及各字段作用
ICMP Echo 请求报文格式(按位图形式)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type(8) | Code(0) | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type (8 bits):表示 ICMP 报文的类型。对于 Echo 请求报文,该值为 8。
- Code (8 bits):表示 ICMP 报文的子类型。对于 Echo 请求报文,该值为 0。
- Checksum (16 bits):用于校验报文的完整性。计算时需要包括整个 ICMP 报文。
- Identifier (16 bits):用于唯一标识 Echo 请求和 Echo 回复报文对。通常由发出请求的进程设置。
- Sequence Number (16 bits):用于标识每个 Echo 请求报文的序列号,通常从 0 开始递增。
- Data (可变长度):包含可选数据,通常是填充数据,长度由发送方指定。常用于测试目的。
ICMP Echo 回复报文格式(按位图形式)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type(0) | Code(0) | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Type (8 bits):表示 ICMP 报文的类型。对于 Echo 回复报文,该值为 0。
4. TCP 报文头部格式及各字段作用
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | Reser- |N|C|E|U|A|P|R|S|F| |
| Offset| ved |S|W|C|R|C|S|S|Y|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Window | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Urgent Pointer | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options (if any) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Source Port (16 bits):源端口号,表示发送方的端口。
- Destination Port (16 bits):目的端口号,表示接收方的端口。
- Sequence Number (32 bits):序列号,表示数据段在整个报文流中的位置。
- Acknowledgment Number (32 bits):确认号,表示期望接收的下一个序列号。该字段仅在 ACK 标志设置时有效。
- Data Offset (4 bits):数据偏移量,表示 TCP 头部的长度,以 32-bit words 计。
- Reserved (6 bits):保留位,必须为 0。
- Flags (9 bits):控制标志,包括:
- NS (1 bit):Nonce Sum,ECN 使用。
- CWR (1 bit):Congestion Window Reduced,拥塞控制。
- ECE (1 bit):ECN-Echo,显式拥塞通知。
- URG (1 bit):Urgent,表示 Urgent Pointer 字段有效。
- ACK (1 bit):Acknowledgment,表示确认号字段有效。
- PSH (1 bit):Push,表示接收方应立即交付数据。
- RST (1 bit):Reset,重置连接。
- SYN (1 bit):Synchronize,初始化连接。
- FIN (1 bit):Finish,表示发送方数据发送完毕。
- Window (16 bits):窗口大小,表示接收方的缓冲区大小,用于流量控制。
- Checksum (16 bits):校验和,用于检验报文的完整性。
- Urgent Pointer (16 bits):紧急指针,指向紧急数据的结束位置。仅在 URG 标志设置时有效。
- Options (可变长度):可选字段,用于支持额外功能,例如窗口缩放、时间戳等。
- Data (可变长度):实际传输的数据。
5. UDP 报文头部格式及各字段作用
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Source Port (16 bits):源端口号,表示发送方的端口。
- Destination Port (16 bits):目的端口号,表示接收方的端口。
- Length (16 bits):UDP 报文的总长度,包括头部和数据部分,以字节为单位。
- Checksum (16 bits):校验和,用于检验报文的完整性。某些情况下可以为 0。
- Data (可变长度):实际传输的数据。
6. 使用场景
TCP 使用场景
- 网页浏览:HTTP/HTTPS 协议依赖 TCP 提供可靠的数据传输。
- 文件传输:FTP 协议使用 TCP 进行文件传输,确保数据完整性。
- 电子邮件:SMTP、IMAP 和 POP3 等邮件协议依赖 TCP 进行可靠的邮件传输。
UDP 使用场景
- 实时通信:VoIP(如 Skype)和视频会议等应用需要快速传输数据,不要求数据可靠性。
- 流媒体:在线视频和音频流媒体服务(如 Netflix、Spotify)使用 UDP 进行数据传输,允许一定程度的数据丢失。
- 在线游戏:网络游戏通常使用 UDP 传输游戏状态。