IP分片丢失重传 - Sacrifice的日志 - 网易博客

尽管IP分片看起来是是透明的,但有一点让人不想使用它:即使只丢失一片数据也要重传整个数据报。为什么会发生这种情况呢?

因为IP层本身没有超时重传的机制——由更高层来负责超时和重传(TCP有超时和重传机制,但UDP没有。一些UDP应用程序本身也执行超时和重传)。当来自TCP报文段的某一片丢失后,TCP在超时后重发整个TCP报文段,该报文段对应于一份IP 数据报。没有办法只重传数据报中的一个数据片。事实上,如果对数据分片的是中间路由器,而不是起始端系统,那么超始端系统就不无知道数据报是如何被分片的。就这个原因,经常要避免分片。

注:把一份IP数据报分片以后,只有到达目的地才进行重新组装(这里的重新组装与其他的网络协议不同,它们要求在下一站就进行重新组装,而不是在最终的目的地)。重新组装由目的端的IP层来完成,其目的是使分片和重新组装过程对运输层(TCP和UDP)是透明的,除了某些可能的越级操作处。已经分片过的数据报有可能会再次进行分片(可能不止一次)。IP首部中包含的数据为分片和重新组装提供了足够的信息。

1,MTU(Maximum Transmission Unit,MTU),最大传输单元
(1)以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492个字节。链路层的这个特性称作MTU。不同类型的网络大多数都有一个上限。如果IP层有一个数据要传,且数据的长度比链路层的MTU还大,那么IP层就要进行分片(fragmentation),把数据报分成若干片,这样每一个分片都小于MTU。
(2)把一份IP数据报进行分片以后,由到达目的端的IP层来进行重新组装,其目的是使分片和重新组装过程对运输层(TCP/UDP)是透明的。由于每一分片都是一个独立的包,当这些数据报的片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据报片。
(3)尽管IP分片过程看起来透明的,但有一点让人不想使用它:即使只丢失一片数据也要重新传整个数据报。why?因为IP层本身没有超时重传机制------由更高层(比如TCP)来负责超时和重传。当来自TCP报文段的某一片丢失后,TCP在超时后会重发整个TCP报文段,该报文段对应于一份IP数据报(而不是一个分片),没有办法只重传数据报中的一个数据分片。
(4)使用UDP很容易导致IP分片,TCP试图避免IP分片。那么TCP是如何试图避免IP分片的呢?其实说白了,采用TCP协议进行数据传输是不会造成IP分片的,因为一旦TCP数据过大,超过了MSS,则在传输层会对TCP包进行分段(如何分,见下文!),自然到了IP层的数据报肯定不会超过MTU,当然也就不用分片了。而对于UDP数据报,如果UDP组成的IP数据报长度超过了1500,那么IP数据报显然就要进行分片,因为UDP不能像TCP一样自己进行分段。总结:UDP不会分段,就由我IP来分。TCP会分段,当然也就不用我IP来分了!
2,MSS(Maxitum Segment Size)最大分段大小的缩写,是TCP协议里面的一个概念
(1)MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460。通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。
 (2)相信看到这里,还有最后一个问题:TCP是如何实现分段的呢?其实TCP无所谓分段,因为每个TCP数据报在组成前其大小就已经被MSS限制了,所以TCP数据报的长度是不可能大于MSS的,当然由它形成的IP包的长度也就不会大于MTU,自然也就不用IP分片了

请帮忙点击一下下面的推广链接,谢谢

来自为知笔记(Wiz)

时间: 2024-10-05 16:45:07

IP分片丢失重传 - Sacrifice的日志 - 网易博客的相关文章

Ubuntu如何备份和恢复系统 - 落花往事的日志 - 网易博客

在 使用Ubuntu之前,相信很多人都有过使用Windows系统的经历.如果你备份过Windows系统,那么你一定记忆犹新:首先需要找到一个备份工 具(通常都是私有软件),然后重启电脑进入备份工具提供的软件环境,在这里备份或者恢复Windows系统.Norton Ghost是备份Windows系统时经常使用的备份工具. 在备份Windows系统的时候你可能想过,我能不能把整个C盘都放到一个ZIP文件里去呢.这在Windows下是不可能的,因为在Windows中有很多文件在它们运行时是不允许拷贝或

面向对象编程思想 - 月亮晶石的日志 - 网易博客

面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计. 它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统).这可以使系统直接地映射问题域,保

python海明距离 - 5IVI4I_I_60Y的日志 - 网易博客

python海明距离 - 5IVI4I_I_60Y的日志 - 网易博客 python海明距离 2009-10-01 09:50:41|  分类: Python |  标签: |举报 |字号大中小 订阅 def hammingDist(s1, s2):    assert len(s1) == len(s2)    return sum([ch1 != ch2 for ch1, ch2 in zip(s1, s2)])python海明距离 - 5IVI4I_I_60Y的日志 - 网易博客,布布扣,

IP分片丢失重传

尽管IP分片看起来是是透明的,但有一点让人不想使用它:即使只丢失一片数据也要重传整个数据报.为什么会发生这种情况呢? 因为IP层本身没有超时重传的机制——由更高层来负责超时和重传(TCP有超时和重传机制,但UDP没有.一些UDP应用程序本身也执行超时和重传).当来自TCP报文段的某一片丢失后,TCP在超时后重发整个TCP报文段,该报文段对应于一份IP 数据报.没有办法只重传数据报中的一个数据片.事实上,如果对数据分片的是中间路由器,而不是起始端系统,那么超始端系统就不无知道数据报是如何被分片的.

IP 分片丢失重传

尽管 IP 分片看起来是是透明的,但有一点让人不想使用它:即使只丢失一片数据也要重传整个数据报.为什么会发生这种情况呢? 因为 IP 层本身没有超时重传的机制--由更高层来负责超时和重传( TCP 有超时和重传机制,但 UDP 没有.一些 UDP 应用程序本身也执行超时和重传).当来自 TCP 报文段的某一片丢失后,TCP 在超时后重发整个 TCP 报文段,该报文段对应于一份 IP 数据报.没有办法只重传数据报中的一个数据片.事实上,如果对数据分片的是中间路由器,而不是起始端系统,那么起始端系统

漂亮的HTML表格 - ebirdfighter的日志 - 网易博客

一个像素边框的表格: Info Header 1 Info Header 2 Info Header 3 Text 1A Text 1B Text 1C Text 2A Text 2B Text 2C <!-- CSS goes in the document HEAD or added to your external stylesheet --> <style type="text/css"> table.gridtable { font-family: v

一次性设置网页中所有链接均在新窗口中打开的代码? - 落叶的星空的日志 - 网易博客

这是设置在新窗口中打开的代码:target=_blank   设置单个连接加在herf前 如: <a href="网站地址">共享空间</a>如果要点了这个文字以后重新打开一个窗口的话,代码是:<a href="网站地址"target="_blank">共享空间</a> 方法一: 在代码视图的<head></head>之间加入<base target="bla

如何用Windows Live Writer写网易博客

安装Windows Live Writer后增加网易博客帐号: 选择其它日志服务 填写日志网址 163邮箱用户格式如下: 例邮箱帐号是:[email protected] 你的日志网址:就是你的网易博客的网址 用户名:blog_admin 126邮箱用户格式如下: 例您的邮箱帐号是:[email protected] 网址:http://blog.163.com/[email protected] 用户名:[email protected] 126.yeah.net等非163邮箱用户,请参考12

Windows live Writer博客园,51CTO,网易博客,新浪博客配置方法

今天使用微软的Windows live Writer进行了博客园,51CTO,网易博客,新浪博客的博客发布.感觉效果不错,特别分享给大家.由于csdn账号忘记,所以... 先截个图给大家看下: 说下这款工具的作用吧,很多人在不同的博客网站申请了自己的博客,那么你是否还在为使用Ctrl+C的方式来达到博客的同步呢?如果答案是yes,那么强烈建议你使用Windows live Writer这款工具.当然你也可以实现Metaweblog API实现自己的博客发布器.甚至可以让微博同步博客,这都是可以的