IP数据报中如果不分片,分片标志值是什么?
来源:互联网 发布:松下电器软件开发大连 编辑:程序博客网 时间:2024/04/28 12:41
过了好久才解决这个简单的问题,罪过罪过……
答案:如果IP数据报不分片,分片标志DF(Don’t Fragment)会被设置为1。分片标志MF(More Fragment)设置为0。
下面是详细解释:
1:首先来一张IP数据报的报文头部结构。
2:需要注意第二行数据,有这么三个字段
- 序列号:开始发送数据时由
发送方生成
。标识发送方发送的每一个数据报,如果发送的数据报未发生分片,则此值依次加1
,如果发生了分片,分片后的各个数据报使用同一个序列号
。 - 分片标志:三个bit位。第一位保留,未使用。第二位是DF(Don’t Fragment),如果为
1
,表示未发生分片。第三位是MF(More Fragment),如果为1
,表示发生了分片,并且除了分片出的最后一个报文中此标志为0
,其余报文中此标志均为1
。 - 偏移量:分片相对于原始IP数据报开始处的偏移。
这就基本回答我提出的问题了,下面再扯扯为什么要分片,会有什么影响。
以tcp/ip四层协议为例,应用层->传输层->网络层->数据链路层,我们说的IP分片现象发生在网络层,什么时候会发生呢?当数据包的大小大于MTU(Maximum Transmission Unit)最大传输单元
(MTU也就是在数据链路层“帧”的数据部分
大小。)举个例子如下所示:
1:假设从传输层下来的数据大小为1648个字节(包含tcp数据报报头和数据部分)
2:我们在网络层继续添加20字节的IP数据报(假设IP数据报没有使用扩展选项)
3:目前大小为1648+20=1668 > 1500(以太网协议MTU默认大小为1500),因此会发生IP分片。
4:先不考虑IP数据报的大小,考虑原始数据大小1648字节,应该这样分片 1480 + 168,然后再将IP数据报头分别加上去,数据报变成了这样:1500 和 188
5:这两个数据报中:
第一个大小为1500,序列号:1234(假设值),DF:0,MF:1
第二个大小为188,序列号:1234,DF:0,MF:0
继续向下就到了数据链路层,看看数据链路层的结构。
数据部分就是IP数据报,大小从46~1500,1500现在不难理解,那最小为什么又是46字节呢?
不要乱猜什么TCP数据报头部最少20字节,IP数据报头部最少20字节,那你加到一起也才40字节。真正的原因是因为数据链路层发送出去的包大小最少是64字节!!
64 - 6(目的MAC地址)- 6(源MAC地址)- 2(类型)- 4 (CRC)= 46
那为什么数据链路层发出去的包大小最小要是64字节呢?
http://blog.csdn.net/yyc1023/article/details/30286739
- IP数据报中如果不分片,分片标志值是什么?
- IP数据报进行分片
- IP数据报首部的格式:关于标识(identification)、标志(flag)和片偏移
- 计算机网络IP数据包的3个标志位以及IP数据报的分片和重组过程
- 计算机网络IP数据包的3个标志位以及IP数据报的分片和重组过程
- IP数据报的分片与重组
- IP数据报的分片与重组
- MongoDB集群,解决数据不分片问题
- TCP/IP详解--UDP数据报中的IP分片
- 网络层-3、IP数据报结构和IP分片
- 唯快不破:TCP/IP详解--UDP数据报中的IP分片
- IP数据报的分片与重组分析
- IP数据报的分片与重组分析
- IP数据报的分片与重组分析
- IP数据报的分片和组装过程
- IP数据报的分片与重组分析
- .一数据报的总长度为3820字节,其数据部分为3800字节长(使用固定首部),需要分片为长度不超过1420字节的数据报片。试给出分片后每个数据报片相关字段的值(包括MF、DF、片偏移)。
- 分组、分片、数据报
- unity day2贪吃蛇
- 【求和式】
- 基于一系列mysql问题的解决方法
- C# 将数组向左平移 n 个位置
- MySQL与NoSQL——SQL与NoSQL的融合
- IP数据报中如果不分片,分片标志值是什么?
- CentOS下tar包和rpm包的安装
- 自治事务
- js控制div显示与隐藏
- ssdb
- mysql下如何执行sql脚本
- spring 代码中,解决docker环境变量传递问题
- java程序运行
- const