`
haitaoandroid
  • 浏览: 26422 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Tcp连接的建立与终止及其拥塞控制

阅读更多

TCP的连接建立主要有三次握手,终止有四次握手。看下图:


前三个是建立连接的过程,简称三次握手,介绍一下其过程:

1,客户端发送一个带序号(即ISN,图中为1415531521)的SYN段请求tcp连接,即上面的报文段1

2,服务器发回一个带序号(即1823083521)的SYN段回应请求,同时将发来的客户端的ISN加1(即1415531522)以对客户端的SYN报文段进行确认

3,客户端将服务器端的ISN加1(即1823083521)以对服务器的SYN段进行回应。

简单的说就是

客户端说:“我要跟你连接...”

服务器端说:“好,可以”

客户端还说了一句保证的话:“那行,我们连接上了。”

连接终止是差不多的过程,不过是客户端和服务器端都需要主动发起一次连接终止的请求,然后等待对方确认。


TCP的拥塞控制主要有四个阶段,其中有两个重要的参数cwnd(拥塞窗口)和ssthresh(慢启动域值),四个阶段的目的都是通过改变这两个参数来控制数据的发送数量:

先看一张从别人那里引用的图,对照理解:


1:慢启动,慢启动的过程是先发1个报文段过去,接收端正常接收后就开始发送2个,然后是4个......呈指数增长的发送,这样直到达到ssthresh设定的值便开始换一种方式增长发送报文段的数量,而不是指数增长。慢启动的原因是如果一开始就发送大量的数据包过去,可能会导致网络发生拥塞,因为新建的tcp连接一开始并不知道网络的利用情况。在一开始,先初始化cwnd为1个报文段,ssthresh为16个报文段,这样慢启动根据cwnd=1的值,先发送1个报文段,收到正确的ack回复后,cwnd要加上刚才发送的报文段数量,即加1,此时cwnd=2;之后发送端再发送2个报文段,cwnd再加2,即等于4;直到cwnd=ssthresh=16的时候,就开始进入另一种方式增长cwnd,即拥塞避免方式。

2:拥塞避免,在上面的慢启动到达cwnd=ssthresh=16之后,便进入了这一阶段的拥塞避免阶段,拥塞避免不是以上面的指数方式增长cwnd,而是以线性增长,每次收到ack确认后只增加1/cwnd个数据包。这样在一个往返时间内最多为cwnd增加1个报文段。在cwnd=24的时候,假如发生了超时,则会重置ssthresh=当前cwnd/2=12,而cwnd重置为1.这样重新进入慢启动的过程。

在上面发现了一个不好的地方,假如一个报文段丢失,但网络并没有拥塞,这样就会超时,然后又进入慢启动阶段,这回浪费很多的网络资源。所以便有了快速重传和快速恢复算法。首先要了解一个重复的ACK是怎么产生的,有两种产生方式,一种是丢失的报文引起接收方产生重复的ACK,另一种是报文被重新排序会产生重复的ACK,但是由于重新排序的报文段在产生一个新的ACK之前,只可能产生1~2个重复的ACK,所以如果连续收到3个或者3个以上重复的ACK,便很有可能是报文段丢失了,这样如果任发送发等待便会超时而进入慢启动过程,然而由于接收方只有在收到另一个报文段时才会产生重复的ACK,而该报文段已经离开网络并进入了接收方的缓存,也就是说收发两端并没有发生拥塞,所以我们并不想任其超时进入慢启动阶段,所以有了快速重传和快速恢复算法

3:快速重传和快速恢复算法,

1)当收到第3个重复的ACK时,进入快速重传阶段,将ssthresh设置为当前拥塞窗口cwnd的一半。重传丢失的报文段。设置cwnd为ssthresh加上3倍的报文段 大小。
2) 每次收到另一个重复的ACK时,cwnd增加1个报文段大小并发送 1个分组(如果新的cwnd允许发送)。
3) 当下一个确认新数据的ACK到达时,设置cwnd为ssthresh(在第1步中设置的值)。这个ACK应该是在进行重传后的一个往返时间内对步骤 1中重传的确 认。另外,这个ACK也应该是对丢失的分组和收到的第1个重复的ACK之间的所有中间报文段的确认。这一步采用的是拥塞避免,因为当分组丢失时我们将当 前的速率减半。

下面这张图说明了快速重传和快速恢复后的cwnd和ssthresh变化的情况:


上面的图来自《tcp/ip详解,卷一》一书239页,书中有一讲解拥塞避免的列子,详细讲解了cwnd和ssthresh值的变化。



参考:《tcp/ip详解,卷一》



分享到:
评论

相关推荐

    TCP连接建立与终止过程剖析

    TCP连接建立与终止过程剖析,非常详细的讲解了TCP连接建立与终止的所有不同的情况,推荐大家阅读

    TCP拥塞控制例题-202004011

    TCP拥塞控制例题:某TCP拥塞窗口演化图如下图所示,其中[1, 6]轮次是慢启动阶段,[6, 14]轮次是拥塞避免阶段,[15, 17]轮次是快速恢复阶段,

    TCP拥塞控制TCP拥塞控制TCP拥塞控制

    TCP拥塞控制 TCP拥塞控制

    TCP网络拥塞控制

    本文在对网络拥塞控制与TCP网络拥塞控制原理进行分析的基础上,重点阐述了TCP网络拥塞控制控制算法。列举了现有的TCP网络拥塞控制算法,并对其进行分析,对这些算法的优缺点进行了比较,总结了TCP拥塞控制目前的研究...

    计算机网络课件:4_7_6 TCP协议的流量控制与拥塞控制.pptx

    计算机网络课件:4_7_6 TCP协议的流量控制与拥塞控制.pptx

    论文研究-一种主动TCP拥塞控制方案.pdf

    基于广泛使用的TCP版本TCP Reno,提出了一种主动TCP拥塞控制方案,命名Active-TCP。在沿用传统的被动拥塞控制方式的同时,Active-TCP添加了主动拥塞控制方式,即在满足给定条件下,Active-TCP可主动降低拥塞窗口,而...

    TCP协议中拥塞控制研究

    针对目前TCP拥塞控制机制中存在的实际问题,提出了一种新的拥塞控制机制,包括COS-Slow-Start和A-AIMD两种改进策略。NS2仿真实验结果表明,该机制能有效地减少分组的丢失、平缓突发流量的冲击,并可增加带宽的有效...

    TCP拥塞控制机制定量性能分析

    目前,TCP协议承载着因特网超过70%的传输流量,TCP拥塞控制机制可以有效地改善网络拥塞现象。本文主要研究几种常见的TCP拥塞控制算法,借助于网络模拟器NS2,对这几种常用算法的性能进行定量分析,并给出相应的合理...

    计算机网络教案16-TCP连接管理与拥塞控制机制.docx

    计算机网络教案16-TCP连接管理与拥塞控制机制.docx

    拥塞控制测试环境

    一个拥塞控制的测试环境,包含了PCC, Copa等比较新的拥塞控制算法,可以结合Mahimahi进行网络仿真

    tcp拥塞控制

    tcp拥塞控制,tcp拥塞控制有关的的论文

    TCP拥塞控制算法研究

    随着网络需求的增长,网络拥塞已成为一个严重的问题。本文档基于传统的TCp 拥塞控制算法进行研究及改进。

    TCP拥塞控制方法的探讨

    拥塞控制理论和算法研究因此成为 Intemet研究中的一个热点。 拥塞现象发生的原因.总的来说是Intemet网络中的需求大 于供给,即网络的资源(缓冲、链路带宽和网关处理能力等)是有 限的.这些有限资源要在网络用户之间...

    TCP连接建立TCP连接建立

    TCP连接建立

    TCP连接的建立与终止

    本章将详细讨论一个T C P连接是如何建立的以及通信结束后是如何终止的。 这种两端间连接的建立与无连接协议如U D P不同。我们在第11章看到一端使用U D P向另 一端发送数据报时,无需任何预先的握手。

    TCP 拥塞控制 个人总结资料 PPT

    自己花了两周总结整理的关于TCP拥塞控制的PPT,包括背景,研究现状,慢启动、拥塞避免等算法描述,以及典型的四种拥塞控制策略的介绍,资料内容很详实,值得参考

    TCP拥塞控制的典型算法分析

    TCP拥塞控制的典型算法分析,拥塞的原因以及控制拥塞的机制,并对几种经典算法进行分析

    TCP拥塞控制四个主要过程

    TCPTCPTCPTCPTCPTCPTCPTCPTCPTCP

    基于 TCP 的拥塞控制策略及改进

    其是 TCP 的拥塞控制算法对大的拥塞窗口响应很慢,发生拥塞时又降低窗口过快的问题。 近几年,在 TCP 协议的基础上提出了一些新的改进协议,如:HSTCP、STCP、H-TCP、 Fast-TCP、BIC 和 CUBIC 等,这些协议公布了...

Global site tag (gtag.js) - Google Analytics