TCP/IP协议中分包与重组原理介绍、分片偏移量的计算方法、IPv4报文格式

简介: 本文章讲述了什么是IP分片、为什么要进行IP分片、以及IP分片的原理及分析。分片的偏移量的计算方法,一个IPv4包前三个分片的示例。还讲述了IPv4表示字段的作用,标志位在IP首部中的格式以及各个标志的意义:.........

一、什么是IP分片
IP分片是网络上传输IP报文的一种技术手段。IP协议在传输数据包时,将数据报文分为若千分片进行传输,并在目标系统中进行重组,这一过程称为分片(fragmentation).
image.png

二,为什么要进行IP分片
(1500) 6+6+2+4以太网技术支持帧大小最大为1518字节。通常以太网接口默认的链路MTU通常被设置1500字节。1500---》1482
每一种物理网络都会规定链路层数据帧的最大长度,称为蟭路层MTU(Maximum Transmission Unit) IP协议在传输数据包时,若IP数据报加上数据帧头部后长度大于链路MTU,则将数据报文分为若干分片进行传输,并在目标系统中进行重组。比如说,在以太网环境中可传输最大IP报文大小(MTU)为1500字节。如果要传输的数据帧大小超过1500字节,即IP数据报负载长度大于1472(1500-20(IP) -(UDP)=1472,普通数据报)字节,则需要分片之后进行传输。

三、IP分片原理及分析
分片和重新组装的过程对传输层是透明的,其原因是当IP数据报进行分片之后,只有当它到达目的站时,才可进行重新组装,且它是由目的端的IP层来完成的。分片之后的数据报根据需要也可以再次进行分片。
IP分片和完整IP报文差不多拥有相同的IP头,ID域对于每个分片都是一致的,这样才能在重新组装的时候识别出来自同一个IP报文的分片。在IP头里面,16位识别号唯一记录了一个IP包的ID,具有同一个ID的IP分片将会重新组装;而13位片偏移则记录了某IP片相对整个包的位置;而这两个表中间的3位标志则标志着该分片后面是否还有新的分片。这三个标志就组成了IP分片的所有信息(将在后面介绍),接受方就可以利用这些信息对IP数据进行重新组织。

标志字段的作用
标志字段在分片数据报中起了很大作用,在数据报分片时把它的值复制到每片中的标志字段的其中一个比特称作"不分片"位,用其中一个比特来表示更多的片”。除了最后一片外,其他每个组成数据报的片都要把该比特置1。片偏移字段指的是该片偏移原始数据报开始处的位置。

另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。如果将标志字段的比特置1,则IP将不对数据报进行分片,若在某个中间路由器上需要对其分片,则仅仅把数据报丢弃并发送一个ICMP不可达差错报文给源主机。

如果不是特殊需要,则不应该置1;最右比特置1表示该报文不是最后一个IP分片。故意发送部分IP分片而不是全部,则会导致目标主机总是等待分片消耗并占用系统资源。某些分片风暴攻击就是这种原理。这里以以太网为例,由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes最大不能超过1518bytes,抛去以太网帧的帧头(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验部分4Bytes,那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes,这就是前面所说的MTU的值。这个也是网络层协议非常关心的地方,因为网络层的IP协议会根据这个值来决定是否把上层传达下来的数据进行分片。就好比一个盒子没法装下一大块面包,我们需要把面包切成片,装在多个盒子里是一个道理。

 下面是标志位在IP首部中的格式以及各个标志的意义:
image.png

ldentification    标识号
flag:   R DF MF
R      保留,没有定义用途
DF    (不分片位)  1代表不允许对此数据包做分片,0代表可以分片
MF   1 我是分片,但我不是最后一个分片,0我是分片,并且是最后的分片(M=more 更多的意思)

Fragment Offset    (分偏移量)
R:     保留未用;DF: Don't Fragment,"不分片"位,如果将这一比特置1,IP层将不对数据报进行分片;MF: More
Fragment,"更多的片”,除了最后一片外,其它每个组成数据报的片都要把比特置1;

Fragment Offset:该片偏移原始数据包开始处的位置。偏移的字节数是该值乘以8。

 TTL
TTL : 防止报文在网络中转发的环路,数据报文在网络中的转发次数。每次转发数据报文被下个设备接收时,TTL值减一。当下一个接收设备发现TTL值等于0时,就不会再把这个数据报文转发,而是丢弃这个数据报文。

TTL取值范围:0~255 (8个bit)

image.png

image.png

 Protocol 协议号
标明数据报文使用的什么传输层协议

Protocol: 8 bit, 协议:下一层协议。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。·常见值:
-1:    ICMP  ,Internet Control Message;
-2:    IGMP  ,Internet Group Management;
6:     TCP   .Transmission Control Protocol;

17:    UDP  ,User Datagram Protocol. 

Protocol为-1即是ICMP协议,为17就是UDP协议:

image.png

Header Checksum:    16 bit,   首部检验和。

Source IP Address:            32 bit,源IP地址。
Destination IP Address:      32 bit,目的IP地址。

Options:    可变,选项字段。
Paddina:    可变填充字段,全填0

分片包文示例:
image.png

只有第一个分片才会携带传输层字段(TCP/UDP),非第一个字段不携带传输层字段。

分片偏移量计算方法:
offset:第一个分片的(传输层大小+PDU)/8= 第二个分片的偏移量

             第一个分片的((传输层大小+PDU)+第二个分片的PDU) /8 = 第三个分片的偏移量。

后续分片的偏移量以此类推

 第一个分片:
每个分片的长度一定是8字节(64位)的整数倍

image.png

 第二个分片:

image.png

 第三个分片:
image.png

相关文章
|
7月前
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
124 4
|
缓存 网络协议 Linux
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
|
XML 存储 JSON
【面试题精讲】序列化协议对应于 TCP/IP 4 层模型的哪一层?
【面试题精讲】序列化协议对应于 TCP/IP 4 层模型的哪一层?
|
18天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
61 3
|
29天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
49 13
|
1月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
2月前
|
网络协议 算法 数据格式
【TCP/IP】UDP协议数据格式和报文格式
【TCP/IP】UDP协议数据格式和报文格式
141 3
|
2月前
|
XML JSON 网络协议
【TCP/IP】自定义应用层协议,常见端口号
【TCP/IP】自定义应用层协议,常见端口号
31 3
|
3月前
|
网络协议 网络架构 数据格式
TCP/IP基础:工作原理、协议栈与网络层
TCP/IP(传输控制协议/互联网协议)是互联网通信的基础协议,支持数据传输和网络连接。本文详细阐述了其工作原理、协议栈构成及网络层功能。TCP/IP采用客户端/服务器模型,通过四个层次——应用层、传输层、网络层和数据链路层,确保数据可靠传输。网络层负责IP寻址、路由选择、分片重组及数据包传输,是TCP/IP的核心部分。理解TCP/IP有助于深入掌握互联网底层机制。
478 2
|
4月前
|
网络协议 算法 Linux
在Linux中,TCP/IP协议栈的工作原理是什么?
在Linux中,TCP/IP协议栈的工作原理是什么?