因为在点分十进制的表达形式下,共有4个字节的IP地址被分位四段,每一段就有一个字节,而一个字节有8位,那么,8位能表示的数字范围是 0 - 255。所以,一个IPv4的地址,格式为nnn.nnn.nnn.nnn,其中 0<=nnn<=255,而每个 n 都是十进制数。可省略前导零。IPv4报文格式我们知道,在TCP/IP 五层协议模型中,一次网络请求要先后经过应用层->传输层->网络层->数据链路层->物理层。而在请求过程中,一个请求数据也会从应用层到物理层经过层层包装,每一层把上一层的数据报文包装后加上一层头部信息之后再传给下一层。所以,IPv4作为网络层协议,在其报文结构中,同样包含了IP首部和数据部分。其中,IPv4的首部长度是可变的,范围在20-60字节之间。首部IPv4报文的首部包含14个字段,其中13个是必须的,1个是可选的。上图是一张IPv4报文的首部格式,可以看到,IPv4首部中包含的内容还是很多的,比如版本号,首部长度,标识符,分片偏移,存活时间,协议等。由于这部分不是本文的重点,这里就不对报文头展开详细介绍了,读者可以参照上图自行学习下。数据报文中,除了首部以外,还有一个最重要的部分那就是数据部分,数据字段不是首部的一部分,因此并不被包含在首部检验和中。前面说过,网络层会把传输层的报文封装成数据,并添加上首部之后传递给链路层。所以,IPv4的报文中数据部分就是传输层的协议报文内容,如TCP、UDP等。为什么IPv4会枯竭?IP地址的全球性管理机构为互联网号码分配局(IANA),其下有五个局域网际网络注册管理机构(RIR)在理论上,IPv4最多可以提供2^32 (约42.9亿)个IP地址。不过,一些地址是为特殊用途所保留的,如约1800万个专用网络和约2.7亿个多播地址,同样减少了可在互联网上路由的地址数量。随着地址不断被分配给终端用户,IPv4地址枯竭问题也在随之产生。中国是世界上互联网用户数量最多的国家,但人均只有0.45个IPv4地址。在IPv4的环境下,我国用户上网地址需要动态分配,人与地址没有固定的对应关系,用户溯源难,带来互联网安全和监管隐患。所以,为了解决这个问题,IPv6诞生了。什么是IPv6?IPv6是Internet Protocol version 6的缩写,中文翻译为互联网通信协议(TCP/IP协议)第6版,通常简称为网际协议版6。IPv6具有比IPv4大得多的编码地址空间,用它来取代IPv4主要是为了解决IPv4地址枯竭问题,同时它也在其他方面对于IPv4有许多改进。IPv6具有比IPv4大得多的编码地址空间。这是因为IPv6采用128位的地址,而IPv4使用的是32位。因此新增的地址空间支持2^128 个地址,具体数量为340,282,366,920,938,463,463,374,607,431,768,211,456个(不知道有没有人能把这个数读出来?)有人说IPv6的地址数可能比全世界的沙子还要多,足以解决目前IPv4地址量不足的问题。IPv6二进位制下为128位长度,以16位为一组,每组以冒号“:”隔开,可以分为8组IPv6文本格式为 xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx,其中每个 x 都是十六进制数,表示 4 位。例如:
2001:0db8:86a3:08d3:1319:8a2e:0370:7344
IPv6的报文格式和IPv4一样,IPv6的报文中同样包含首部和数据部分。和IPv4不同的是,IPv6报文的首部是40个字节的固定长度。下图是IPv6报文的首部的结构,IPv6定义了一种新的分组格式,目的是为了最小化路由器处理的消息标头。从图中可以看出,和IPv4相比,IPv6的头部内容少了很多。同样是网络层协议,IPv6和IPv4一样,都封装了传输层的报文内容作为自己的数据。这一点是没有任何差异的,所以我们可以说,在报文上,IPv6和IPv4的主要区别是报文头的区别。IPv4 VS IPv6介绍完了IPv4和IPv6,我们再来整体看下这两种协议之间的区别。地址
IPv4长度为 32 位(4 个字节)。
IPv4 地址的文本格式为 nnn.nnn.nnn.nnn,其中 0<=nnn<=255,而每个 n 都是十进制数。可省略前导零。最大打印字符数为 15 个,不计掩码。