我们在之前了解了OSI参考模型和TCP/IP网络模型,下面我们了解一下TCP/IP协议栈中的IP协议
IP协议
IP协议即网际互连协议,一般指IP,是TCP/IP体系中的网络层协议。
IP协议的特点
1、IP是无连接的,在传输数据之前不需要建立连接。
2、IP提供的是尽力而为的服务,超过转发能力时直接丢弃。
3、IP数据包在网络中的传送是无序的,在转发过程中,不考虑到达 接收端的顺序,每个数据包单独进行路由(即单独选择到达目的地的路径)。
4、IP分组传送是不可靠的,发送端只管发送数据,不关心接收端是 否收到数据,IP的可靠性需要上层协议来解决。
IP的包头结构
标识符(16位):一IP数据包的各个分片的标识符相同。
标志位(3位): 第1位:没有使用。
第2位:DF位,DF=1不允许对该包进行分片,DF=0允许分片。
第3位:MF位,MF=1表示后面还有分片,MF=0表示最后一个分片。
分段偏移量(13位):本分片数据载荷在原IP包数据载荷中的相对位置,单位为8字节。
例如,一个4000字节的IP包在MTU=1500字节下的分片:
4000字节IP包的内容长3980字节,内容的第一个字节偏移量为0 。
第1个分片长1500字节,MF=1,分段偏移量0,含原包内容 1480字节;
第2个分片长1500字节,MF=1,分段偏移量185,含原包内容 1480字节;
第3个分片长1040字节,MF=0,分段偏移量370,含原包内容 1020字节
TTL:8位,每路由转发一次减1,用于防环。
协议:8位,标识上层协议。如TCP协议号6,UDP协议号17。
包头校验和:16位,因IP包头长度可变,用于IP包头完整性校验。
IP分片与重组
了解分片与重组之前我们先了解什么是MTU
MTU(最大传输单元):
链路层MTU:链路层能传的最大的帧,含链路层头部。
网络层MTU:网络层能传的最大的包,含网络层头部
为什么分片?
在主机发送或网络转发IP数据包时,当IP数据包过长(大于IP MTU)就会进行分片(简单的说报文大小超过了接口的mtu;不分片就发不出去)
能不能分片?
取决于df,df=1不能分片,df=0,可以分
接收方怎么判断需要重组?
根据标识符判断,
如果出现多个包,标识符相同;说明可能是需要重组的分片(IP分片只在目标主机上进行重组)
重组怎么排序?
偏移了0字节的是第一片
用第一片的偏移字节量+携带数据量得到下一个分片的偏移字节量
重组什么时候结束?
取决于mf
重组到发现某一个mf=0,重组结束