《tcp/ip具体解释》读书笔记(21章)-tcp的超时与重传

jzssuanfa jzssuanfa     2022-08-31     773

关键词:

TCP提供可靠的运输层。

它使用的方法之中的一个就是确认从还有一端收到的数据。但数据和确认都有可能会丢失。TCP通过在发送时设置一个定时器来解决这样的问题。假设当定时器溢出时还没有收到确认,它就重传该数据。

对于实现而言,关键之处就在于超时和重传的策略,即怎样决定超时间隔和怎样确定重传频率

TCP管理4种不同的定时器:

  • 重传定时器:当希望收到还有一端的确认时使用。

  • 坚持定时器:使窗体信息保持不断流动,即使还有一端关闭了其接收窗体。
  • 保活定时器:检測一个空暇连接的还有一端何时崩溃或重新启动。

  • 2MSL定时器:測量一个连接处于TIME_WATI状态的时间。

指数退避:书中检查连续重传之间不同的时间差,它们取整后各自是1、3、6、12、24、48和多个64秒,当中第一次发送后设置的超时时间设置为1.5秒。

(2的N次方*1.5秒)

1.往返时间測量

RTT(往返时间):指发送端发送TCP报文段開始到接收到对方的确定所使用的时间。

TCP超时与重传中最重要的部分就是对一个给定连接的往返时间的測试。

由于路由器和网络流量均会变化,因此我们觉得这个时间可能常常会发生变化,TCP应该跟踪这些变化并对应地改变其超时时间。

RTO(超时重传时间):发送端发送TCP报文段后。在RTO时间内没有收到对方确定,即重传该报文段。

最早的TCP以前用了一个很easy的公式来预计当前网络的状况,例如以下:

R<-aR+(1-a)M
RTP=Rb

当中a是一个经验系数为0.9,称为平滑因子,b通常为2。这个数值是可以被改动的。

这个公式是说用旧的RTT(R)和新的RTT(M)综合到一起来考虑新的RTT(R)的大小。每次进行新測量时,这个被平滑的RTT将得到更新。每一个新预计的90%来自前一个预计。而10%则取自新的測试。

可是,在RTT变化范围很大时,使用这种方法无法跟上这样的变化,从而引起不必要的重传。当网络已经处于饱和状态时,不必要的和重传会添加网络的负载,对网络而言就像在火上浇油。于是就有以下的修正公式:

Err=M-A
A<-A+gErr
D<-D+h(|Err|-D)
RTO=A+4D

  • A 平滑的RTT(均值预计器)
  • D 平滑的方差
  • g 增量
  • h 方差的增益

RTO值基于RTT的均值和方差。这更好的响应了RTT的变化。


karn算法(重传多义性)

假如发送一个分组,当发生超时,RTO指数退避。重传该分组,然后收到ACK。

此时但并不能确定这个ACK是针对第一个分组还是重传分组,这就是重传多义性问题。

karn算法针对这个问题

(1)对于超时重传的数据报的确认,不更新RTT。


(2)要注意的是:重传的情况下,RTO不用上面的公式计算,而採用一种叫做“指数退避”的方式。RTO指数退避,下一次传送就使用这个RTO值。
(3)重传数据确认之后。再次发送的数据假设正常被确定。恢复Jacobson 1988公式。更新RTO和RTT。

2.拥塞避免算法

该算法假定由于分组受到损坏引起的丢失是很少的。因此分组丢失就意味着源主机和目的主机之间的某处网络上发生了拥塞。有两种分组丢失的指示:

  • 发生超时
  • 接收到反复的确认

数据在传输的时候不能仅仅使用一个窗体协议,我们还须要有一个拥塞窗体来控制数据的流量。使得数据不会一下子都跑到网路中引起“拥塞”。

也以前提到过。拥塞窗体最初使用指数增长的速度来添加自身的窗体,直到发生超时重传,再进行一次微调。可是没有提到,怎样进行微调,拥塞避免算法和慢启动门限就是为此而生。

所谓的慢启动门限就是说,当拥塞窗体超过这个门限的时候。就使用拥塞避免算法,而在门限以内就採用慢启动算法。所以这个标准才叫做门限,通常。拥塞窗体记做cwnd。慢启动门限记做ssthresh

以下我们来看看拥塞避免和慢启动是怎么一起工作的。

拥塞避免算法和慢启动算法是两个目的不同、独立的算法。我们希望减少分组进入网络的传输速率,于是可以调用慢启动来作到这一点,拥塞避免算法和慢启动算法通常一起使用:
每一个连接维持两个变量: 拥塞窗体( cwnd )  慢启动门限( ssthresh )[下图中假设为16]

算法概要:

  1. 对一个给定的连接。初始化cwnd为1个报文段。ssthresh为65535个字节。
  2. TCP输出例程的输出不能超过cwnd和接收方通告窗体的大小。拥塞避免是发送方使用的流量控制,而通告窗体则是接收方进行的流量控制。

    前者是发送方感受到的网络拥塞的预计,而后者则与接收方在该连接上的可用缓存大小有关。

  3. 当拥塞发生时(超时或收到反复确认),ssthresh被设置为当前窗体大小的一半[下图中的12](cwnd 和接收方通告窗体大小的最小值,但最少为2个报文段)。

    此外,假设是超时引起了拥塞,则 cwnd被设置为1个报文段(这就是慢启动)。

  4. 当新的数据被对方确认时,就添加cwnd,但添加的方法依赖于我们是否正在进行慢启动或拥塞避免。假设cwnd小于或等于ssthresh,则正在进行慢启动。否则正在进行拥塞避免。 慢启动一直持续到我们回到当拥塞发生时所处位置的半时候才停止(由于我们记录了在步骤2 中给我们制造麻烦的窗体大小的一半)。然后转为运行拥塞避免。

技术分享
cwnd添加方式
慢启动初始cwnd为1。每收到一个确定就加1。成指数增长。
拥塞避免算法在每一个RTT内添加 1/cwnd 个报文,成线性增长。
慢启动依据收到的ACK次数添加cwnd,而拥塞避免算法在一个RTT无论收有多少ACK也仅仅添加一次。


3.高速重传和高速恢复算法

假设收到3个反复ACK,可觉得该报文段已经丢失,此时无需等待超时定时器溢出,直接重传丢失的包,这就叫高速重传算法。

而接下来运行的不是慢启动而是拥塞避免算法,这就叫高速恢复算法。


(1)当收到第3个反复的ACK时,将ssthresh设置为当前拥塞窗体cwnd的一半,重传丢失的报文段,设置cwnd为ssthresh加上3倍的报文段大小。
(2)每次收到还有一个反复的ACK时。cwnd添加1个报文段大小并发送1个分组(假设新的cwnd同意发送)。


(3)当下一个确认新数据的ACK到达时,设置cwnd为ssthresh(在第1步中设置的值)。这个ACK应该是在进行重传后的一个往返时间内对步骤1中重传的确认。

另外,这个ACK也应该是对丢失的分组和收到的第1个反复的ACK之间的全部中间报文段的确认。

这一步採用的是拥塞避免。由于当分组丢失时我们将当前的速率减半。

技术分享

4.ICMP(Internet Control Message Protocol)Internet控制报文协议)差错

TCP可以遇到的最常见的ICMP差错就是源站抑制、主机不可达和网络不可达。

(1)源站抑制的ICMP将拥塞窗体cwnd置为1个报文段,并发起慢启动,慢启动门限ssthresh不变,窗体将打开直至开放了全部的通路(受窗体大小和往返时间的限制)或者发生了拥塞。

(2)主机不可达或网络不可达的ICMP将被忽略,由于这两上差错都被觉得是短暂现象。


5.又一次分组

当TCP超时并重传时,它不一定须要重传相同的报文段。

相反,TCP同意进行又一次分组而发送一个较大的报文段,这将有助于提高性能(当然。这个较大的报文段不可以超过接收方声明的MSS)

作者原创,转载请标明原处:http://blog.csdn.net/xifeijian/article/details/44261821

























《tcp/ip具体解释》读书笔记(19章)-tcp的交互数据流

在TCP进行传输数据时。能够分为成块数据流和交互数据流两种。假设按字节计算。成块数据与交互数据的比例约为90%和10%,TCP须要同一时候处理这两类数据,且处理的算法不同。书籍本章中以Rlogin应用为例观察交互数据的传输过... 查看详情

《tcp/ip具体解释》读书笔记(20章)-tcp的成块数据流

眼下建立在TCP协议上的网络协议特别多,有telnet。ssh,有ftp。有http等等。这些协议又能够依据数据吞吐量来大致分成两大类:(1)交互数据类型,比如telnet,ssh。这样的类型的协议在大多数情况下仅仅是做小流量的数据交换,比... 查看详情

tcp/ip具体解释学习笔记--tcp数据流

1.TCP的交互数据流(1)基本概念所谓交互数据流,其对TCP而言,就是他们所产生的大多数的TCP报文段中所包括的数据不超过10个字节。比如聊天等telnet的软件的TCP数据流就属于TCP交互数据流(2)经受时延的确认TCP收到数据时并不会立... 查看详情

《tcp/ip具体解释卷2:实现》笔记--协议控制块

协议层使用协议控制块(PCB)存放各UDP和TCP插口所要求的多个信息片。Internet协议维护Internet协议控制块(internetprotocolcontrolblock)和TCP控制块(TCPcontrolblock)。由于UDP是无连接的。所以一个端结点须要的全部信息都在InternetPCB中... 查看详情

《图解tcp/ip》读书笔记

...用放心的网络环境。  同时,这本书也是我的2016年度读书计划中的一本,下面我将会 查看详情

tcp/ip具体解释学习笔记--tcp的坚持和保活定时器

TCP的坚持定时器1.基本概念TCP的接收方指名希望从发送方接收的数据字节(窗体大小)来进行流量控制,假设窗体大小为0。那么放送方就会阻止发送数据,直到接收方发来一个已跟新窗体大小的ACK为止,那么假设接收方发送的这... 查看详情

tcp/ip知识总结(tcp/ip协议族读书笔记四)

  参考:http://blog.chinaunix.net/uid-26275986-id-4109679.html  继续!TCP的流量控制和拥塞控制。  TCP相对UDP可靠的地方在于它的拥塞控制、流量控制。一.流量控制:  如果发送方把数据发送得过快,接收方可能会来不及接收,... 查看详情

tcp/ip具体解释学习笔记——地址解析协议arp

一概述我们知道,IP协议是用来在不同的物理网络之间数据传输的。要在不同的网络之间数据传输,至少须要将IP协议所用的地址转换成特定网络所使用的物理地址。一般来说。就是将IPv4地址转换为mac地址。要想与一个特定的设... 查看详情

《tcp/ip具体解释卷2:实现》笔记--接口层

接口层包含在本地网上发送和接收分组的硬件与软件。我们用设备驱动程序来表示与硬件及网络接口通信的软件,网络接口是指在一个特定网络上硬件与设备驱动器之间的接口。Net/3接口层试图在网络协议和连接到一个系统的网... 查看详情

《tcp/ip具体解释卷2:实现》笔记--选路请求和选路消息

内核的各种协议并不直接使用前面提供的函数来訪问选路树,而是调用几个函数:rtalloc和rtallocl是完毕路由表查询的两个函数;rtrequest函数用于加入和删除路由表项;另外大多数接口在接口连接或断开时都会调用函数rtinit。选路... 查看详情

tcp/ip具体解释--tcp的分段和ip的分片

写在前面:   分组能够发生在运输层和网络层。运输层中的TCP会分段,网络层中的IP会分片。IP层的分片很多其它的是为运输层的UDP服务的,因为TCP自己会避免IP的分片,所以使用TCP传输在IP层都不会发生分片的现象。... 查看详情

《图解http》读书笔记

《图解HTTP》读书笔记第一章:了解Web及网路基础TCP/IP协议把互联网想关联的协议集合起来总称为TCP/IP协议TCP/IP协议族按层次分为:应用层,传输层,网络层,数据链路层应用层决定了向用户提供应用服务时通... 查看详情

《图解http》读书笔记

《图解HTTP》读书笔记第一章:了解Web及网路基础TCP/IP协议把互联网想关联的协议集合起来总称为TCP/IP协议TCP/IP协议族按层次分为:应用层,传输层,网络层,数据链路层应用层决定了向用户提供应用服务时通... 查看详情

大话存储学习笔记(11章),tcp/ip

TCP/IP协议以太网的出现,给系统的互联带来方便的方式,每个节点安装一块以太网适配器,上层程序只要将发送的数据以及目的MAC地址告诉以太网卡,就可以完成通信过程。但是实际上,以太网不能直接被应用程序用来收发数据... 查看详情

tcp/ip具体解释--icmp报文分析

一.概述:1.   ICMP同意主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用... 查看详情

tcp/ip协议族——ip工作原理及实例具体解释(上)

??IP协议具体解释       本文主要介绍了IP服务特点,头部结构,IP分片知识,并用tcpdump抓取数据包。来观察IP数据报传送过程中IP的格式,以及分片的过程。IP头部信息:IP头部信息出如今每一个IP数据报... 查看详情

tcp/ip学习笔记章二链路层

一、数据链路层当需要在一条线路上传递数据时,除了必须使用一条物理设备时,还需要一些必要的通信协议来控制数据的传输,若把实现这些协议的硬件和软件的加到链路上,就叫做数据链路;最常用的是-----网络适配器。一... 查看详情

tcp/ip卷一读书笔记为什么既要有ip地址又要有mac地址

网络层首先明确一点,并不是所有的网络之间传输数据都需要mac地址和ip地址,比如说点对点线路之间的通信就没有MAC地址,网络层使用ipx协议时就没有ip地址,但是在当前的主流网络中,我们都使用ip地址和mac地址既然mac地址唯... 查看详情