本文讨论两个问题①IP数据报的首部②IP数据报的分片

TCP/IP模型分为五层,从上到下依次是应用层、传输层、网络层、数据链路层和物理层。

IP数据报是网络层的概念。

  • IP数据报的首部

版本号:0~3  共占4位,是IP协议的版本号,IPV4和IPV6,所以只能是0100、0110两个选项

首部长度:4~7 共占4位,共 有2的4次方,就是最多可以表示0~15个数,而IP数据报首部的固定部分都有20个字节了,所以0~15是不够用的,所以首部长度按4字节为一个单位。例如:首部长度0110=6,就是首部长度有6*4=24个字节。

服务类型Tos:8~15 共占8位,

总长度:16~31  共占16位,2的16次方=65536,也就是0~65535,IP分组的总长度,最长的IP分组是65535个字节。

生存时间TTL:63~70 共占8位,2的8次方=256,就是这个IP分组最多经过256个路由器。

协议:71~78 共占8位。该IP分组中装的是传输层哪个协议的数据包。6是TCP协议的,17是UDP协议的

首部校验和:79~94 共占16位。对首部错误的一个校验

标识、标志位、片偏移占32位,共4个字节,和IP数据报的分片有关。

  • 分片

分片的原因:在网络层,因为要向下层也就是数据链路层传输,而数据链路层帧有最大传输单元(Max Transport Unit  MTU)限制,超过这个值就得降数据报分组。

比如以太网的MTU是1500B,PPP(Point to Point Prootocol)的MTU是296B,FDDI(Fiber Distributing Data Interface 光纤分布式数据接口)的MTU是4352,令牌环的MTU是4464B。

如果数据报的长度大于MTU,就可以分片了。至于允许不允许分片,需要看IP数据报首部的标志位。

标识(ID):32~47 共占16位,IP分组的标识(ID),IP协议利用一个计数器,每产生一个IP分组加1,作为该分组的标识。

标志位:48~50 占3位,保留位、DF、MF。DF=Don't Fragment,DF=1时,不允许分片;DF=0时,允许分片。MF=1时,非最后一片;MF=0时,最后一片或者未分片。

这两位只有三种可能。10:不允许分片;01:允许分片,不是最后一片;00:允许分片,是最后一片。不存在11.

片偏移:占13位,这个分片在原IP分组中的相对位置,以分片的首字节表示。IP分组总长度是占16个字节,而片偏移占143个字节,所以片偏移是以(2的16次方)除以(2的13次方)=2的3次方=8字节为单位的。

举个例子:假设IP数据分组的长度是L,数据链路层的MTU是M,IP数据报首部的长度是20个字节(没有可选部分),每个分片都是按数据链路层可以传输的最大长度来切片的。那么:

每个分片中封装的数据:

d={向下取整【(M-20)/8】}*8

式子中20是首部数据长度,8:片偏移是以8字节为单位。

需要的总片数:

n=向上取整[(L-20)/d]

每片的片偏移字段取值:

Vi=(d/8)*(i-1) i=1,2,3...,n

每片的总长度字段:

li=d+20   i=1,2,。。。,n-1

li=L-(i-1)*d  i=n

把IP分组的标识作为每个分片的标识。

等IP数据报的所有分片到达接收端时,会按照片偏移把其重新组装起来。如果丢失了一片怎么办?接收方计算机会等待一段时间,如果还接收不到这个分片,就会把IP分组的所有分片全部丢掉。

思考一下:

接收端计算机怎么样才能唯一确定一个分片?

①源IP地址

②目的IP地址

③标识(ID)

④片偏移字段

⑤协议

欢迎大家指正~

IP分组和分片的更多相关文章

  1. tcp/ip 中的分组和分片

    osi 大家应该都知道osi七层模型吧,物理层 链路层 网络层 传输层 会话层 表示层 应用层ip 属于网络层,tcp 属于传输层,你可以把每一层想像成粽子的粽叶,包裹了七层的粽子最外面的就是物理层, ...

  2. TCP/IP协议原理与应用笔记26:网际协议(IP)之 分片(Fragmentation)

    1. 分片(Fragmentation) 适应在不同的MTU的物理网上传输. 备注: MTU:最大传输单元,Maximum Transmission Unit,它是指一种通信协议的某一层上面所能通过的 ...

  3. IP分组

    IP 分组为了更准确地讨论 I n t e r n e t协议处理,我们必须定义一些名词.图 显示了在不同的I n t e r n e t层之间传递数据时用来描述数据的名词.我们把传输协议交给 I P ...

  4. TCP/IP协议原理与应用笔记19:IP分组的交付和路由选择

    1. 引言: (1)互联网结构: 信息:IP分组(直接广播地址(Directed Broadcast Address),其指定了在一个特定网络中的"所有主机".) 节点:路由器.主 ...

  5. 转自:Tsihang 三层网络设备对于IP报文的分片和重组处理原理

    三层网络设备对于IP报文的分片和重组处理原理 对于网络分片,我一年前就想整理出来,虽然说网络上的资料很多,但是真正掌握精髓的除非真正做过分片程序,不然很难将协议栈整体联系起来理解.这篇文章,包括设计分 ...

  6. TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系 (转载)

    首先说明:数据报的分段和分片确实发生,分段发生在传输层,分片发生在网络层.但是对于分段来说,这是经常发生在UDP传输层协议上的情况,对于传输层使用TCP协议的通道来说,这种事情很少发生. 1,MTU( ...

  7. 原 TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系

    首先说明:数据报的分段和分片确实发生,分段发生在传输层,分片发生在网络层.但是对于分段来说,这是经常发生在UDP传输层协议上的情况,对于传输层使用TCP协议的通道来说,这种事情很少发生. 1,MTU( ...

  8. IP分组交付和转发

    1:交付 网络层监视底层物理网络对分组的处理过程叫做交付,分为直接交付和间接交付 1.1:直接交付 直接交付时,分组的终点是一台与交付着连接在同一个网络上的主机,发生在俩种情况下,分组的源点和终点都在 ...

  9. UDP用户数据报协议和IP分组

    UDP总体的封装格式例如以下: 以下是8字节UDP首部: 当IP层依据协议字段把UDP报文向上传送到UDP模块后,UDP模块再依据port号将数据发送到对应的进程中,以此实现进程到进程间的通信. 16 ...

随机推荐

  1. 初识python: 斐波拉契数(生成器获取)

    使用  生成器(yield) 获取斐波拉契数. 代码如下: def fun(n): a,b,c = 0,0,1 while a < n: yield b # b, c = c, b + c 以下 ...

  2. yum是什么?repo文件详解,epel简介,yum源的更换,repo和epel区别

    yum是什么?repo文件详解,epel简介,yum源的更换,repo和epel区别 简单概括: repo和epel的关系 repo是配置源的,即配置从哪里下载包(以及依赖关系)的. epel是作为桥 ...

  3. 解压安装Cacti在apache中的补充

    如果你不是安装 Cacti 到 Apache 默认的网络目录文件夹位置,那么在 /etc/httpd/conf.d 中新增配置文件 cacti.conf,并且按如下内容编辑.设置 /your/cact ...

  4. 通过了解Servlet和Http之间的关系,了解web中http通信使用(二)

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512399401825075719/ 1.<Servlet简单实现开发部署过程> 2.<Serv ...

  5. 关于 cannot create Parameters: [] 报错问题的解决方法

    其实在Sort类中添加无参构造就可以解决 我自己写的是Sort类,其它情况得视你们自己写的类决定 至于为什么也不是很清楚

  6. HDU 1312 Red and Black (DFS & BFS)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 题目大意:有一间矩形房屋,地上铺了红.黑两种颜色的方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相 ...

  7. 【C语言】将文本中汉字读入字符数组输出乱码

    输出中文字符乱码 今天从文件中将中文读入字符数组后输出发现其中文变成了乱码,,令人头大. 解决办法 将文本编码格式改成ANSI即可. 打开记事本->文件->另存为->更改编码格式-& ...

  8. 【刷题-LeetCode】164 Maximum Gap

    Maximum Gap Given an unsorted array, find the maximum difference between the successive elements in ...

  9. Elasticsearch使用系列-ES简介和环境搭建

    一.简介 Elasticsearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java语言开发的,并 ...

  10. 华为联运游戏审核驳回:在未安装或需更新HMS Core的手机上,提示安装,点击取消后,游戏卡屏(集成的6.1.0.301版本游戏SDK)

    问题描述 更新游戏SDK到6.1.0.301版本之后,游戏包被审核驳回:在未安装或需更新华为移动服务版本(HMS Core)的手机上,提示安装华为移动服务(HMS Core),点击取消,游戏卡屏.修改 ...