现在网络层的IP地址主要有两种版本,一是IPV4,二是IPV6,下面来对这两个版本的IP地址的相关内容进行总结
1.IPv4的报文格式
1)版本号 4比特 规定了数据包的IP协议版本
2)首部长度 4比特 确定IP数据报中载荷实际开始的地方
3)服务类型 8比特 用于区别不同类型的IP数据包
4)数据报长度 16比特 IP数据报的总长度,即IP数据报理论最大程度65536
5)标识,标志,片位移 共32比特 与IP分片有关,IPV6中已经移除,仅存在于IPV4中
6)寿命 8比特 用来确定数据报文的存活时间,减为0时,数据报文丢弃
7)协议 8比特 指示IP数据报文的数据部分应该交个哪个运输层协议
8)首部检验和 16比特 首部检验和用于帮助路由器检测收到的IP数据报中的比特错误。首部检验和的计算方法已经在前面的博客文章中介绍过,此处不再赘述
9)源IP地址和目的IP地址 各32比特 当某源生成一个数据报时,它在源IP字段中插入它的IP地址,在目的IP地址字段中插入其他最终目的地的地址
10)选项(可有可无) 在拓展IP首部时会用到。
11)数据 即IP数据报中的有效载荷
2.IPv4数据报分片
虽然IP数据报的最大长度可以达到65536,但是链路层的的帧能够承载的数据长度却是优先的,链路层帧能够承载的最大数据量叫做最大传送单元MTU,MTU的值将严重限制着IP数据报的长度。因此需要对IP数据报中的内容进行分片,即用多个较小的链路层帧封装一些较小的IP数据报,并在运输层重新对这些较小的报文进行组装,这些较小的数据报成为片。
那么分片是如何被运输层识别的呢?
当生成一个数据报的时候,发送主机在为该数据设置源和目的地址的同时贴上标识号。发送主机通常在设置报文的源地址和目的地址的时候加上一个标识号,每一个分片的数据都有一个特定的标识号,因此运输层的主机可以通过这个标识号来确定。同时在分片中使用偏移字段来让目的主机检验是否发生了丢片的情况。该偏移字段可以指示该片应放在初始IP报文的哪个位置。
3.IPv4编址
IP要求每台主机和路由器接口拥有自己的IP地址,每个IP地址长度为32比特,可以以8比特为分隔,看做是4个8比特的二进制数(对应十进制0-255),对于合法的IP字段 x.y.z.a,xyza均应在0-255之间。
IP地址要求必须全球唯一。但每个设备的IP地址不能随意赋值,有一些IP地址需要根据其子网来决定。对于一个子网的所有设备的IP地址,它们的前x位是相同的,后32-x位不相同
如223.1.1.0/24中所有子网设备的前24位IP地址是相同的,后8位不相同,用于区分223.1.1子网下的不同的IP设备。
根据子网公共前缀的长度,可以将子网分为A,B,C类网络。A类网络的公共前缀为8位,即子网可以容纳2^24-2=16777214个不同的设备(有两个IP地址要留作特殊用途),而C类网络,子网仅可以容纳2^8-2=254个不同的设备地址。
此外还有一种IP地址的类型叫做IP广播地址,即255.255.255.255,当一台主机发送该IP地址为目的地址的报文时,此报文会交给同一个网络中的所有主机,路由器会向邻近的子网转发该报文。
4.IPv6
1)版本 4比特 用于标识IP版本号
2)流量类型 8比特 用于区分不同类型的IP数据报
3)流标签 20比特 标识一条数据报的流,能够对一条流中的某些数据报给出优先权,或者它能够用来对来自某些应用的数据报给出更高的优先权。
4)有效载荷长度 16比特 该16比特值作为一个无符号整数,给出了IPv6数据报中跟定长的40字节数据报首部后面的字节数量。
5)下一个首部 8比特 该字段表示数据报中的内容需要交付给哪个协议。
6)跳限制 8比特 转发数据报的每台路由器将对该字段的内容-1,如果跳限制为0,则该数据报将被丢弃。
7)源地址和目的地址 各128比特 指示IP数据报的源和目的地址
8)数据 IPv6数据报中的有效载荷部分
其中与IPv4相比,IPv6有了以下方面的变化:
1)地址容量增加。IPv6的IP地址长度由IPv4的32比特增加至128比特。
2)首部长度固定。IPv6的报文首部长度固定为40字节。
3)流标签。该字段用于给特殊流的分组上加上标签,可使得发送方和接收方根据特殊的流标签对其进行特殊处理。这些流标签包括视频,音频等。
4)取消了分片和重新组装功能。在取消了分片功能后,若源主机发送的IP报文过大,而不能转发到链路层中,则路由器只需要向主机回复一个报文,指明发送方的分组太大,让发送方重新对报文进行分组即可。
5)去除首部检验和。因数据在运输层还会被检验一遍(TCP/UDP均有首部检验和功能),因此此功能显得有些多于,故去掉。
6)选项字段与下一个首部字段进行合并。