IP报头格式
各字段功能
1、版本号(Version):长度 4 bit(比特) 。标识目前采用的 IP 协议的版本号。一般的值为 0100(IPv4),0110(IPv6)
2、IP 报头长度(Header Length):长度 4 bit 。这个字段的作用是为了描述 IP 报头的长度,因为在 IP 报头中有变长的可选部分。该部分占 4 个 bit,长度单位为 4 个字节,即本区域值 = IP 头部长度(单位为字节)/ 长度单位(4 个字节)。因此,一个 IP 报头的长度最长为 “ 1111 ”,即 15 x 4 个字节 = 60 个字节。IP 报头最小长度为 20 字节。
Header Length | Header Length 所代表的实际的 IP 报头长度 |
101 | 20 字节 |
110 | 24 字节 |
111 | 28 字节 |
1000 | 32字节 |
1001 | 36字节 |
1010 | 40字节 |
1011 | 44字节 |
1100 | 48字节 |
1101 | 52 字节 |
1110 | 56 字节 |
1111 | 60 字节 |
3、服务类型(Type of Service):长度 8 bit 。8 位按位被如下定义:PPP DTRC0
- PPP:前 3 位,定义包的优先级,取值越大数据越重要
- 000 普通(Routine)
- 001 优先的(Priority)
- 010 立即的发送(Immediate)
- 011 闪电式的(Flash)
- 100 比闪电还闪电式的(Flash Override)
- 101 CRI / TIC / ECP(找不到这个词的翻译)
- 110 网间控制(Internetwork Control)
- 111 网络控制(Network Control)
- DTRCO:后 5 位
- D 时延:0:普通,1:延迟尽量小
- T 吞吐量:0:普通,1:流量尽量大
- R 可靠性:0:普通,1:可靠性尽量大
- M 传输成本:0:普通,1:成本尽量小
- 0 最后一位被保留,恒定为 0
4、IP 包总长度(Total Length):长度 16 bit 。以字节为单位计算的 IP 包的长度(包括头部和数据),所以 IP 包最大长度 65 535 字节。所以,数据包有效载荷的大小 = IP 包总长度(Total Length)- IP 报头长度(Header Length)。
5、标识符(Identifier):长度 16 bit 。该字段和 Flags 和 Fragment Offest 字段联合使用,对较大的上层数据包进行分段(fragment)操作。路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。
6、标记(Flags):长度 3 bit 。
- 该字段第一位不使用。
- 第二位是 DF(Don’t Fragment)位,DF 位设为 1 时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。
- 第三位是 MF(More Fragments)位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的 IP 包的报头中将 MF 位设为 1
报头类型 | Next Header 字段值 | 描述 |
逐跳选项报头 | 0 | 该选项主要用于为在传送路径上的每跳转发指定发送参数,传送路径上的每台中间节点都要读取并处理该字段,应用场景:用于巨型载荷用于路由器提示用于资源预留 |
目的选项报头 | 60 | 目的选项报头携带了一些只有目的节点才会处理的信息。目前,目的选项报头主要应用于移动 IPv6 。 |
路由报头 | 43 | 路由报头和 IPv4 的 Loose Source and Record Route 选项类似,该报头能够被 IPv6 源节点用来强制数据包经过特定的路由器。 |
分段报头 | 44 | 同 IPv4 一样,IPv6 报文发送也受到 MTU 的限制。当报文长度超过 MTU 时就需要将报文分段发送,而在 IPv6 中,分段发送使用的是分段报头。 |
认证报头 | 51 | 该报头由 IPSec 使用,提供认证、数据完整性以及重放保护。它还对 IPv6 基本报头中的一些字段进行保护。 |
封装安全净载报头 | 50 | 该报头由 IPSec 使用,提供认证、数据完整性以及重放保护和 IPv6 数据报的保密,类似于认证报头。 |