IP数据报的分片和组装原理是什么
当一个主机发送数据到另一个主机时,这些数据需要通过多个路由层转发。IP在路由层的转发过程较为复杂,如何处理目的主机发送的数据报呢?
首先我们需要了解数据报的格式:
IP的转发和控制都是由IP数据报的头部决定
4位首部长度的数值是以 4字节为单位的,最小值为 5,也就是说首部长度最小是 4x5=20字节 ,
也就是不带任何选项的 IP首部 ,4位能表表示的最大值是 15,也就是说首部长度最大是 60字 节
8位TOS字段有 3个位用来指定IP数据报的优先级 (目前已经废弃不用 ),还有4个位表示可选
包括服务类型的最小延迟、最大吞吐量、最大可靠性和最小成本,以及总位始终为0。
16位总长度是整个数据报 (包括IP首部和 IP层payload)的字节数。
每传一个 IP数据报 ,16 位的标识加1,可用于分片和重新组装数据报。
3位标志和13位片偏移用于分片 。
TTL(Time to live) 是这样用的 :源主机为数据包设定一个生存时间 ,比如 64,每过一个路由器
就把该值减 1,如果减到 0就表示路由已经太长了仍然找不到目的主机的网络 ,就丢弃该包 ,因此
这个生存时间的单位不是秒 ,而是跳 (hop)。
协议字段指示上层协议是 TCP、 UDP、 ICMP还是 IGMP。
然后是 校验和, 只校验IP首部 ,数据的校验由更高层协议负责。
IPv4的IP地址长度为 32位。
在IP数据报中总长度是16位的字段,一次数据 报的最大长度为2^16-1,虽然尽可能长的数据报能够提高传输效率,但是很少 有超过 1500字节的;所以在这里只要超过1500字节,就认为此数据报该分片了。IP数据报被分片以后,各分片分别组成一个具有IP首部的分组,并各自独立的路由,分别抵达目的主机后,目的主机的IP层会在传送给传输层之前将收到的所有分片重新组装成一个数据报。
一.IP分片
1.IP分片原理:
分片和重新组装的过程对于传输层是透明的,原因是IP数据报进行分片以后,只有它到达下一站时才可以 进行重新组装,且它是由目的端的IP层来完成的,分片之后的数据报根据需要可以再次 分片;
IP分片和完整的报文差不多拥有相同的IP头,ID域对美英分片都是一致的,这样才能在进行组装的时候识别出来 同一个IP数据报文分片。在IP头里面,16位识别号唯一记录了一个IP报的ID,具有同一个ID的IP分片将会重新进行组装;而13位片偏移则记录了某IP片相对于整个包的位置;这两个表中间的3位标志则标志着该分片后面是否还有新的分片。接收方可通过这三个领域中提供的信息对IP数据进行重组,而这三个领域是构成IP分片的全部信息。
(1)标志字段的作用
0 DF MF
标志字段共三位,最高位为0,该值必须复制到 所有 分组中
不分片(Do not Fragment ,DF)值必须复制。DF=1表示 接受主机不能对分组进行分片。如果无法对分组进行分片,但其长度超过了MTU,那么这个分组只能被丢弃,同时需要使用ICMP差错报文通知源主机。DF=0,表示可以分片
分片(MF)表示分片是不是最后一个分片,MF=1表示接受分片不是 最后一个分片,MF=0表示 接受分片时是最后一个分片
故意发送部分IP分片而不是全部,则会导致目标主机总是等待分片消耗并占用系统资源。
2.MTU(最大传输 单元)原理
当两台远程CP互联的时候,他们的数据要穿过很多的路由器和各种各样的网络媒介才能到达对端
,网络中不同媒介的MTU各不相同,就好比一长段的水管,由不同粗细的水管组成(MTU不同 )通过这段水管最大水量就要由中间最细的水管决定。
对于网络层的上层协议而言(这里以TCP/IP协议簇为例)他们对水管的粗细不在意因为他们认为 这是网络的事情。IP协议在网络层会检测每个从上层协议传输下来的数据包的大小,根据本机的MTU大小来判断是否需要对其进行分片处理。分片的最大缺点是会降低传输性能,需要将原本可以一次完成的任务分成多次处理。所以在网络的更高一层(传输层的实现)往往会对此加以注意,因为有些高层因为某些原因可能就要求不能对分组进行分片,索引会在IP数据报的包头加上一个标签:DF这样IP数据包在一大段网络传输的时候,如果遇到MTU小于 数据包的情况,转发设备会根据情况丢掉这个数据包。然后返回一个错误信息给 发送者,这往往会造成通讯上的问题,不过幸运的是大部分网络链路MTU都是1500或者大于 1500
对于UDP而言,这个协议本身是无连接的协议,对数据包的到达顺序是否正确并不关心,所以一般UDP对分片没有多大要求
对于TCP就不一样了,这个协议是面向连接的协议,对于 TCP而言它非常在意数据包的到达顺序
以及在传输过程中是否有错误发生,所以有些TCP应用对分片有要求---不能分片
3.MSS(最大报文段长度 )原理
MSS就是TCP数据包每次能够传输的最大数据分段,为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方MSS的值,这个值TCP协议在实现的时候用MTU代替(要减去IP数据包的包头大小20bites和TCP数据段的包头20BITES)所以MSS大小往往为1460,双方会根据提供的MSS最小值 确定这次连接的MSS最大值
二.IP分片步骤
一个未分片的数据报的分片信息字段全为0,即多个分片标志位为 0,并且偏移量 为0,分片一个数据报需要经过一下步骤
(1)检查DF标志位,查看是否允许分片,如果设置了该位,则数据报将被丢弃 ,并将ICMP错误返回给源端
(2)基于MTU值,把数据字段分成两个或对个部分,除了最后的数据 部分外,所有新建的数据选项 长度必须为8字节的倍数
(3)每个数据被放入一个IP数据报,这些数据报的包头略微改了原先的报文头
(4)除了最后的数据报分片外,所有的分片都设置了多个分片标志位
(5)每个分片中的片偏移量字段设为这个数据部分在原来数据报中所占的位置,这个位置相对于原来未分片数据报中的开头处。
(6)如果在原来的数据报中包括了选项,则选项类型字节的高位字节决定了这个信息是被复制到所有分片数据报,还是只复制到第一个数据报。
(7) 设置新数据报的报文头字段及总长度字段。
(8)重新计算报文头部校验和字段。
此时这些分片数据报如一个完整的IP数据报一样被转发,IP独立的处理每个数据报分片,数据报分片能够通过不同的路由 ,到达目的,如果他们通过了那些规定了更小的MTU路由,还能够进一步对他们进行分片
在目的主机上,数据被 重新组合成原来的数据报 ,发送主机设置的标示字段与数据报中的袁IP地址和目的IP地址一起使用,分片过程不改变这个字段
三 .重组
为了重建这些数据报的分片,接收主机会在第一个分片到达时分配一个存储缓冲区。这个主机还将启动一个计时器。当数据报的后续分片到达时,数据被复制到缓冲区存储器中片偏移量指定的位置,当所有分片都到达时,完整的未分片的原始数据报就被恢复了。
如果计时器超时且分片保持未经认可状态,则数据将无法被保留。这个计时器的初始值为IP数据报的生存期值,它依赖于实现的,一些实现允许对他进行配置。
重组步骤
在接受方,一个由发送方发出的原始数据IP报,将所有的分片重新组合,才能够提交到上一层协议,每一个将被重组的IP数据报都用一个ipq结构来表示
为了能够有效提高组装分片,用于保存分片的结构必须做到以下几点
(1)快速定位某一个数据报的一组分组
(2)在属于某一个数据报的一组分片中快速插入新的分片
(3)有效的判断一个数据报的所有分片是否已经被全部接收
(4)具有重组超时机制,如果在重组完成之前超时溢出,则删除该数据报的所有内容
以上是IP数据报的分片和组装原理是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

一、黑/白名单IP限制访问配置nginx配置黑白名单有好几种方式,这里只介绍常用的两种方法。1、第一种方法:allow、denydeny和allow指令属于ngx_http_access_module,nginx默认加载此模块,所以可直接使用。这种方式,最简单,最直接。设置类似防火墙iptable,使用方法:直接配置文件中添加:#白名单设置,allow后面为可访问IPlocation/{allow123.13.123.12;allow23.53.32.1/100;denyall;}#黑名单设置,

ip与mac绑定是指将特定的IP地址与特定的MAC地址关联起来,使得只有使用该MAC地址的设备才能够使用该IP地址进行网络通信。ip与mac绑定可以防止被绑定的主机的IP地址不被假冒,前提条件:1、MAC地址是唯一的,并且不可假冒;只能绑定与路由器直接相连的网络上的主机(也就是主机的网关在路由器上)。

微信查看ip地址的方法:1、登录电脑版微信,右键点击屏幕下方的任务栏,点击“任务管理器”;2、弹出任务管理器时,点击左下角的“详细信息”;3、任务管理器进入“性能”选项,点击“打开资源监视器”;4、选择“网络”,勾选微信进程“Wechat.exe”;5、点击下面的“TCP连接”即可监视微信网络IP相关情况,发送消息得到回复就会显示他人的IP地址。

1.设置目录白名单:对指定请求路径不设置限制,如对请求路径为api目录下的请求不做限制,则可写为server{location/app{proxy_passhttp://192.168.1.111:8095/app;limit_connconn20;limit_rate500k;limit_reqzone=fooburst=5nodelay;}location/app/api{proxy_passhttp://192.168.1.111:8095/app/api}}#因nginx会优先进行精准匹

引言nginx做反向代理时,默认的配置后端获取到的Ip地址都来自于nginx,用request.getRemoteAddr();获取到的是nginx的ip地址,而不是用户的真实ip.1.修改Nginx配置:server{listen80;server_namejenkins.local.com;location/{proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_passhttp://192.168.10.

本机ip地址查询的方法有:1、 Windows系统下,打开“开始菜单”并搜索“cmd”打开命令提示符,输入“ipconfig”,然后按回车键,查找名为“IPv4 地址”的一行,其旁边的数字就是本机的IP地址;2、macOS系统下,点击屏幕左上角的苹果图标,选择“系统偏好设置”,在“网络”选项中找到当前连接的网络,点击“高级”按钮,在“TCP/IP”选项卡中查找本机的IP等等。

wifi显示无ip分配的解决办法:1、重新启动设备和路由器,关闭设备上的Wi-Fi连接,关闭设备,关闭路由器,等待几分钟,然后重新打开路由器链接wifi;2、检查路由器设置,重启DHCP,确保DHCP功能已经启用;3、重置网络设置,将删除所有已保存的WiFi网络和密码,在执行此操作之前,请确保已备份;4、更新路由器固件,登录路由器管理界面,查找固件更新选项,并按照提示进行操作。

概念:uv(uniquevisitor):独立访客,将每个独立上网电脑(以cookie为依据)视为一位访客,一天之内(00:00-24:00),访问您网站的访客数量。一天之内相同cookie的访问只被计算1次pv(pageview):访问量,即页面浏览量或者点击量,用户每次对网站的访问均被记录1次。用户对同一页面的多次访问,访问量值累计统计独立ip:00:00-24:00内相同ip地址只被计算一次,做网站优化的朋友最关心这个先声明下环境,此次运行的nginx版本1.7,后端tomcat运行的是动
