TCP/IP 协议——十四章:TCP超时与重传

由于下层网络层(IP)可能出现丢失、重复或失序包的情况,TCP 协议提供可靠数据传输服务。为保证数据传输的正确性,TCP 重传其认为已经丢失的包。TCP 有两套重传机制,一是基于定时器(超时),二是基于确认信息的构成(快速重传)。

基于计时器的重传

TCP在发送数据时会设置一个计时器,若至计时器超时仍未收到数据确认信息(ACK),则会引发相应的超时或基于计时器的重传操作,计时器超时称为重传超时(Retansmission Timeouts,RTO)。

图中黑色那条就是因为定时器超时仍没有收到 ACK,所以引起了发送方超时重传。

实际上, TCP 有两个阈值来决定如何重传同一个报文段:一是愿意重传的次数 R1、二是应该放弃当前连接的时机 R2。R1 和 R2 的值应分别至少为 3 次和 100 秒,如果超过任何一个但还没能重传成功,会放弃该连接。当然这两个值是可以设置的,在不同系统里默认值也不同。

那么如何设定一个合适的超时的值呢?假设 TCP 工作在静态环境中,这很容易,但真实网络环境不断变化,需要根据当前状态来设定合适的值。

1、设置重传超时(RTO)

RTO(retransmission timeout)一般是根据RTT(round trip time)也就是往返时间来设置的。

若 RTO 小于 RTT,则会造成很多不必要的重传;

若 RTO 远大于 RTT,则会降低整体网络利用率,RTO 是保证 TCP 性能的关键。并且不同连接的RTT不相同,同一个连接不同时间的 RTT 也不相同,所以 RTO 的设置一直都是研究热点。

凭我们的直觉,RTO 应该比 RTT 稍大:

? RTO=RTT+Δt

那么,RTT 怎么算呢:

? SRTT=α(SRTT)+(1-α)RTTnew

SRTT(smooth RTT),RTTnew 是新测量的值。如上,为了防止 RTT 抖动太大,给了一个权值 a ,也叫平滑因子。a 的值建议在 80%~90%。举个例子,当前 SRTT=200ms,最新一次测量的 RTTnew=800ms,那么更新后的 SRTT=200×0.875+800×0.125=275ms.

根据前面求的SRTT计算出RTO:

RTO = min(ubound, max(lbound, (SRTT)β))

β是时延离散因子,推荐值1.3~2.0。 ubound是RTO上边界,lbound是下边界。这种计算方法就是经典方法。它是的RTO值设置为1s或约两倍的SRTT。

这种方法缺点就是没法适应大规模的变动(网络不稳定情况)。

2、退避指数

根据前面的公式,我们可以得到 RTO。一旦超过 RTO 还没收到 ACK,就会引起发送方重传。但如果重传后还是没有在 RTO 时间内收到 ACK,这时候会认为是网络拥堵,会引发 TCP 拥塞控制行为,使 RTO 翻倍。则第 n 次重传的 RTOn 值为:

? RTOn=2^(n−1)×RTO1

下图是一个例子:

3、带时间戳的 RTT 测量

前面说了 RTO 的公式,它和 RTT 有关,那么每一次的 RTT 是如何得到的呢?

在之前 TCP 连接管理的时候讲过,TCP有一个 TSOPT (timestamp option) 选项,它包含两个时间戳值。它允许发送者在报文中带上一个32比特的时间戳值(TSV),然后接收方将收到的值原封不动的填入 ACK 报文段中 TSOPT 选项的第二部分,时间戳回显字段(TSER)。发送方收到 ACK 以后,将当前时间戳减去 TSOPT 选项的 TSER 就可得到精确的RTT值。

但是这里有很微妙的细节:接收方在收到数据包后,并不是立即发送 ACK,通常会延时“一小会儿”,多等待几个数据包后返回一个累积 ACK。此时接收方将确认时间最近的报文段的 TSV 填入 TSER 发送给发送方。

4、重传二义性与 Karn 算法

还有另一个重要的细节,如果测量 RTT 的样本出现了超时重传,导致我们收到 ACK 时无法分辨是对哪一次的确认,这时候 RTT 的值可能是不正确的。

因此,Karn 算法规定:此时不更新 RTTnew 的值。并且如果发生再次重传,则采用退避后的 RTO 的值,直到发送成功,退避指数重新设定为 1 。

基于确认信息的重传(快速重传)

在大多数情况下,计时器超时并触发重传是不必要的,也不是期望的,因为 RTO 通常是大于 RTT(约2倍或更大),因此基于计时器的重传会导致网络利用率降低。

快速重传机制基于接收端的反馈信息来引发重传,与超时重传相比,快速重传能更加及时有效的修复丢包情况。

首先我们要知道,接收方收到失序报文段时,应立即生成确认信息(重复 ACK),以便发送方尽快、高效地填补空缺。而发送方在收到重复 ACK 时,无法判断是由于数据包丢失还是仅仅因为延迟,所以发送方等待一定数目的重复 ACK (重复 ACK 阈值,dupthresh),这时可以认为是数据包丢失,即便还未超时,也立即发送丢失的分组。

所以快速重传概括如下:TCP 发送方在观测到至少 dupthresh ( 通常是 3 ) 个重复 ACK,立即重传,而不必得到计时器超时。当然也可以同时发送新的数据。

如下图所示:

原文地址:https://www.cnblogs.com/wang-shishuang/p/10678434.html

时间: 2024-10-09 06:27:44

TCP/IP 协议——十四章:TCP超时与重传的相关文章

tcp/ip协议第三章 ip:网际协议

tcp/ip协议第三章读后总结 ip是tcp/ip协议族中最为核心的协议.ip提供不可靠传输,不可靠的意思是它不保证ip数据包能成功的到达目的地.ip仅提供最好的传输服务.任何要求的可靠性必须由上层来提供(如tcp) 子网的划分缩小了internet路由表的规模,因为许多网络经常可以通过单个表目就可以访问了. 接口网络的有关信息通过ifcongif和netstat命令可以获得,包括接口的ip地址.子网掩码.广播地址.以及mtu等

tcp/ip 协议学习笔记   章一

一.tcp/ip包含: tcp/ip协议集包含四层:链路层.网络层.传输层.应用层 二.协议举例: 应用层: http.telnet.ssh ....传输层:TCP.UDP 网络层 :IP,ICMP,IGMP 链路层:ARP ,RARP 注:不是所有的程序都有这四层.有些基于IP,但是非tcp and 非UDP  eg:ping,某一些动态路由协议 三:IP地址分类 略 四:DNS 略 五:封装 数据封装是由tcp/ip协议栈完成的.不同的系统和主机,要遵行tcp/ip协议的标准 ,才能相互通信

TCP/IP协议学习(四) 基于C# Socket的Web服务器---静态资源处理

目录 1. C# Socket通讯 2. HTTP 解析引擎 3. 资源读取和返回 4. 服务器测试和代码下载 Web服务器是Web资源的宿主,它需要处理用户端浏览器的请求,并指定对应的Web资源返回给用户,这些资源不仅包括HTML文件,JS脚本,JPG图片等,还包括由软件生成的动态内容.为了满足上述需求,一个完整的Web服务器工作流程: 1) 服务器获得浏览器通过TCP/IP连接向服务器发送的http请求数据包. 2) HTTP请求经过Web服务器的HTTP解析引擎分析得出请求方法.资源地址等

【精】TCP/IP协议简介(一) 之 TCP/IP简介

一.TCP/IP 背景和介绍 上世纪 70 年代,随着计算机技术的发展,计算机使用者意识到:要想发挥计算机更大的作用,就要将世界各地的计算机连接起来.但是简单的连接是远远不够的,因为计算机之间无法沟通.因此设计一种通用的"语言"来交流是必要可少的,这时 TCP/IP 协议就应运而生了.本文地址:http://blog.csdn.net/sunansheng/article/details/52054632 TCP/IP(Transmission Control Protocol/Int

【精】TCP/IP协议简介(四) 之 传输层UDP&TCP

传输层:UDP 协议 一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP 数据报首部就标明了这两台主机的 IP 地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地讲,通信双方不是主机,而是主机中的进程. 主机中常常有多个应用进程同时在与外部通信(比如你的浏览器和 QQ 在同时运行),下图中,A 主机的 AP1 进程在于 B 主机的 AP3 进程通信,同时主机 A 的 AP2 进程也在与 B 主机的 AP4 进程通信. 两个主机的传

TCP/IP协议第一卷第二章

环回接口: 127全网段均被作为环回地址. 传给广播地址或多播地址的数据报复制一份给环回接口,然后传送到以太网上.这是因为广播传送和多播传送的定义包含自己本身. 任何传给该主机IP地址的数据均送到环回接口. 局域网通讯靠硬件地址并非逻辑地址.要查看是否在本机有该机器的ARP逻辑地址到硬件地址的映射,如果没有就会自动发ARP包进行解析,等回报回来后就会根据回报内容更新ARP表,才会发送包去往目的地. MTU和路径MTU 以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492

TCP/IP协议之三次握手、四次断开详解

TCP三次握手详细介绍 1.TCP/IP协议简单介绍: TCP/IP是一个协议族,通常分不同层次进行工作,每个层次负责不同的通信功能.包含以下四个层次: 应用层:(http.telnet.Email.dns等协议) 传输层:(tcp和udp) 网络层:(ip.icmp.rarp.bootp) 链路层:(设备驱动程序及接口卡) 1).链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡.它们一起处理与电缆(或其他任何传输媒介)的物理接口细节. 2).网

【Linux网络基础】TCP/IP协议簇的详细介绍(三次握手四次断开,11种状态)

一.TCP/IP协议簇(DoD参考模型) 用于简化OSI层次,以及相关的标准. 传输控制协议(tcp/ip)簇是相关国防部DoD所创建的,主要用来确保数据的完整性以及在毁灭性战争中维持通信 是由一组不同功能的协议组合在一起构成的协议簇 利用一组协议完成OSI所实现的功能 1. TCP/IP 协议簇中的相关协议 TCP/IP协议簇--应用层: TCP/IP协议簇--主机到主机层: TCP与UDP对比: TCP相关报文结构: 源端口:即本地发起连接的端口 目标端口:即要访问的服务的端口 序列号:因为

重学TCP/IP协议和三次握手四次挥手

计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的.计算机网络体系结构的抽象概念较多,在学习时要多思考.这些概念对后面的学习很有帮助. 网络协议是什么? 在计算机网络要做到有条不紊地交换数据,就必须遵守一些事先约定好的规则,比如交换数据的格式.是否需要发送一个应答信息.这些规则被称为网络协议. 为什么要对网络协议分层? 简化问题难度和复杂度.由于各层之间独立,我们可以分割大问题为小问题. 灵活性好.当其中一层的技术变化时,只要层间接口关系保持不变,其他层不受影响. 易于实现