IP协议(2)--协议格式和IP分片

IP协议

IP协议工作在网络层,是TCP/IP协议族中一个重要协议,另外IP协议不保证数据的可靠传输,其不保证数据的正确性它只有首部的检验和,不管其数据的正确,另外如果在传送过程中出现错误,其会丢弃数据包,然后发送ICMP指明错误,不进行处理错误如重传,这些会交个上层处理,另外IP协议是无连接的即每个数据包的传递均为单独传递,就算目的端和源端相同也可能会有不同的路由,

IP协议格式

在这里插入图片描述

其中版本指的是使用的协议版本,协议版本号是4即ipv4, 另外ipv6采用另外的协议报头和这个不相同

4位首部长度:这里的首部长度是以4个字节为基本单位因此其能表示的最大长度为15即60字节,故首部长度最大60字节,另外这里涉及到字节序的问题,TCP/IP协议族其在网络中传递数据时是以网络字节序进行传输,高位使用低地址进行存放,即0~7 存放最高位,8 ~ 15存放次高位,16 ~ 23存放次低位,24 ~ 31 存放最低位,这种存放方式成为大端,而主机的字节序取决于CPU因此,在编程中需要注意字节序的转换,另一种字节序为小端,即低地址存放低位。

服务类型: 服务类型有8位其中三位为优先级现在已弃用,案后最后一位是保留位,剩下的四位为TOS字段即服务类型,分别代表最小时延,最大吞吐量,最高可靠性,最小成本,并且这四位之间相互互斥,只能选择一位为1,如果全为0表示一般服务。

总长度:总长度占16位,表示整个数据报长度,单位是字节和首部长度单位不相同,通过总长度和首部长度可以确定数据报中数据部分起始位置和其大小。16为能表示的最大长度为65535字节,不过因为在链路层受到MUT的限制,如果其总长度大于MTU IP数据报会进行分片,

标识: 字段唯一标识发出的每个数据报,通常每发出一个就会加1,还有三位标志和13位片偏移均用于IP分片下面统一说明

生存时间(TTL):生存时间指的是数据报在路由过程中最多的跳数,每被一个路由器转发其值会减一,如果值变为0,路由器会将其丢弃,并给信源返回一个ICMP(超时) 信息。

协议:这里的协议指的IP数据报中的数据使用的协议,即TCP UDP ICMP 等用于数据的分用

首部检验和:这里的首部检验是根据IP首部计算的检验和,不计算数据部分,计算方法是反码求和,先将首部校验和置为0,按后将其余每16位进行反码求和,其结果存放在首部校验和中,当路由器收到数据报时包含首部校验和进行结算,如果结果为全1则表示没有出现差错,如果结果不全为1 表示数据出错,会将数据包丢弃,但是不产生差错报文。

最后一个字段是任选项,是数据报中的一个可变长的可选信息,这个需要注意的是,选项必须满足四个字节的整数倍,如果不够需要填充,首部长度是以四字节为基本单位,选项有:时间戳(让每个路由器都记下它的I P地址和时间),安全和处理限制,宽松的源站选路(为数据报指定一系列必须经过的I P地址),严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址 )等。

IP分片

当一个IP数据报,需要进行发送时需要先进行判断从哪个网络接口进行发送(选路),然后获得需要进行发送的接口的MTU值,和数据报大小进行比较,如果数据报大小大于MTU那么此时就需要进行分片,数据分片后,到达下一路由器或主机,会根据报头进行重组(注意下一站就会进行重组,而不是在到达目的地重组,)然后再转发时会进行相同的步骤,整个过程对传输层透明,在这里需要注意的是数据报在发送端没有分片,在中间路由过程中是有可能会发生分片的,因此在不想分片时需要考率路径MTU。另外在分片时会为每个分片添加IP首部。

在IP首部有三个字段,16位标示这个字段指的数据报的唯一标识,当IP数据报分片后,它的每个分片的标识是相同的。
三位标志,其中第一位是保留位;第二位为禁止分片,如果其数据报大于MTU,会将数据报丢弃,发送一个ICMP差错报文;第三位表示更多分片,如果分片的话第三位置1,最后一个分片置0。
最后一个片偏移表示,当前分片偏移原始数据起始的位置,也就是当前分片在原始数据中的位置,实际偏移的字节数是这个值*8的值,因此在分片时,除最后一片外,其他每一片中的数据部分(除I P首部外的其余部分)必须是8字节的整数倍。
在这里插入图片描述

最后就是IP分片丢失重传问题,因为在网络层不提供重传机制,需要到更高层进行重传(TCP有超时重传机制,UDP没有,但是有些UDP程序会支持超时重传)当一个TCP报文段进行,发送时如果在IP层进行了分片,在传输过程中如果其中一个分片丢失的话,就需要重传整个报文段(如果在中间路由分片,源端是不知道如何分片的)因为这个原因经常要避免分片。使用UDP很容易导致IIP分片,

MSS(Maxitum Segment Size)最大分段大小的缩写,是TCP协议里面的一个概念就是 TCP 数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP 协议在建立连接的时候通常要协商双方的 MSS 值,并且MTU会限制MSS大小,而这个值限制了TCP报文段的大小使得,TCP报文段不会被分片。

参考 《TCP/IP详解卷1:协议》 LawrenceBerkeley

猜你喜欢

转载自blog.csdn.net/Jocker_D/article/details/84452416