IP数据报的首部格式及其内容是实现IP协议的主要功能的基础,因此我们有必要搞清楚这部分的内容。
一个IP数据报由20字节的固定部分
和最大40字节的可变部分
组成。
■ 固定部分
:指每个IP数据报首部都必须包含的部分。
■ 可变部分
:范围(0-40字节),增加IP数据报的功能,
IP数据报的首部常常以32bit(4字节)为单位
进行描述。
版本字段:占4位。表示IP协议的版本。通信双方使用的IP协议的版本必须一致,目前广泛使用的IP协议版本号为4(即IPv4)。
首部长度字段:占4位。表示IP数据报首部的长度。该字段的取值以4字节
为单位。范围(5-10)。
■ 最小十进制取值为5,表示IP数据报首部只有20字节固定部分。
■ 最大十进制取值为10,表示IP数据报首部包含20字节固定部分和最大40字节的可变部分。
可选字段:长度从1-40字节不等。用来支持排错、测量以及安全措施。
可选字段增加了IP数据报的功能,但这同时也使IP数据报的首部长度变成可变的。这就增加了每个路由器处理IP数据报的开销。实际很少使用。
填充字段:确保首部长度为4字节的整数倍,
使用全0来填充。首部长度=4的倍数=固定部分[20]+可变字段[1,40]。
当可变部分不等于4的整数倍时,就用0来填充以达到4的整数倍。
总长度:占16位。IP数据报的总长度(首部+数据载荷)。以字节为单位。最大取值为65535(2^16)。
区分服务:占8位。用来获得更好的服务。利用该字段的不同数值可提供不同等级的服务质量。只有在使用区分服务时,该字段才起作用。一般不使用。
【举例】
假设首部二进制(4字节为单位)
=0101
首部长度=0101*4=20字节
假设总长度=0000001111111100=1020字节
数据载荷长度=总长度-首部长度=1020-20=1000字节
标识,标志,片偏移共同用于IP数据报分片。
标识:占16个位。属于同一个数据报的个分片数据报属于具有相同的标识。
标志:占3位,个比特含义如下:
■ DF位:
1表示不允许分片;0表示允许分片。
■ MF位:
1表示“后面还有分片”,0表示“这是最后一个分片”
■ 保留位:
必须为0;
片偏移:占13位,以8字节为单位。指分片数据报的数据载荷部分偏移其首地址数据报位置有多少个单位(8字节为1个单位);
【举例】对IPv4数据报进行分片
分片后的表格:
总长度 | 标识 | MF | DF | 片偏移 | |
---|---|---|---|---|---|
原始数据报 | 3800+20 | 12345 | 0 | 0 | 0 |
分片1数据报 | 1400+20 | 12345 | 1 | 0 | 0/8 |
分片2数据报 | 1400+20 | 12345 | 1 | 0 | 1400/8 |
分片3数据报 | 1400+20 | 12345 | 0 | 0 | 2800/8 |
现在假定分片2的IP数据报
经过某个网络时还需要再进行分片。其中一个分片成800个字节,另一个分片为600个字节。分片结束后给每个分片添加首部使之成为IP数据报。
总长度 | 标识 | MF | DF | 片偏移 | |
---|---|---|---|---|---|
原始数据报 | 3800+20 | 12345 | 0 | 0 | 0 |
分片2的分片1数据报 | 800+20 | 12345 | 1 | 0 | 1400/8 |
分片2的分片2数据报 | 600+20 | 12345 | 1 | 0 | 2200/8 |
生存时间TTL:占8位。最初以秒为单位,最大生存周期为255秒。现在以“跳数”为单位,路由器转发IP数据报的时候,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。
【举例】生成时间TTL字段的作用——防止IP数据报在网络中永久兜圈。
为了简单只给出了每个路由表中由人工配置的静态路由条目。假设在人工配置静态路由条目时错将R3配成了R1
这会导致去往网络N2的IP数据报错误地转发给路由器R1。
协议字段:占8位。指明IPv4数据报的数据部分是何种协议数据单元。
常用的一些协议和相应的协议字段值如下。
协议名称 | ICMP | IGMP | TCP | UDP | IPv6 | OSPF |
---|---|---|---|---|---|---|
协议字段值 | 1 | 2 | 6 | 17 | 41 | 89 |
首部校验和:占16位。用来检测首部在传输的过程中是否出现差错,比如CRC检验码简单,称为因特网检验和。
源IP地址和目的IP地址:各占32比特。用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址。