各种协议的数据包头长度如下:
-
UDP 头(8 字节)
- 源端口(2 字节)
- 目标端口(2 字节)
- UDP 数据包长度(2 字节)
- 校验和(2 字节)
-
RTP 头(12 字节或者24字节)
- 版本号(2位)
- 填充位(1位)
- 扩展位(1位)
- CSRC计数器(4位)
- 标记位(1位)
- 负载类型(7位)
- 序列号(16位)
- 时间戳(32位)
- SSRC(32位)
- CSRC列表(如果有,每个元素占32位)
-
TCP头(20/40/60/80字节)
- 源端口(2 字节)
- 目标端口(2 字节)
- 序列号(4 字节)
- 确认号(4 字节)
- 数据偏移和控制标志(4 字节)
- 窗口大小(2 字节)
- 校验和(2 字节)
- 紧急指针(2 字节)(选项字段有时候不存在)
-
IP 头(20 字节或 40 字节 或者 60 字节)
- 版本号和首部长度(1 字节)
- 服务类型(1 字节)
- 总长度(2 字节)
- 标识符(2 字节)
- 标志和片位移(2 字节)
- 生存时间(1 字节)
- 协议类型(1 字节)
- 首部校验和(2 字节)
- 源 IP 地址(4 字节)
- 目的 IP 地址(4 字节)
- 选项信息(可选,每个选项至少有1字节
RTP 头在基本格式下是12个字节,但如果启用了RTP头部扩展,则RTP头的长度会增加为最多24个字节。在RTP头部扩展中,包含了一个扩展头和多个扩展字段,每个扩展字段占据4个字节。因此,启用RTP头部扩展时,RTP头的长度将增加12个字节(扩展头占用4个字节,至少需要一个扩展字段,占用4个字节)。因此,RTP头的长度可以是12或24个字节,具体取决于是否使用了RTP头部扩展。
TCP头在基本格式下是20个字节,但如果TCP头部选项被使用了,那么TCP头的长度将增加到40个字节。TCP头部选项可以用于传输可变长度的选项信息,例如MSS(Maximum Segment Size)和SACK(Selective Acknowledgement)等。当TCP头部选项被使用时,每个选项占用最少4个字节,包括2个字节的选项类型字段和2个字节的选项长度字段。因此,TCP头的长度将增加20个字节,从20个字节变为40个字节。因此,TCP头的长度可以是20或40个字节,具体取决于是否使用了TCP头部选项。
IP头在基本格式下是20个字节,但是如果启用了IP头部选项,则IP头的长度将增加到最多60个字节(每个选项占用最少1个字节,而选项长度字段占用1个字节,因此一个选项至少需要2个字节)。当IP头部选项被使用时,每个选项占据的长度可以是4的倍数。因此,如果选项长度是39个字节或以下,IP头的长度为20字节;如果选项长度是40个字节或更多,那么IP头的长度将增加到40或者更多字节。因此,IP头的长度可以是20、40或更多字节,取决于是否启用了IP头部选项以及选项的长度。