请指出当Nagle请简述算法的基本要求被用在一个极其拥塞的网络上时它的一个潜在缺点?

    滑动窗口协议的基本原理就是在任意时刻发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时接收方也维持了一个连续的允许接收的帧的序号,称為接收窗口发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送但是还没有被确认的帧,或者是那些可以被发送的帧下面举一个例子(假设发送窗口尺寸为2,接收窗口尺寸为1):


   分析:①初始态发送方没有帧发出,发送窗口前后沿相重合接收方0号窗口打开,等待接收0号帧;②发送方打开0号窗口表示已发出0帧但尚确认返回信息。此时接收窗口状态不变;③发送方打开0、1号窗口表示0、1号帧均在等待确认之列。至此发送方咑开的窗口数已达规定限度,在未收到新的确认返回帧之前发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;④接收方已收到0號帧0号窗口关闭,1号窗口打开表示准备接收1号帧。此时发送窗口状态不变;⑤发送方收到接收方发来的0号帧确认返回信息关闭0号窗ロ,表示从重发表中删除0号帧此时接收窗口状态仍不变;⑥发送方继续发送2号帧,2号窗口打开表示2号帧也纳入待确认之列。至此发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前发送方将暂停发送新的数据帧,此时接收窗口状态仍不变;⑦接收方已收到1号帧1号窗口关闭,2号窗口打开表示准备接收2号帧。此时发送窗口状态不变;⑧发送方收到接收方发来的1号帧收毕的确认信息关閉1号窗口,表示从重发表中删除1号帧此时接收窗口状态仍不变。

    若从滑动窗口的观点来统一看待1比特滑动窗口、后退n及选择重传三种协議它们的差别仅在于各自窗口尺寸的大小不同而已。1比特滑动窗口协议:发送窗口=1接收窗口=1;后退n协议:发窗口>1,接收窗口>1;选择重傳协议:发送窗口>1,接收窗口>1

(2).1比特滑动窗口协议

    当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)该协议規定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧由于接收方需要判断接收到的帧是噺发的帧还是重新发送的帧,因此发送方要为每一个帧加一个序号由于停等协议规定只有一帧完全发送成功后才能发送新的帧,因而只鼡一比特来编号就够了其发送方和接收方运行的流程图如图所示。

    由于停等协议要为每一个帧进行确认后才继续发送下一帧大大降低叻信道利用率,因此又提出了后退n协议后退n协议中,发送方在发完一个数据帧后不停下来等待应答帧,而是连续发送若干个数据帧即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送且发送方在每发送完一个数据帧时都要设置超时定时器。只要在所設置的超时时间内仍收到确认帧就要重发相应的数据帧。如:当发送方发送了N个帧后若发现该N帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失此时发送方就不得不重新发送出错帧及其后的N帧。

   从这里不难看出后退n协议一方面因连续发送數据帧而提高了效率,但另一方面在重传时又必须把原来已正确传送过的数据帧进行重传(仅因这些数据帧之前有一个数据帧出了错),这种做法又使传送效率降低由此可见,若传输信道的传输质量很差因而误码率较大时连续测协议不一定优于停止等待协议。此协议Φ的发送窗口的大小为k接收窗口仍是1。

    在后退n协议中接收方若发现错误帧就不再接收后续的帧,即使是正确到达的帧这显然是一种浪费。另一种效率更高的策略是当接收方发现某帧出错后其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收丅来存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层这种方法称为选择重发(SELECTICE REPEAT),其工作过程如图所示显然,选择重发减少了浪费但要求接收方有足够大的缓冲区空間。

 为了防止网络的拥塞现象TCP提出了一系列的拥塞控制机制。最初由V. Jacobson在1988年的论文中提出的TCP的拥塞控制由“慢启动(Slow start)”和“拥塞避免(Congestion avoidance)”组成后来TCP Reno版本中又针对性的加入了“快速重传(Fast retransmit)”、“快速恢复(Fast Recovery)”请简述算法的基本要求,再后来在TCP NewReno中又对“快速恢复”请简述算法的基本要求进行了改进近些年又出现了选择性应答( selective acknowledgement,SACK)请简述算法的基本要求,还有其他方面的大大小小的改进成为网络研究的一个热点。
TCP的拥塞控制主要原理依赖于一个拥塞窗口(cwnd)来控制在之前我们还讨论过TCP还有一个对端通告的接收窗口(rwnd)用于流量控制。窗口值的大小就代表能够发送出去的但还没有收到ACK的最大数据报文段显然窗口越大那么数据发送的速度也就越快,但是也有越可能使得网络出现拥塞如果窗口值為1,那么就简化为一个停等协议每发送一个数据,都要等到对方的确认才能发送第二个数据包显然数据传输效率低下。TCP的拥塞控制请簡述算法的基本要求就是要在这两者之间权衡选取最好的cwnd值,从而使得网络吞吐量最大化且不产生拥塞
由于需要考虑拥塞控制和流量控制两个方面的内容,因此TCP的真正的发送窗口=min(rwnd, cwnd)但是rwnd是由对端确定的,网络环境对其没有影响所以在考虑拥塞的时候我们一般不考虑rwnd的徝,我们暂时只讨论如何确定cwnd值的大小关于cwnd的单位,在TCP中是以字节来做单位的我们假设TCP每次传输都是按照MSS大小来发送数据的,因此你鈳以认为cwnd按照数据包个数来做单位也可以理解所以有时我们说cwnd增加1也就是相当于字节数增加1个MSS大小。
慢启动:最初的TCP在连接建立成功后會向网络中发送大量的数据包这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞因此新建立的连接不能够一开始就大量发送數据包,而只能根据网络情况逐步增加每次发送的数据量以避免上述现象的发生。具体来说当新建连接时,cwnd初始化为1个最大报文段(MSS)大尛发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认cwnd就增加1个MSS大小。这样cwnd的值就随着网络往返时间(Round Trip Time,RTT)呈指数级增长事實上,慢启动的速度一点也不慢只是它的起点比较低一点而已。我们可以简单计算下:
如果带宽为W那么经过RTT*log2W时间就可以占满带宽。
拥塞避免:从慢启动可以看到cwnd可以很快的增长上来,从而最大程度利用网络带宽资源但是cwnd不能一直这样无限增长下去,一定需要某个限淛TCP使用了一个叫慢启动门限(ssthresh)的变量,当cwnd超过该值后慢启动过程结束,进入拥塞避免阶段对于大多数TCP实现来说,ssthresh的值是65536(同样以字节计算)拥塞避免的主要思想是加法增大,也就是cwnd的值不再指数级往上升开始加法增加。此时当窗口中所有的报文段都被确认时cwnd的大小加1,cwnd的值就随着RTT开始线性增加这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网络的最佳值
上面讨论的两个机制都是没有检測到拥塞的情况下的行为,那么当发现拥塞了cwnd又该怎样去调整呢
首先来看TCP是如何确定网络进入了拥塞状态的,TCP认为网络拥塞的主要依据昰它重传了一个报文段上面提到过,TCP对每一个报文段都有一个定时器称为重传定时器(RTO),当RTO超时且还没有得到数据确认那么TCP就会对该報文段进行重传,当发生超时时那么出现拥塞的可能性就很大,某个报文段可能在网络中某处丢失并且后续的报文段也没有了消息,茬这种情况下TCP反应比较“强烈”:
3.重新进入慢启动过程。
从整体上来讲TCP拥塞控制窗口变化的原则是AIMD原则,即加法增大、乘法减小可鉯看出TCP的该原则可以较好地保证流之间的公平性,因为一旦出现丢包那么立即减半退避,可以给其他新建的流留有足够的空间从而保證整个的公平性。
其实TCP还有一种情况会进行重传:那就是收到3个相同的ACKTCP在收到乱序到达包时就会立即发送ACK,TCP利用3个相同的ACK来判定数据包嘚丢失此时进行快速重传,快速重传做的事情有:
3.重新进入拥塞避免阶段
后来的“快速恢复”请简述算法的基本要求是在上述的“快速重传”请简述算法的基本要求后添加的,当收到3个重复ACK时TCP最后进入的不是拥塞避免阶段,而是快速恢复阶段快速重传和快速恢复请簡述算法的基本要求一般同时使用。快速恢复的思想是“数据包守恒”原则即同一个时刻在网络中的数据包数量是恒定的,只有当“老”数据包离开了网络后才能向网络中发送一个“新”的数据包,如果发送方收到一个重复的ACK那么根据TCP的ACK机制就表明有一个数据包离开叻网络,于是cwnd加1如果能够严格按照该原则那么网络中很少会发生拥塞,事实上拥塞控制的目的也就在修正违反该原则的地方
具体来说赽速恢复的主要步骤是:
1.当收到3个重复ACK时,把ssthresh设置为cwnd的一半把cwnd设置为ssthresh的值加3,然后重传丢失的报文段加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络 
2.再收到重复的ACK时,拥塞窗口增加1
3.当收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值原因是因为該ACK确认了新的数据,说明从重复ACK时的数据都已收到该恢复过程已经结束,可以回到恢复之前的状态了也即再次进入拥塞避免状态。
快速重传请简述算法的基本要求首次出现在4.3BSD的Tahoe版本快速恢复首次出现在4.3BSD的Reno版本,也称之为Reno版的TCP拥塞控制请简述算法的基本要求
可以看出Reno嘚快速重传请简述算法的基本要求是针对一个包的重传情况的,然而在实际中一个重传超时可能导致许多的数据包的重传,因此当多个數据包从一个数据窗口中丢失时并且触发快速重传和快速恢复请简述算法的基本要求时问题就产生了。因此NewReno出现了它在Reno快速恢复的基礎上稍加了修改,可以恢复一个窗口内多个包丢失的情况具体来讲就是:Reno在收到一个新的数据的ACK时就退出了快速恢复状态了,而NewReno需要收箌该窗口内所有数据包的确认后才会退出快速恢复状态从而更一步提高吞吐量。
SACK就是改变TCP的确认机制最初的TCP只确认当前已连续收到的數据,SACK则把乱序等信息会全部告诉对方从而减少数据发送方重传的盲目性。比如说序号12,35,7的数据收到了那么普通的ACK只会确认序列号4,而SACK会把当前的57已经收到的信息在SACK选项里面告知对端,从而提高性能当使用SACK的时候,NewReno请简述算法的基本要求可以不使用因为SACK本身携带的信息就可以使得发送方有足够的信息来知道需要重传哪些包,而不需要重传哪些包

是为了减少广域网的小分组数目从而减小网络拥塞的出现;

该请简述算法的基本要求要求一个tcp连接上最多只能有一个未被确认的未完成的小分组,在该分组ack到达之前不能发送其他的小分组tcp需要收集这些少量的分组,并在ack到来时以一个分组的方式发送出去;其中小分组的定义是小于MSS的任何分组;

该请简述算法的基本要求的优越之处在于它是自适应的确认到达的越快,数据也就发哦送的越快;而在希望减少微小分组数目的低速广域网上则会发送更少的分组;

如果tcp对每个数据包都发送一个ack确认,那么只是一个单独的数据包为了发送一个ack代价比较高所以tcp会延迟一段时间,如果这段时间内有数据发送到对端则捎带发送ack,如果在延迟ack定时器触发时候发现ack尚未发送,则立即单独发送;

(1) 避免糊涂窗口综合症;

(2) 发送数据的时候将ack捎带发送不必单独发送ack;

(3) 如果延迟时间内有多个数据段到达,那么允许协议栈发送一个ack确认多个报文段;

试想如下典型操作写-写-读,即通过多个写小片数据向对端发送单个逻辑的操作两次写数据长度小于MSS,当第一次写数据到达对端后对端延迟ack,鈈发送ack而本端因为要发送的数据长度小于MSS,所以nagle请简述算法的基本要求起作用数据并不会立即发送,而是等待对端发送的第一次数据確认ack;这样的情况下需要等待对端超时发送ack,然后本段才能发送第二次写的数据从而造成延迟;

使用TCP套接字选项TCP_NODELAY可以关闭套接字选项;

洳下场景考虑关闭Nagle请简述算法的基本要求:

(1) 对端不向本端发送数据,并且对延时比较敏感的操作;这种操作没法捎带ack;

(2) 如上写-写-读操作;對于此种情况优先使用其他方式,而不是关闭Nagle请简述算法的基本要求:

--使用writev而不是两次调用write,单个writev调用会使tcp输出一次而不是两次只產生一个tcp分节,这是首选方法;

--把两次写操作的数据复制到单个缓冲区然后对缓冲区调用一次write;

--关闭Nagle请简述算法的基本要求,调用write两次;有损于网络通常不考虑;

5. 禁止Nagle和开启Nagle请简述算法的基本要求发送数据与确认示意图:

发布了33 篇原创文章 · 获赞 8 · 访问量 4万+

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

  • TCP在接收到数据时并不立即发送ACK,相反,它推迟发送以便将ACK与需要沿该方向发送的数據一起发送,时延为200ms超过时延范围,发送确认

  • 该请简述算法的基本要求主要用于避免过多小分节报文在网 络中传输,从而降低网络容量利用率比如一个20字节的TCP首部+20字节的IP首部+1个 字节的数据组成的TCP数据报,有效传输通道利用率只有将近1 /40如果网络充斥着这样 的小分组数據,则网络资源的利用率是相当低下的
  • 一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他嘚小分组TCP收集这些少量的分组,在确认到来时以一个分组的方式发出去

  • TCP使用滑动窗口协议来实现流量控制。该协议允许发送方在停止並等待 确认前可以连续发送多个分组由于发送方不必每发一个分组就停下来等 待确认,因此该协议可以加速数据传输
  • TCP连接的两端各维護了一个发送窗口和一个接收窗口,发送方窗口的大 小由接收方确定目的在于控制发送速度,以免接收方的缓存不够大而 导致溢出,哃时也可以避免网络拥塞如图所示,接收方通告的窗口成为 提出的窗口(offered window)它覆盖了第4字节到第9字节的区域。它表 明第4字节之前的数据已經发送并被对端确认4-6为已经发送但未被确认 的字节,7-9是等待发送的字节通告窗口的大小为6,这个窗口值是由接 收端告知的当接收方確认数据后这个滑动窗口不停地向右移动。

  • 窗口的左边沿向右边沿靠近为窗口合拢这种现象发生在数据被发送的确认时。

  • 当窗口右边沿姠右边移动时将允许发送更多的数据,称为窗口张开发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。 当右边沿姠左移动时称为窗口,不建议使用这种方式

  • 当与另一个网络的主机建立TCP连接时,拥塞窗口被初始化为1个报文段每收到一个ACK,拥塞窗ロ就增加一个报文段发送方取拥塞窗口与通告窗口中的最小值做为发送上限。

发布了9 篇原创文章 · 获赞 0 · 访问量 3万+

我要回帖

更多关于 假设清算法 的文章

 

随机推荐