IPv4和IPv6的数据报结构头部详解

IP数据报

1. IP数据报究竟是个什么鬼

IP是TCP‘/IP协议族中的核心协议。所有UDP、TCP、ICMP和IGMP数据都是通过IP数据报传输。IP提供了一种尽力而为、无连接的数据报交付服务。

1.尽力而为的含义是IP数据报在传送到目的地的时候,有可能会丢弃一部分流量(这一点由IPv4与IPv6中的DS字段和ECN两者决定)。

2.无连接意味着IP不维护网络单元(即路由器)中数据报相关的任何链接状态信息,每个数据报独立于其他数据报来处理。这也意味着IP数据报可不按顺序交付。
在这里插入图片描述
在这里插入图片描述

2 IPv4头部和IPv6头部

在这里插入图片描述

2.1 IPv4头部

2.1.1 先把一些easy的记住,再搞花里胡哨的Internet校验、DS字段和ECN

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2.1.2 Internet检验和

Internet头部检验和字段仅仅(注意是仅仅,不做高考语文阅读理解)计算IPv4头部,也就意味着它不管后面的IPv4数据报有效负载(例如TCP和UDP数据报)的正确性。这些有效负载自己弄自己不理他。

Intemet校验和是一个16位的数字和,它能以相当高的概率确定接收的消息或其中的部分内容是否与发送的相匹配。注意,Intemet校验和算法与常见的循环冗余校验(CRC)[PB61]不同,后者提供了更强的保护功能。

CRC不记得的可以看一下CSDN博主weizhengbo的文章《细说循环冗余校验码》,原文链接:https://blog.csdn.net/weizhengbo/article/details/75040495?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
在这里插入图片描述
在这里插入图片描述
它的加和符合数学性质如下:
在这里插入图片描述
代码(c语言):

#include<stdio.h>     
void main()     
{     
 int buff[10]={0x4500,0x0030,0x804c,0x4000,0x8006,0x0000,0xd343,0x117b,0xcb51,0x153d};     
    int checksum=0,i=0;     
 for(i=0;i<10;i++)     
 {     
  checksum+=buff[i];     
 }     
 printf("checksum=%x/n",checksum);     
 checksum=(checksum>>16)+(checksum & 0xffff);     
 checksum+=(checksum>>16);     
    checksum=0xffff-checksum;     
 printf("checksum=%04x/n",checksum);     
} 

2.1.3 DS字段和ECN

在这里插入图片描述
这种机制是避免或处理网络拥塞的方法之一,不过由于具体说会非常长,这里按下不表,给个链接。

CSDN博主dangzhangjing97的《TCP之 流量控制(滑动窗口)和 拥塞控制(拥塞控制的工作过程)》网址:https://blog.csdn.net/dangzhangjing97/article/details/81008836?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

DS字段和ECN字段并不密切相关,但它们常常被用作代替以前定义的IPv4服务类型和IPv6服务类型。
在这里插入图片描述
它们都基于一个称为多级优先与抢占(MLPP)的方案,该方案可追溯到美国国防部的AUTOVON电话系统[A92],其中较低优先级的呼叫可被更高优先级的呼叫抢占。
在这里插入图片描述
在这里插入图片描述
3位的类别选择器提供了8个定义的代码点(称为类别选择代码点),它们对应于一个指定最小功能集的PHB,提供与早期的IP优先级相似的功能。它们称为类别选择兼容的PHB,目的是支持部分兼容的最初定义的IP优先级子字段[RFCO791]。

1. 保证转发(AF)组固定数量的独立AF类别的IP分组提供转发,它有效概括了优先级的概念。在一个流量类别中,数据报被分配一个丢弃优先级。在一个类别中,较高丢弃优先级的数据报优先于那些较低丢弃优先级的数据报处理(即以较高优先级转发)。结合流量类别和丢弃优先级,名称AFij对应于保证转发类别i的丢弃优先级j
2. 加速转发(EF)提供了非拥塞的网络服务,也就是说,EF流量应该享受较低的延时、抖动和丢包率。
在这里插入图片描述

2.1.4 IP选项

IPv4支持一些可供数据报选择的选项,不过多数标准化选项在Internet中很少或从未使用,而且由于现在IPv4头部空间的限制,很大部分都没有用了。
在这里插入图片描述

2.2 IPv6头部

在这里插入图片描述

  1. 流标签(Flow Label): 标记那些需要IPv6路由器特殊处理的信息包顺序。
    2. 负载长度(Payload Length):定长40字节数据报首部后面的字节数量,包括扩展报头和负载数据,即数据报长度-40。
  2. 下一个头部(8位):当IPv6没有扩展报头时,该字段的作用和IPv4的上层协议字段一样。当含有扩展报头时,该字段的值即为第一个扩展报头的类型。
    4. 跳数限制(Hop Limit):转发数据报的每台路由器对该字段的值减1,若减为0则丢弃该数据报。和IPv4生存期差不多后面会详细讲解。

2.2.1 IPv6扩展头部

在IPv6中,那些由IPv4选项提供的特殊功能,通过在IPv6头部之后增加扩展头部实现。在选择IPv6头部为固定大小时,要求扩展头部仅由终端主机(仅有一个例外)(这个例外书上没有具体写出来,我在网上看了半天没看到,欢迎读者提出)处理, IPv6设计者简化了高性能路由器的设计和实现,这是因为IPv6路由器处理分组所需的命令比IPv4简单。
扩展头部和更高层协议(例如TCP或UDP)头部与IPv6头部链接起来构成级联的头部。每个头部中的下一个头部字段表示紧跟着的头部的类型,它可能是一个IPv6扩展头部或其他类型。值59表示这个头部链的结尾。下一个头部字段的可能值定义在[IP6PARAM]中,并在表5-5中列出了其中的大多数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.2 IPv6选项

如果选项存在,可放入逐跳选项(与一个数据报传输路径上的每个路由器相关)或目的地选项(仅与接收方相关)。逐跳选项(称为HOPOPT)是唯一由分组经过的每个路由器处理的选项。逐跳选项和目的地选项的编码格式一样。
在这里插入图片描述
在这里插入图片描述
动作子字段的灵活性在开发新的选项时是有用的。一个新的选项可携带在一个数据报中,并被那些无法理解它的路由器所忽略,这样有助于促进新选项的增量部署。
在这里插入图片描述

2.2.2.1 填充1和填充N

由于IPv6选项需要与8字节的偏移量对齐,因此较小的选项用0填充到长度为8字节。这里有两个填充选项,分别称为填充1和填充N。

2.2.2.2 IPv6超大有效载荷

IPv6超大有效载荷选项指定了一种有效载荷大于65 535字节的IPv6数据报,称为超大报文。这个选项无法由MTU小于64kB的链路连接的节点来实现。超大有效载荷选项提供了一个32位的字段,用于携带有效载荷在65 535 - 4294967295字节之间的数据报。

2.2.2.3 隧道封装限制

隧道是指将一个协议封装在另一个协议中.这是一个很长的故事,给个链接:网络隧道Tunnel技术

2.2.2.4 路由器警告

路由器警告选项指出数据报包含需要路由器处理的信息。它与IPv4的路由器警告选项的目的相同。

2.2.2.5 CALIPSO

这个选项用于在某些专用网络中支持通用体系结构标签IPv6安全选项(CALIPSO)[RFC5570]。它提供了一种为数据报做标记的方法,包括一个安全级别标识符和一些额外的信息。

2.2.2.6 快速启动

快速启动(QS)选项和[RFC4782]定义的TCP/IP实验性“快速启动”程序配合使用。它适用于IPv4和IPv6,但目前建议仅用于专用网络,而不是全球性的Intemeto选项包括发送者需要的以比特/秒为单位的传输速率的编码值、 QS TTL值和一些额外信息.

2.2.2.7家乡地址

移动IP里面比较详细,这里不多说。

2.2.3分片头部

分片头部用于IPv6源节点向目的地发送一个大于路径MTU的数据报。
在IPv4中,如果数据报大小超过下一跳MTU,任何主机或路由器可将该数据报分片, IPv4头部中第二个32位字段表示分片信息。在IPv6中,仅数据报的发送者可以执行分片操作,在这种情况下需要添加一个分片头部。
分片头部包括的信息与IPv4头部中的相同,只不过标识符字段是32位,而不是IPv4中采用的16位。这个更大的字段提供了在网络中容纳更多分片的能力。在这里插入图片描述
如果M位字段设置为1,表示在数据报中包含更多分片。如果该值为0,表示该分片是原始数据报的最后一个分片。

2.2.3.1 分片过程

在这里插入图片描述
在分片过程中,输人的数据报称为“原始数据报”,它由两部分组成: “不可分片部分”和“可分片部分” 。不可分片部分包括IPv6头部和任何在到达目的地之前需由中间节点处理的扩展头部(即包括路由头部之前的所有头部,如果有逐跳选项扩展头部,则是该头部之前的所有头部)。可分片部分包括数据报的其余部分(即目的选项头部、上层头部和有效载荷数据)。
当原始数据报被分片后,将会产生多个分片,其中每个分片都包含一个原始数据报中不可分片部分的副本,但是需要修改每个IPv6头部的负栽长度字段,以反映它所描述的分片的大小。在不可分片部分之后,每个新的分片都包含一个分片头部,其中包含一个分片相应的分片偏移字段(例如第一个分片的偏移量为0),以及一个原始分组的标识符字段的副本。最后一个分片的M (更多分片)位字段设置为0。

2.3.4 路由头部

IPv6路由头部为发送方提供了一种IPv6数据报控制机制,以控制(至少部分控制)数据报通过网络的路径。目前,路由扩展头部有两个不同版本,分别称为类型0 (RHO)和类型2 (RH2)o RHO出于安全方面的考虑已被否决[RFC5095], RH2被定义为与移动IP共同使用。

3. 参考资料:

CSDN博主GlYoung的《累加和校验算法(CheckSum算法)》,网址:https://blog.csdn.net/lisayh/article/details/81110287?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

CSDN博主weizhengbo的文章《细说循环冗余校验码》,原文链接:https://blog.csdn.net/weizhengbo/article/details/75040495?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

CSDN博主dangzhangjing97的《TCP之 流量控制(滑动窗口)和 拥塞控制(拥塞控制的工作过程)》网址:https://blog.csdn.net/dangzhangjing97/article/details/81008836?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

CSDN博主frank_jb的《IPv4与IPv6数据包格式》,网址:https://blog.csdn.net/frank_jb/article/details/45093615

CSDN博主_佚名-2018_的<网络隧道Tunnel技术>,网址:https://blog.csdn.net/wangjianno2/article/details/75208036?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章