【发布时间】:2009-12-10 23:15:54
【问题描述】:
IPv4 标头中不包括选项字段,在 20 字节的标头之后,后面是数据。该数据可能是 TCP 数据包,或 UDP 等。
现在给定一个 IPv4 数据包(带有标头和数据),如何找出数据中存在哪种类型的传输层数据包(TCP/UDP/等)?实际上我正在解析一个 IPv4 数据包,所以我需要了解这一点。
【问题讨论】:
IPv4 标头中不包括选项字段,在 20 字节的标头之后,后面是数据。该数据可能是 TCP 数据包,或 UDP 等。
现在给定一个 IPv4 数据包(带有标头和数据),如何找出数据中存在哪种类型的传输层数据包(TCP/UDP/等)?实际上我正在解析一个 IPv4 数据包,所以我需要了解这一点。
【问题讨论】:
IPv4 标头的协议字段(参见 RFC791)会告诉您:
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
协议编号由 IANA 分配并在此处列出:
http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
一些示例协议编号是:
1 ICMP
6 TCP
17 UDP
【讨论】: