文章目录
版本(Version)
- 占4位
- 数据报的IP协议版本
- 不同的IP版本使用不同的数据报格式
- 通过查看版本号,路由器能够确定如何解释IP数据报的剩余部分
- 0100=4 即:IPv4
- 0110=6 即:IPv6
首部长度(Header Length)
- 占4位,步长4B
- 最小值 0101=5, 即:5 * 4B = 20B
- 最大值1111=15, 即:15 * 4B = 60B
- 有可选项时,若首部长度不是4B的整数倍,必须利用最后的填充字段加以填充
为什么要有首部长度字段?
因为一个IP数据报的可选项字段的大小会发生变化,导致首部长度不固定。(大多数IP数据报不包含可选项,所以一般的IP数据报具有20B的首部)
服务类型(Type of Service, ToS)
- 占8位
- 指定特殊数据报的处理方式
ToS字段已经作为区分服务(Diffserv)架构的一部分被重新定义
在Diffserv下,数据报可以归类到不同的分类中
路由器根据分类,使用不同的优先级对数据报进行排序和转发
总长度(Total Length)
- 占16位,单位:字节
- 首部长度 + 数据长度
- 理论最大长度:216-1 = 65535B
总长度 - 首部长度 = 数据的长度
用于确定数据部分从何处开始
标识(Identifier)
- 占16位
- 标识(Identifier)、标记(Flag)、片偏移(Fragment Offset) 这三个字段 用于数据报的分片
什么是分片?
此时,在网络层,有一个4000B的数据报,接下来它要经过数据链路层
数据链路层的帧有一个性质叫MTU(Maximum Transmission Unit),即:最大传送单元,以太网帧为1500B。也就是说,网络层下来的数据报,若是超过MTU,便要分片。标识如何产生?
一个数据报在生成时,发送主机会为该数据报设置源和目的地址,同时也设置了标识号。发送主机通常将它发送的每个数据报的标识号加1。
当某路由器需要对一个数据报分片时,形成的每个数据报(即片)具有初始数据报的源地址、目的地址与标识号。
目的主机从同一发送主机收到一系列数据报后,根据标识号可以确定哪些数据报实际上是同一较大数据报的分片。
标记(Flag)
- 占3位
未定义 | DF | MF |
---|---|---|
此位未定义作用 | DF=0 可以分片 DF=1 不能对数据报进行分片 | MF=0 此分片是最后一个分片 MF=1 不是最后一个分片 |
片偏移(Fragment Offset)
- 占13位,步长8B
- 某片在原数据报的相对位置,用于指明分片的起始点相对于报头起始点的偏移量
一个数据报总长度4000B,首部=20B,MTU=1500B,则数据报分了几片?每一片的MF标志位及片偏移是多少?
数据报 = 20B首部 + 3980B数据
每一个分片都要有20B的首部,所以分片的数据部分最大为1500B-20B=1480B
生存时间(Time To Live,TTL)
- 占8位
- 最多可经过的三层设备(如:路由器)的数量
- 为避免环路导致网络拥塞,数据报每经过一台三层设备,TTL值减1,然后判断TTL值是否为0,若为0,则丢弃数据报。
协议(Protocol)
- 占8位
- 表明数据报的数据部分应该交给哪一个上层协议
1 | 2 | 6 | 17 | 89 |
---|---|---|---|---|
ICMP | IGMP | TCP | UDP | OSPF |
首部检验和(Header Checksum)
- 占16位
- 帮助路由器检测收到的数据报中的比特错误。只检验首部,因为TCP、UDP等都有各自的检验和
- 由于每台路由器都会减少TTL值,所以每台路由器都必须重新计算检验和
源地址(Source Address)
- 占32位,4B
目的地址(Destination Address)
- 占32位,4B
可选项(Options)
- 允许IPv4数据报首部被扩展
- 很少使用,主要用于测试
- 常用的可选项如下:
- 松散路由选择(Loose Source Routing)
- 严格路由选择(Strict Source Routing)
- 记录路由(Record Route)
记录自己到过哪里
- 时间戳(TimeStamp)
记录到达的时间
参考资料
- 《TCP/IP路由技术》
- 《计算机网络-自顶向下方法》