目录
1.IP协议简介
2.IP首部介绍
3.IP分片原理
4.IP校验和原理
4.1 发送方IP校验和计算
4.2 接收方IP校验和验证
4.3 举个栗子
5.TTL介绍
IP(Internet Protocol)协议是互联网上最基本的协议之一,它主要负责实现数据包的传输和路由选择。
IP协议主要特点包括:
IP协议主要功能包括:
IP头部固定信息的长度为20字节,IP头部选项(Options)为可选字段,用于传递一些特殊的控制信息,如时间戳或安全选项等。
图 1 IP首部
IP头部固定信息包括以下字段:
版本(Version):4位,表示IPv4协议的版本号,IPv4协议的版本号为4。
头部长度(Header Length):4位,指示该IPv4头部信息的长度,单位为4字节,因此它的最小值为20字节。
服务类型(Type of Service):8位,用于指示该数据包的服务类型,包括优先级、延迟和吞吐量等信息。
总长度(Total Length):16位,指示整个IPv4数据包的长度,单位为字节,包括头部和数据部分。
标识(Identification):16位,由发送方生成并用于标识数据包的唯一性,当一个IP数据包分片后,IP分片使用同一个标识,目的端根据IP标识进行数据包重组。
标志(Flags):3位,用于指示数据包是否分片和是否是最后一片数据包,三位分别为:
Reserved bit 保留位,Don`t fragment(DF)禁止分片,More fragments(MF)更多分片。
DF为0指示IP数据包为分片包。MF为1指示IP数据包不是最后一个分片,为0指示为最后一个分片包。
片偏移(Fragment Offset):13位,指示该数据包的偏移量,用于将分片的数据包重新组装成原始数据包,片偏移为该IP分片在整个IP包的位置(单位为字节),具体数值为数据包偏移的字节数除以8。
生存时间(Time to Live):8位,表示数据包在互联网上可以经过的最大路由器数量,用于避免数据包在互联网上循环传输。
协议(Protocol):8位,指示该数据包所使用的上层协议,如TCP、UDP或ICMP等。
首部校验和(Header Checksum):16位,用于检查IPv4头部信息的完整性和正确性。
源地址(Source Address):32位,表示发送方的IP地址。
目标地址(Destination Address):32位,表示接收方的IP地址。
IP分片是将一个大的IP数据包分成多个较小的数据包进行传输的过程。
IP分片的原理是在发送端将原始IP数据包分割成多个较小的数据包,每个数据包都有自己的IP头部,并且这些数据包都有相同的标识符。在接收端,当所有的分片都到达后,它们会被重新组合成原始的IP数据包。
什么是MTU?
MTU(Maximum Transmission Unit)指的是最大传输单元,是指在网络通信中,能够传输的最大数据包大小。它是网络通信中的一个重要参数,取决于所使用的网络协议以及网络设备的硬件能力。
在网络通信中,数据传输需要将数据分成若干个数据包进行传输。而每个数据包的大小就受到MTU的限制,如果数据包的大小超过MTU,就需要对数据进行分割并且进行多次传输。这样会增加网络通信的延迟和数据传输的复杂度,降低网络性能。
MTU的大小一般由网络设备的硬件能力决定,比如说网卡、交换机、路由器等。不同的网络协议也有不同的MTU大小限制,常见的有以太网的MTU为1500字节,PPP协议的MTU为1492字节等。
图 2 MTU和IP分片
4000字节的IP数据包如何通过MTU为1500链路?
4000字节IP数据包如果想通过MTU为1500的链路 需要将IP数据包切片为3个分片,如下图:
图 3 IP分片原理
三个分片具有相同的标识。
片1:DF为0,MF为1,表示是分片包且不是最后一个分片包。offset为0表示该分片在整个IP数据包的偏移字节数为0。
片2:DF为0,MF为1,表示是分片包且不是最后一个分片包。offset为185表示该分片在整个IP数据包的偏移字节数为185*8=1480。
片1:DF为0,MF为0,表示是分片包且为最后一个分片包。offset为370表示该分片在整个IP数据包的偏移字节数为370*8=2960。
发送方:
如下图待校验的数据如下图,图中数据为测试数据,方便演示。
图 4 发送方待校验数据
a.发送方先清零IP校验和。
b.计算累加和。
0x1122+0x3344+0x5566+0x7788+0x99aa+0x0000+0xbbbb+0xcccc+0xdddd+0xeeee
注意如果产生进位需要计算进位累加和。
c.取反得到校验和0xffaa。
d.填入IP首部校验和字段,并发送给对端。
图 5 发送方完成校验数据
接收方:
a.接收方接收到IP数据包后,进行累加和校验0x1122+0x3344+0x5566+0x7788+0x99aa+0xffaa+0xbbbb+0xcccc+0xdddd+0xeeee=0xffff
注意如果产生进位需要计算进位累加和。
b.校验结果为0xffff,数据正确接收。
IP TTL是指IP数据包中的TTL字段,TTL代表Time To Live,即生存时间。在IP数据包传输过程中,每经过一个路由器,TTL值就会减1,一旦TTL值减为0,该数据包就会被丢弃。
TTL的作用是防止数据包在网络中无限循环,保证数据包能够正常传输并最终到达目的地。
图 6 TTL原理