网络层协议主要包含:IP协议、ARP(地址解析协议)、RARP(反向地址解析协议)和 ICMP(互联网控制消息协议)。今天将会讲解 IP 协议的功能,IP 数据报的解析以及 IP 分片。
IP 协议
IP协议功能
- 寻址和路由
- 传递服务
- 不可靠,可靠性由上层协议提供
- 无连接
- 数据报分段和重组
寻址和路由:比如要从北京往南京发一封邮件,找到南京这个地方就叫寻址;北京到南京有好多条路线,选择走哪条路就叫路由。
传递服务:IP 协议是不可靠的,其可靠性由上层协议来保证,比如用 TCP 协议来保证。IP 协议就是尽最大努力来做事,不保证一定能做到。
数据报的分段是充足:从北京往南京发货物,货物比较大,一车装不下。那就要拆成好几个部分发送。到达目的地再把各个部件组合起来。
IP 数据报由首部和数据部分组成。
字段 | 比特 | 作用 |
---|---|---|
版本 | 4 bit | IP协议的版本,一般为 4,即 IPv4 |
首部长度 | 4 bit | 1111 可表示的最大值为 15 单位, 1个单位4个字节,所以首部长度的最大值是60字节 |
服务类型 | 8 bit | 用来获得更好的服务,以前一直没有被人们使用 |
总长度 | 16 bit | 首部长度 + 数据长度,单位为字节, 因此数据报的最大长度为 2^16-1=65535 字节。 总长度 <= 最大传送单元 MTU |
标识 | 16 bit | 一个计数器,用来产生数据报的标识,同一段数据即使分片其标识任然是相同的 |
标志 | 3 bit | 第1位,无意义 当 DF = 0 时,表示允许分片 当 MF = 1 时,表示后面“还有分片”。MF = 0 表示最后一个分片。 |
片偏移 | 13 bit | 较长的分组在分片后,某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。 |
生存时间 | 8 bit | TTL (Time To Live)表示数据报在网络中的生存时间,一般以以「跳数」为单位 |
协议 | 8 bit | 字段指出此数据报携带的数据使用何种协议。以便目的主机的 IP 层将数据部分上交给哪个处理过程。 |
首部检验和 | 16 bit | 字段只检验数据报的首部不包括数据部分。这里不采用 CRC 检验码而采用简单的计算方法。 |
源地址 | 4 bit | 发送数据的机器的 IP 地址 |
目的地址 | 4 bit | 接收数据的机器的 IP 地址 |
注:其中标识、标志和片偏移和 IP分片相关。
设置 TTL 可以避免发生环路,避免网络资源的浪费。最开始 TTL 的计时单位是秒,现在一般使用跳数来表示,每经过一个路由器,这个值就会减少1,减到0的时候就会将这个报文丢弃。
IP 数据报首部的可变部分
- IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全 等措施,内容很丰富
- 选项字段的长度可变,从 1 个比特到 32个比特不等,取决于所选择 的项目
- 增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销
- 实际上这些选项很少被使用
IP 分片
IP 数据报由首部和数据部分组成。数据部分存储我们要传输的数据,数据体积如果太大,就需要将其拆分开来,分成多次传输。这就是 IP 分片。
在 TCP/IP 分层中,数据链路层用 MTU(Maximum Transmission Unit,最大传输单元)来限制所能传输的数据包大小,MTU是指一次传送的数据最大长度,不包括数据链路层数据帧的帧头,如以太网的MTU为1500字节,实际上数据帧的最大长度为1512字节,其中以太网数据帧的帧头为12字节。
当发送的 IP 数据报的大小超过了 MTU 时,IP 层就需要对数据进行分片,否则数据将无法发送成功。
比如说我们用火车从北京向南京送一批苹果,这批苹果就相当于是 IP 数据报中的数据部分。
但是火车的承载容量有限,火车最多能装多少就相当于 MTU。
一车装不下,我们把这一批苹果分装到不同的火车上,这就相当于 IP 分片。
比如说上图中的数据大小为 3800 字节,将其分成三个数据包片:0~1399、1400~2799、2800~3799。
我们分片之后,我们还需要将其按照序号组装起来,如何组装就要通过 IP 数据报的首部来进行标记了。
在 IP 首部中有 4 个字节是和 IP 分片相关的:
- 标识(identification) : 占 16 bit,其本质是一个计数器,用来产生数据报的标识,同一个数据报的各个分片的标识是一样的。
- 标志(flag):占 3 bit,其中有1位用来表示是否有更多的分片,如果是最后一个分片,该标志位为0,否则为1
- R:目前只有后两个比特有意义。
- DF:Don’t Fragment,“不分片”位,
DF=1
表示不分片; - MF:More Fragment,“更多的片”,除了最后一片外,其它每个组成数据报的片都要把比特置1
- 片偏移:占13 bit,某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位,所以要除以8
参考: