TCP数据流稳定性--TCP分片,重组及乱序
http://www.cnblogs.com/derekchen/archive/2009/07/15/1524415.html
1、IP分片的情况。IP软件包有一个[分片]和[重组]模块,一个IP数据报在传输中可以被ip软件包的[分片]模块分片,在目的接收端B的IP软件包 的[重组]模块重新组合。接收端B的IP软件包如果收到乱序的IP报文,是不会把这个包交付到高层TCP协议的,直到收到同一个IP报文的全部分片。所 以,如果发送端的FIN被分片,接收端B在收到完整的此IP数据报之前,TCP模块不会收到这个包的任何分片。
2、发送端A发送了一个FIN,这仅代表发送端A想终止传输,并不代表另一端B想终止。这就是说,终止双向链接需要4次握手断开(也有3次握手断开,类似 3次握手链接),比如,发送端A向发送端B发一个查询请求,发送端A已经没有更多的数据要发送了,因此可以发送FIN请求一端断开,也称为半断开,然后, 另一端B则需要时间处理请求,再把查询结果返回给A,最后B发送FIN。
1)首先是A发送FIN,然后收到来自B的对这个FIN的确认,此时,发送端A将不能发送任何数据包,但可以接受B发来的数据包(这是非常常见的传输模式,客户端发完,终止链接)。
2)发送端B仍旧可以继续发送数据包,直到高层没有更多的数据,发送端B发送FIN,A收到后发送对这个FIN的确认。此时,双方都不能再传输任何数据了。
3、TCP协议规定,对于收到的乱序报文并不丢弃,而是缓存下来(这样做是为了减少更多的重传),立即发送希望接受的报文确认。例如:发送端A发送了以下几个包:第一个:1001-1100,第二个1101-1200,第三个FIN包(序列号是1201,一个虚字节)。
1)第二个包在传输的过程中丢失了,接收端收到第三个包后并不丢弃,而是缓存下来,然后,立即发送一个ACK,确认号是1101(这样做的目的是不必等到发送端A的第二个包超时后重传,发送端A收到3个同样的ACK后立即重传,这是快速重传的概念)。
2)当发送端A收到3个确认号都是1101或者第二个包的超时计时器到时间后,立即重新发送第二个包(之所以可以重传,是因为TCP协议在接收端和发送端都各自建立了两个发送、接收缓存)。
3)这样,当接收端B收到来自A的第二个包后,缓存中的数据都是按序的了。
4)对于按序包,接收端B对序列号的最后一个字节+1,也就是发送确认号是1202的ACK包。
5)发送端A收到确认号是1202后,便不能再发送任何数据了。
TCP 的传输机构有多个定时器。当一个包发送时,重发定时器开始计数;当收到确认信号后,重发定时器停止计数。如果超过设定时间段还没有收到确认信号,就 重发该包。一个比较棘手的问题是如何设置该时间段。如果太长,当网络传输错误增加时将导致不必要的等待时间;如果太短,就会产生过多的重复包从而降低网络 的反应时间。现代TCP协议根据实际情况对重发定时器进行动态设定。
不 管重发过程执行得多么有效,很少的丢失包就能严重地降低TCP连接的流量。每个未收到的包或包的片段只会在重发定时器超时的时候才会丢失。在数据重发 时,接收过程一直在递送这些重发的数据,这样就使总体的数据传输陷于停顿,直到丢失的数据被取代为止。这些重发过程导致基于TCP的连接有时处于不稳定状 态。
IP丢包:
1。接受方:在以太网上,服务端有可能响应不过来(大量客户端有读写需求),服务端访问密集,丢弃包在所难免
2。 发送方:大量客户端同时请求服务器发送数据,并且通告窗口很大,那么服务器会很快的把分组送到网卡上,考虑一种比较极端的情况,网络中还有大量流量占用带宽,致使 服务器不能迅速将数据发送出去,而网卡可以缓存的分组数是有一定限制的,那么肯定会有数据在未发送前就被丢弃了!而接收方对这种情况毫无所知,不会更改通 告窗口的大小,即流量控制不会起作用
3。网络传输
http://bbs.chinaunix.net/thread-4151013-1-1.html
大家好, 最近在看一些tcp/ip重组方面的东西,有一些问题一直是想不明白?
1、tcp重组和ip重组的区别?? 我的理解是ip重组是重组ip碎片,将ip碎片组成一个包。tcp重组是将乱序包排序,不知道这样理解是不是对的?
对
2、ip碎片包是不是都包含tcp的头部? 重组的时候是要把这些头部都偏移掉吗?
不是,在IP层看来,TCP的负载以及TCP头都是IP层的负载,IP层不会去做解释,直接按大小切片。
3、我用socket程序发一个5000字节的数据,用抓包软件抓数据包看了下,在数据包的ip层头部没有看到设置分片标识和偏移量这两个值,搞不明白这是怎么回事?
因为在TCP层已经根据协商的MSS对数据进行切分,MSS在协商时已经考虑了MTU,因此传递给IP层的数据包不需要再进行切分。
如果想看到IP层切分的效果,最简单的方式是PING命令,同时通过参数指定数据包的大小大于MTU,就可以看到了。你也可以自己写个UDP的程序去发送大于MTU的数据包。
第三个问题,tcp建立链接的时候协商mss,mss的大小考虑了MTU的大小,也就是说mss是小于MTU的,是不是对于tcp的应用来说,ip层是不会进行分片的,tcp层在组装的时候已经依据mss的大小对应用层数据进行了切割??
是的,TCP不会网IP层发送大于MTU的报文,这个之前chinauxix有讨论。
TCP数据流稳定性--TCP分片,重组及乱序的更多相关文章
- TCP协议下大数据传输IOCP乱序问题
毕业后稀里糊涂的闭门造车了两年,自己的独立博客也写了两年,各种乱七八糟,最近准备把自己博客废了,现在来看了下这两年写的对我来说略微有点意义的文章只此一篇,转载过来以作留念. 写的很肤浅且凌乱,请见谅. ...
- 计算机网络知识(TCP连接,TCP/UDP区别,HTTP与HTTPS,Socket原理等等)
1.网络七层协议包含,物理层.数据链路层.网络层(ip协议).传输层(TCP传输控制协议.UDP用户数据报协议).会话层.表示层.应用层(http协议).是一个提供的概念架构协议. 2.TCP/IP协 ...
- Wireshark理解TCP乱序重组和HTTP解析渲染
TCP数据传输过程 TCP乱序重组原理 HTTP解析渲染 TCP乱序重组 TCP具有乱序重组的功能.(1)TCP具有缓冲区(2)TCP报文具有序列号所以,对于你说的问题,一种常见的处理方式是:TCP会 ...
- 基于libnids的TCP数据流的还原(多线程实现) .
我们知道,libnids本身可以实现TCP数据流的重组,但是如果一个TCP流数据量比较大的时候,就会分成好多个TCP报文段,这些报文段在网络中的传播可能是乱序的,利用libnids可以帮助我们按顺序接 ...
- 【网络协议】TCP分段与IP分片
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mmc_maodun/article/details/30109789 我们在学习TCP/IP ...
- 【转】TCP分段与IP分片
原文: :https://www.jianshu.com/p/f9a5b07d99a2 -------------------------------------------------------- ...
- Wireshark抓包实例分析TCP重复ACK与乱序
转载请在文首保留原文出处: EMC 中文支持论坛https://community.emc.com/go/chinese 介绍 TCP 的一大常见问题在于重复 ACK 与快速重传.这一现象的发生也是由 ...
- TCP/IP之TCP交互数据流、成块数据流
建立在TCP协议上的网络协议有telnet,ssh,ftp,http等等.这些协议根据数据吞吐量来分成两大类: (1)交互数据类型,例如telnet,ssh,这种类型的协议在大多数情况下只是做小流量的 ...
- 略解TCP乱序和丢包
在使用基于TCP实现的各种组件的时候,我们经常会处理数据包.这数据包说来奇怪,从来不会丢失,也不会乱序,只会产生粘包.底层的机制是如何实现的呢?进来我们就来用简洁易懂的文字描述清楚. 在TCP数据包设 ...
随机推荐
- C++Primer STL算法
//1.概览: // A:beg和end是表示元素范围的迭代器. // B:beg2是表示第二个输入序列开始位置的迭代器.end2表示第二个序列的末尾位置,若没有end2,则假定beg2表示的序列至少 ...
- 【Origin】羡旁人
-道行至一桥畔,微风轻抚,观河岸杨柳柳枝空舞,看满路车辆畅行无阻,虽羡,然各有归途. 小河岸,棵棵杨柳,柳枝随风摆; 大路上,盏盏绿灯,一路往北开. 横批: 可惜不是我 -作于二零一六年三月二十二日
- nyist 596 谁是最好的Coder
http://acm.nyist.net/JudgeOnline/problem.php?pid=596 谁是最好的Coder 时间限制:1000 ms | 内存限制:65535 KB 难度:0 ...
- uva 11520 - Fill the Square
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- Java基础(55):Exception类详解(转)
Java中的异常 Exception java.lang.Exception类是Java中所有异常的直接或间接父类.即Exception类是所有异常的根类. 比如程序: public class Ex ...
- 封装cookie localStorage sessionStorage
var cookie = function(name, value, options) { if (typeof value !== 'undefined') { options = options ...
- 夺命雷公狗---TP商城----TP之配置环境---1
下载到tp3.2.3版本后架设到自己的wamp环境下,然后配置虚拟主机,完事后直接开工 环境下创建一个文件夹,然后里面存放这这两个文件即可开始新的旅途了 这里完了,下一步就开始配置index.php文 ...
- ADIv5.2
ADI:ARM Debug Interface,出到现在共有五代: 1)version1 and version 2:只针对ARM7TDMI和ARM9的processor: 2)version 3:只 ...
- WebDriver一些常见问题的解决方法【转】
转至:http://www.cnblogs.com/sylovezp/p/4329770.html 1.Exception NoSuchElementException: 解决方法: 1)检查目标el ...
- CC2541的任务与事件,以及红外捕捉.
因为红外遥控要占用的系统中断时间可能超过了80ms, 极有可能导致蓝牙断线, 特别是连续两次按键, 100%断线. 后来根据蓝牙技术群里的哥们提示, 觉得不能在一个中断中delay得太久, 只能用任务 ...