过了好久才解决这个简单的问题,罪过罪过…

答案:如果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数据报中如果不分片,分片标志值是什么?的更多相关文章

  1. 计算机网络-4-2-ARP地址解析协议以及IP数据报不可变组成部分

    地址解析协议ARP ​ 在实际的应用中,我们会经常遇见这样的一个问题:我们已知一个机器(主机或者路由器的),我们怎么获取相应的硬件地址?,地址解析协议就是用来解决这个问题的. ARP协议的作用: 由上 ...

  2. TCP/IP具体解释--UDP数据报中的IP分片

    1.UDP首部 2.UDP分片 在第二章,讲链路层是,提到过以太网.刨除数据帧帧头.最多传输的长度为1500.也就是说,假设一个ip数据报,长度大于1500,则须要分片. 分片方法: 在ip头中3位标 ...

  3. 在C#中实现Python的分片技术

    在C#中实现Python的分片技术 前言 之前在学习Python的时候发现Python中的分片技术超好玩的,本人也是正则表达式热爱狂,平时用C#比较多,所以决定把Python中的分片技术在C#中实现, ...

  4. IP数据报是如何在网络中转发的?

    首先发送方抽取目的站的网络前缀,来判断是否目的站是否位于同一网络上,如果在二者有相同的网络前缀,则,直接使用直接交付的方式, 否则,使用由路由器互连的间接交付,这要借助IP路由表,采用表驱动法,路由表 ...

  5. 用寄快递模拟数据在网络中的传送过程,发送一个ip数据报到接受这个ip数据报经历的过程

    发送一个ip数据报到接受这个ip数据报经历的过程 好比寄一个快递的过程 这个包裹一共有三层, 这个包裹的最里面是数据,数据 第二层写着目的ip地址和源ip地址,即收件人和发件人的姓名 第三层也就是最外 ...

  6. 在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统? 网络层协议 MAC帧、IP数据报、TCP报文 关系 IP地址与硬件地址 链路层与网络层

    小结: 1. 网络层两种服务 虚电路服务 virtual circuit  电信网 网络层负责可靠交付 数据报服务  网络层不负责可靠交付 提供灵活的.无连接的.尽最大努力交付的数据报服务 不提供服务 ...

  7. 计算机网络(3)-----IP数据报格式

    IP数据报(IP Datagram) 格式 解析 (1)版本 占4位,指IP协议的版本.通信双方使用的IP协议版本必须一致.目前广泛使用的IP协议版本号为4(即IPv4). (2)首部长度 占4位,可 ...

  8. IP数据报的格式

    1. IP数据报首部的固定部分中的各字段 ①版本:占4位,指IP协议的版本.通信双方使用的 IP协议版本必须一致.日前广泛使用的 IP协议版本号为 4 (即 IPv4). IPv6 目前还处于起步阶段 ...

  9. IP数据报格式 及路由转发算法

    ip数据报分首部和数据两部分组成: 首部分为固定部分和可变部分 版本--占 4 位,指 IP 协议的版本 目前的 IP 协议版本号为 4 (即 IPv4) 首部长度--占 4 位,可表示的最大数值 是 ...

随机推荐

  1. Docker-Compose的一些常用命令

    一.Docker-Compose简介 1.Docker-Compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排. Docker-Co ...

  2. java文件上传工具包

    java 文件上传工具包 主要有两个方法:单文件上传和多文件上传 @Slf4j public class UploadFileUtil { //上传单张图片 public String uploadP ...

  3. 第21篇-加载与存储指令之iload、_fast_iload等(3)

    iload会将int类型的本地变量推送至栈顶.模板定义如下: def(Bytecodes::_iload , ubcp|____|clvm|____, vtos, itos, iload , _ ); ...

  4. Cartography Tools(制图工具)

    制图工具 1.制图优化 # Process: 分散标记 arcpy.DisperseMarkers_cartography("", "", "EXPA ...

  5. Git学习笔记01-安装

    首先,什么是git? git是开源的分布式系统,能够将团队的项目上传至git,供团队修改demo 第一步:安装好git(推荐淘宝镜像下载,地址https://npm.taobao.org/mirror ...

  6. 题解 Crash 的文明世界

    题目传送门 题目大意 给出一个\(n\)个点的树,和常数\(k\),对于\(\forall i\in[1,n]\),求出: \[\sum_{j=1}^{n} \text{dist}(i,j)^k \] ...

  7. 洛谷4172 WC2006水管局长(LCT维护最小生成树)

    这个题和魔法森林感觉有很相近的地方啊 同样也是维护一个类似最大边权最小的生成树 但是不同的是,这个题是有\(cut\)和询问,两种操作.... 这可如何是好啊? 我们不妨倒着来考虑,假设所有要\(cu ...

  8. 【Docker】(10)---详细说说 Dockerfile文件

    一.基础概念 1.基本概念 Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建.有了 Dockerfile,当我们需要定制 ...

  9. 数字IC设计工程师的知识结构

    刚毕业的时候,我年少轻狂,以为自己已经可以独当一面,庙堂之上所学已经足以应付业界需要.然而在后来的工作过程中,我认识了很多牛人,也从他们身上学到了很多,从中总结了一个IC设计工程师需要具备的知识架构, ...

  10. 浏览器有别_HTTP报文的回车换行

    本来以为浏览器HTTP报文的生成应该是完全一致的.但最近在做一个项目的时候,发现Safari和Chrome提交同一份表单,后端的处理结果不一致.看提交结果呢,是因为Safari多了个回车.由于原项目的 ...