IP是TCP‘/IP协议族中的核心协议。所有UDP、TCP、ICMP和IGMP数据都是通过IP数据报传输。IP提供了一种尽力而为、无连接的数据报交付服务。
1.尽力而为的含义是IP数据报在传送到目的地的时候,有可能会丢弃一部分流量(这一点由IPv4与IPv6中的DS字段和ECN两者决定)。
2.无连接意味着IP不维护网络单元(即路由器)中数据报相关的任何链接状态信息,每个数据报独立于其他数据报来处理。这也意味着IP数据报可不按顺序交付。
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
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);
}
这种机制是避免或处理网络拥塞的方法之一,不过由于具体说会非常长,这里按下不表,给个链接。
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流量应该享受较低的延时、抖动和丢包率。
IPv4支持一些可供数据报选择的选项,不过多数标准化选项在Internet中很少或从未使用,而且由于现在IPv4头部空间的限制,很大部分都没有用了。
在IPv6中,那些由IPv4选项提供的特殊功能,通过在IPv6头部之后增加扩展头部实现。在选择IPv6头部为固定大小时,要求扩展头部仅由终端主机(仅有一个例外)(这个例外书上没有具体写出来,我在网上看了半天没看到,欢迎读者提出)处理, IPv6设计者简化了高性能路由器的设计和实现,这是因为IPv6路由器处理分组所需的命令比IPv4简单。
扩展头部和更高层协议(例如TCP或UDP)头部与IPv6头部链接起来构成级联的头部。每个头部中的下一个头部字段表示紧跟着的头部的类型,它可能是一个IPv6扩展头部或其他类型。值59表示这个头部链的结尾。下一个头部字段的可能值定义在[IP6PARAM]中,并在表5-5中列出了其中的大多数。
如果选项存在,可放入逐跳选项(与一个数据报传输路径上的每个路由器相关)或目的地选项(仅与接收方相关)。逐跳选项(称为HOPOPT)是唯一由分组经过的每个路由器处理的选项。逐跳选项和目的地选项的编码格式一样。
动作子字段的灵活性在开发新的选项时是有用的。一个新的选项可携带在一个数据报中,并被那些无法理解它的路由器所忽略,这样有助于促进新选项的增量部署。
由于IPv6选项需要与8字节的偏移量对齐,因此较小的选项用0填充到长度为8字节。这里有两个填充选项,分别称为填充1和填充N。
IPv6超大有效载荷选项指定了一种有效载荷大于65 535字节的IPv6数据报,称为超大报文。这个选项无法由MTU小于64kB的链路连接的节点来实现。超大有效载荷选项提供了一个32位的字段,用于携带有效载荷在65 535 - 4294967295字节之间的数据报。
隧道是指将一个协议封装在另一个协议中.这是一个很长的故事,给个链接:网络隧道Tunnel技术
路由器警告选项指出数据报包含需要路由器处理的信息。它与IPv4的路由器警告选项的目的相同。
这个选项用于在某些专用网络中支持通用体系结构标签IPv6安全选项(CALIPSO)[RFC5570]。它提供了一种为数据报做标记的方法,包括一个安全级别标识符和一些额外的信息。
快速启动(QS)选项和[RFC4782]定义的TCP/IP实验性“快速启动”程序配合使用。它适用于IPv4和IPv6,但目前建议仅用于专用网络,而不是全球性的Intemeto选项包括发送者需要的以比特/秒为单位的传输速率的编码值、 QS TTL值和一些额外信息.
移动IP里面比较详细,这里不多说。
分片头部用于IPv6源节点向目的地发送一个大于路径MTU的数据报。
在IPv4中,如果数据报大小超过下一跳MTU,任何主机或路由器可将该数据报分片, IPv4头部中第二个32位字段表示分片信息。在IPv6中,仅数据报的发送者可以执行分片操作,在这种情况下需要添加一个分片头部。
分片头部包括的信息与IPv4头部中的相同,只不过标识符字段是32位,而不是IPv4中采用的16位。这个更大的字段提供了在网络中容纳更多分片的能力。
如果M位字段设置为1,表示在数据报中包含更多分片。如果该值为0,表示该分片是原始数据报的最后一个分片。
在分片过程中,输人的数据报称为“原始数据报”,它由两部分组成: “不可分片部分”和“可分片部分” 。不可分片部分包括IPv6头部和任何在到达目的地之前需由中间节点处理的扩展头部(即包括路由头部之前的所有头部,如果有逐跳选项扩展头部,则是该头部之前的所有头部)。可分片部分包括数据报的其余部分(即目的选项头部、上层头部和有效载荷数据)。
当原始数据报被分片后,将会产生多个分片,其中每个分片都包含一个原始数据报中不可分片部分的副本,但是需要修改每个IPv6头部的负栽长度字段,以反映它所描述的分片的大小。在不可分片部分之后,每个新的分片都包含一个分片头部,其中包含一个分片相应的分片偏移字段(例如第一个分片的偏移量为0),以及一个原始分组的标识符字段的副本。最后一个分片的M (更多分片)位字段设置为0。
IPv6路由头部为发送方提供了一种IPv6数据报控制机制,以控制(至少部分控制)数据报通过网络的路径。目前,路由扩展头部有两个不同版本,分别称为类型0 (RHO)和类型2 (RH2)o RHO出于安全方面的考虑已被否决[RFC5095], RH2被定义为与移动IP共同使用。
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