1 IPV4
数据报格式如图:
关键字段如下:
1版本号:规定了数据报的IP协议版本。
2首部长度:一个IPV4数据报可包含一些可变数量的选项,所以需要4比特来确定IP数据报数据部分实际从哪里开始。(大多数IP数据报不包含选项,所以一般的IP数据报具有20字节的首部。)
3服务类型:(TOS)以便使不同类型的IP数据报能相互区别开来。
4数据报长度:IP数据报的总长度(首部加上数据),字节为单位。
5标识,标志,片偏移。与IP分片有关。
由于并不是所有链路层协议都能承载相同长度的网络层分组。一个链路层帧能承载的最大数据量叫做最大传送单元(MTU)。MTU严格限制着IP数据报的长度。为了解决MTU比IP数据报长度要小的问题,将IP数据报中的数据分片成两个或更多个较小的IP数据报,用单独的链路层帧封装这些较小的IP数据报,然后向输出链路上发送这些帧。每个这些较小的数据报都称为片。
IPV4设计者决定将数据报的重新组装工作放到端系统中,而不是放到网络路由器中。在目的地,数据报的有效载荷仅当在IP层已完全重构为初始IP数据报时,才被传递给目的地运输层。如果一个或多个片没有到达目的地,则该不完整的数据报被丢弃,且不会交给运输层。
6寿命(TTL):用来确保数据报不会永远在网络中循环。每当数据报由一台路由器处理时,该字段的值减1.若TTL字段减为0,数据报必须丢弃。
7协议:IP数据报的数据部分应交给哪个特定的运输层协议。值为6表明数据部分要交给TCP,而值为17表明数据要交给UDP。协议号是将网络层与运输层绑定到一起的粘合剂。
8首部检验和:用于检测收的IP数据报中的比特错误。(由于TTL字段以及可能的选项字段会改变,每台路由器上必须重新计算检验和并再次存放到原处。)
为什么需要TCP/IP在运输层与网络层都执行差错检测?
1.IP层只对IP首部计算了检验和,而TCP/UDP检测和是对整个TCP/UDP报文段进行的。
2.TCP/UDP与IP不一定都必须属于同一个协议栈。TCP可以运行不同的协议上,而IP能够携带不一定要传递给TCP/UDP的数据。
9源和目的IP地址:当某源生成一个数据报时,它在源IP字段中插入它的IP地址,在目的IP地址字段中插入其最终目的地的地址。
10选项:允许IP首部被扩展。
11数据(有效载荷):大多数情况下,IP数据报中的数据字段包含要交付给目的地的运输层报文段。然而,该数据字段也可承载其他类型的数据。
2 IPV6
数据报格式如图
1版本:类似于IPV4的版本号
2流量类型:与IPV4的服务类型相似
3流标签:给属于特殊流的分组加上标签,这些特殊流是发送方要求进特殊处理的流。
4有效载荷长度:给出了IPV6数据报中跟在定长的40直接数据报首部后面的字节数量。
5下一个首部:与IPV4的协议字段相似
6跳限制:类似于IPV4的TTL
7源地址和目的地址:128比特
8数据(有效载荷)
显然:
从对比可以看到,IPV6相对于IPV4做出的变化:
1扩大的地址容量,IPV4的IP地址只有32位比特,即4亿多个地址。而IPV6有128位地址,即3.4028237e+38个地址。
2标识、标志以及片偏移在IPV6已经去掉了。因为分片也是有开销的,这是路由器和端系统更为复杂。同时,分片容易被用于生成致命的DOS攻击。因此在IPV6不执行分片了。这是如果路由器收到的IPV6数据报因太大而不能转发到出链路,则路由器只需丢掉该数据报,并向发送方发回一个“分组太大的”ICMP差错报文。于是发送方能够使用较小长度的IP数据报重发数据。
3首部检验和也在IPV6去掉了。因为在因特网上,运输层和链路层都执行了检验操作。而且快速处理IP分组才是关注重点。
4 选项也不再是标准IP首部的一部分,但它并没有消息,而是当需要时放在“下一个首部”
5正因为上述的改变,IPV6形成了40个字节的定长首部。这就允许更快地处理IP数据报。