IP协议

网络层协议主要包含:IP协议、ARP(地址解析协议)、RARP(反向地址解析协议)和 ICMP(互联网控制消息协议)。今天将会讲解 IP 协议的功能,IP 数据报的解析以及 IP 分片。

IP 协议

IP协议功能

  • 寻址和路由
  • 传递服务
    • 不可靠,可靠性由上层协议提供
    • 无连接
  • 数据报分段和重组

寻址和路由:比如要从北京往南京发一封邮件,找到南京这个地方就叫寻址;北京到南京有好多条路线,选择走哪条路就叫路由。

传递服务:IP 协议是不可靠的,其可靠性由上层协议来保证,比如用 TCP 协议来保证。IP 协议就是尽最大努力来做事,不保证一定能做到。

数据报的分段是充足:从北京往南京发货物,货物比较大,一车装不下。那就要拆成好几个部分发送。到达目的地再把各个部件组合起来。

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 数据报由首部和数据部分组成。数据部分存储我们要传输的数据,数据体积如果太大,就需要将其拆分开来,分成多次传输。这就是 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协议

在 IP 首部中有 4 个字节是和 IP 分片相关的:

  1. 标识(identification) : 占 16 bit,其本质是一个计数器,用来产生数据报的标识,同一个数据报的各个分片的标识是一样的。
  2. 标志(flag):占 3 bit,其中有1位用来表示是否有更多的分片,如果是最后一个分片,该标志位为0,否则为1
    1. R:目前只有后两个比特有意义。
    2. DF:Don’t Fragment,“不分片”位,DF=1表示不分片;
    3. MF:More Fragment,“更多的片”,除了最后一片外,其它每个组成数据报的片都要把比特置1
  3. 片偏移:占13 bit,某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位,所以要除以8

参考:

IP分片浅析

TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系

原文地址:https://www.cnblogs.com/shuiyj/p/13185180.html