IPv6

先随便写一点,大多参考UNIX网络编程,以后在更新这个。首部格式如下:

介绍下几个字段的意思:
4为版本(version)字段为6,这个没啥好说的,不过这个字段好像没什么用,因为IPv4和IPv6不兼容,在数据链路层都已经加以区分了,比如以太网数据链路层的数据帧,已经用不同协议族的协议帧来区分开来了。


20位流标签(flow label)。貌似这个字段的用途还有待确认,可以用内核或者应用程序确认这个字段,原理和IPv4中的16位标识差不多,用来说明不同的分组序列属于一个流,并希望得到某种特殊的处理。


16位净荷长度(payload length)字段是40字节IPv6首部之后所有内容的字段长度。IPv4的总长度把首部计算在内,而IPv6没有。本字段为0表示实际长度超过16位字段的表示范围(可见不存在只有IPv6首部的数据报),于是放在一个特大净荷选项中。


8位下一个首部(next header)字段类似与IPv4的协议字段。由于ICMP协议变化较大,与IPv4的表示代码不同。


8位跳限(hop limit)字段类似于IPv4的TTL字段。

 

下面为IPv6与IPv4的主要不同。我觉得不仅仅是地址位变宽了,可用IP变多了这么简单,从IPv4到IPv6另一个变化是采用了很多措施,使得IPv6传输更快了。也可以理解对IPv4这个协议进行了优化,优化最关键的就是要找到瓶颈,找到短板。由于数据量很大,路由的处理速度就是这个短板。IPv6对头部设计上采取了简化措施,把一些不必要的东西,或者可以放到上层的东西从头部拿掉,放到上层(其实没有分层,可以理解为放到除了首部别的地方),让路由的“职责单一”,尽可能的高效,有点OOD的意思。可以与IPv4的首部对比下,IPv6的首部没有了分片信息和校验的字段,而且头部的大小是固定的,没有首部长度字段。


1)没有首部长度字段,这样路由读取处理的时候就方便了多。IPv6固定头部字段为40个字节。在40个字节的首部之后可以跟任意种类和数目的扩张首部,不过这都和路由没什么关系,路由器也不关心。
2)如果首部是64位对齐,那么IPv6的地址字段也是64位对齐的,加快在64位体系结构上的处理。
3)IPv6首部没有用于分片的字段,因为IPv6另有一个独立的分片首部用于该目的。做出如此设计决策因为分片属于异常情况,而异常情况不应该减慢正常处理。
4)IPv6没有自身的校验和字段。因为上层协议(TCP、UDP、和ICMPv6)数据单元都有各自的校验和字段,其校验和包括上层协议首部、上层协议数据。转发IPv6分组的路由器不必在修改跳限字段之后重新计算首部校验和。从而加快路由的转发
5)IPv6路由器不对所转发的分组执行分片,如果不经分片无法转发某个分组,路由器就丢弃该分组,同时向其源头发送一个ICMPv6错误,也就是说IPv6分片只发生在数据报的源头主机上。

你可能感兴趣的:(TCP与服务器)