IP协议的版本号分为IPV4和IPV6,IPV4格式是点分十进制的四字节无符号整数,而IPV6是6字节的无符号整数;
相比之下6字节的容量更大,可以储存更多的IP地址;不过我们现在大多使用的是IPV4地址,由于生态缘故,IPV6并未广泛普及使用;
IP标识位作为IP协议的报头字段,用来表示IP数据包是否对传输层传输下来的数据包进行分片处理了;
如果传输层下来的数据包过大,其大小超出了MTU的规定最大范围数,那么就会分片;分片后的IP数据包中的报头字段就会标识分片;
一开始我就十分的疑惑,TCP数据包传输下来就已经使用一个完整的数据包了,所谓分片到底是怎么分的呢?难道是把该数据包切割?还是IP装包的时候都装一份该TCP数据包,那么这个其实就会把TCP数据包相当于是拷贝了多份,然后接收方通过标志位得知是否发生分片,然后通过IP报头字段的片偏移量找到报文中数据的对应位置;
这样的想法看似也可以,但是这样做,其实有部分的数据包中的数据是没有用的,也就是我们如果每个数据包中的数据都是完整的全部数据,接收的时候其实就会有很多的剩余;
但是答案已经很接近了,分片是其实就是把TCP数据包的报文数据进行提取,提取一部分再重新构建一个新的数据包,但是该数据包的报头信息和原来的是一样的,也就是分片不会改变TCP报头的信息;(注意:分片并不是一分为二,而是一分为多)
比如我现在举一个简单的例子,我要传输的数据是"HELLO WORLD“,现在假如MTU是5,那么第一个IP装包后数据包报文就是HELLO,下一个数据包的报文数据即使WORLD,同时该报头中片偏移量就需要更新了,因为接收方需要更具片偏移量计算拼接成原来的数据包;
MTU叫做:最大传输单元
MTU其实是为链路层服务的,规定MTU其实就是怕不同的链路层的接收能力不同,所以就规定了一个指标用来控制,防止传输下来的数据包过大;
而检查处理获取合格的大小的数据包,如果过大不合格,需要经过网络层的分片操作分成合格大小的数据包;