IP数据报格式

一、简介:

  • 一个IP数据报由首部数据两部分组成
  • 首部的前一部分是固定长度,共20字节,是所有IP数据包必须具有的
  • 在首部的固定部分的后面是一些可选字段,其长度是可变的。

二、具体介绍:

在这里插入图片描述
需要知道的是,每一个数据报中的数据部分不能太少,不然包装了半天结果打开包装里面数据只有一点,那不是很浪费。其次,这个首部不能太长,首部相当于包装,包装太大就很浪费,所以需要它精简一点。最后精简到至少20个字节,不能再少了。

固定部分介绍:

1、版本:

占 4 位,指 IP 协议的版本。目前 IP 协议版本号有IPv4和IPv6。

2、首部长度:

因为刚才我们讲,数据报有固定部分,占到20个字节。一般情况下首部长度就是20个字节。但是还有很多特殊的情况,用到这个**“可选字段”,这么一来这个长度就是可变的。这个时候首部长度又是多长呢?
由于我们之后要将头部进行剥离,把数据部分拿出来交给上层,所以一定要在前面标明头部的长度是多少,一共要去掉多少字节。
由于要保证头部不能过长,所以我们决定用4个bit来标识头部的长度。这4个bit能表示的最小数为0000,最大为1111,从0000到1111一共有15个不同单位。例如现在的是0001,表明现在1个单位,这个单位表示有4个字节,也就是说我的首部长度只有4个字节。如果是0010,就表明首部长度有2个单位,每个单位占4个字节,总共8个字节,那么如果是1111,可表示的最大数值是 15 个单位(一个单位为 4 字节),因此 IP 的首部长度的最大值是 15 * 4 = 60 字节。
同时,我们也可以知道由于固定部分长度是20字节,所以可选部分最长为40字节。每头部长度的增加都是以
4的整数倍形式**增加的。
那么如果长度增加不是4的整数倍怎么办呢?这个时候“填充”的作用就出现了,它保证了每次的长度都是4的整数倍。

3、区分服务:

占 8 位,用来获得更好的服务。在旧标准中叫做服务类型,但实际上一直未被使用过。1998 年这个字段改名为区分服务。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段 。

4、总长度:

总长度字段占 16 位,指首部和数据之和的长度,单位为字节。因此我们可以根据这个总长度-首部长度来得到数据部分长度。为什么要两个长度呢?它们的作用各不相同。我们已经知道,首部长度的作用是为了方便剥离,而总长度的存在是因为每个网络上允许传输的最大数据报长度是有规定的。相当于不同的车型都是有载客量规定的。因此,虽然数据报的最大长度为 65535 (2的16次)字节,但是永远不会达到这么大的长度,总长度必须不超过最大传送单元MTU

5、标识:

占 16 位,它是一个计数器,用来产生 IP 数据报的标识。我们学过数据链路层知道,如果想要实现这个数据链路层的可靠性,即数据的不重复、不丢失、不失序,实际上我们需要对数据进行编号后才知道有没有重复、丢失和失序。实际上是需要对数据进行编号以后才知道他有没有重复或者失序。所以我们这个标识能用标识来表示这个编号?不能。因为这个标识只标明前后发送数据的区别,还有当时这个数据站产生了多少数据报,对于这些数据报的计数,而且这个计数只有2的16次,如果记到头了就从0再来。比如我现在发一个数据报,计数器记为第5个,之后的为第6个,第7个等等。现在我需要再次发送这个数据报,这个时候计数器就记为第10个了,明明是两个一毛一样的数据报,但是计的数却不一样。所以无法实现数据报的可靠传输。
想要真正实现数据报的可靠传输,只能单独的对每一个数据报进行编号,才有办法来实现。

6、标志:

占 3 位,目前只有前两位有意义。标志字段的最低位是 MF(More Fragment)。MF=1 表示后面“还有分片”。MF=0 表示最后一个分片。标志字段中间的一位是 DF(Don’t Fragment)。只有当 DF=0 时才允许分片。它和片偏移配合起来使用。

7、片偏移:

占13 位,指出:较长的分组在分片后某片在原分组中的相对位置片偏移以 8 个字节为偏移单位。如果我相对于原来偏离了40个字节,那么说明第一个分片有40字节 。片偏移用来表示分片过后,后面的这些分片和原始的数据开头部分之间的差距有多大,也就是前面一个分片有多长。而我本身有多长已经在总长度内标明了。这个可以方便最后数据的拼接。

那么为什么要分片呢?

这个和网络的最大传输单元MTU有关。每个网络的MTU都不一样。比如说以太网,以太网的MTU是1500个字节,那么数据最多多少呢?1500-20=1480。那用户为什么不把数据分成1500、1500后再发送呢?因为用户并不知道也不关心下层用的什么网络协议,提供的什么服务。所以当我有数据的时候,当然是有多少给多少。当出现很大的,很长的数据的时候, 到了网络层就说不行,需要进行分片,把数据分成更短的,网络上允许发送的长度。
比如说现在我们有3000B数据,最多允许1500B,那么就根据1500的长度来发,1500一个,剩下的有多少发多少。

IP数据报分片:

  • 我们看一个例题:

    从题目中可知,数据报总长度=3820字节,MTU=1420字节,去掉固定的头部20字节,剩下的数据报中的数据部分有3800字节,MTU的数据部分有1400字节。每次都是抵着最长的数据去分片的,所以我们一共分成3段,分别是1400, 1400, 1000字节。
    在这里插入图片描述
    要容纳1400个字节,应该是从字节0开始到第1399个字节结束。接下来就从第1400到2799个结束,最后从2800到3799结束。那么我们如何表示每一次分片是从第几个字节开始的呢?这就是片偏移的作用。其中,一个单位占8个字节。它们的MF分别为:1、1、0, DF分别为0、0、0

由此,我们可以得出下面的表:
在这里插入图片描述
注意,由于都是从一个数据报里面分出来的,所以他们的标识位都是一样的。

8、生存空间

占8位,记为TTL(Time To Live),指示数据报在网络中可通过的路由器数的最大值。每经过一个路由器,TTL值就-1,如果等于0了,就直接将这个数据报抛弃。一般值为256或者128。

9、协议

占8位,指出此数据报携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个处理过程。
在这里插入图片描述

10、首部检验和

占16位,只检验数据报的首部,不检验数据部分。这里不采用CRC检验码而采用简单的计算方法(反码求和算法,不做要求)。
在这里插入图片描述

可变部分介绍:

  • IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
  • 选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。
  • 增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值