《计算机网络22讲》由会员分享,可在线阅读,更多相关《计算机网络22讲(52页珍藏版)》请在金锄头文库上搜索。
1、15.6.2 5.6.2 超时重传时间的选择超时重传时间的选择重传机制是 TCP 中最重要和最复杂的问题之一。 TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要 计时器设置的重传时间到但还没有收到确认,就要重传这一报文 段。2往返时延的方差很大往返时延的方差很大由于 TCP 的下层是一个互联网环境,IP 数据报所选择的路由变化 很大。因而运输层的往返时间的方差也很大。时间数据链路层运输层T1T2T3往返时间的 概率分布3加权平均往返时间加权平均往返时间TCP 保留了 RTT 的一个加权平均往返时间 RTTS(这又称为平滑 的往返时间)。 第一次测量到 RTT 样本时,RTTS 值就
2、取为所测量到的 RTT 样 本值。以后每测量到一个新的 RTT 样本,就按下式重新计算一次 RTTS:新的 RTTS (1 ) (旧的 RTTS) (新的 RTT 样本) (5-4)式中,0 1。若 很接近于零,表示 RTT 值更新较慢。若 选择 接近于 1,则表示 RTT 值更新较快。 RFC 2988 推荐的 值为 1/8,即 0.125。 4超时重传时间超时重传时间 RTO RTO (RetransmissionTime-Out)(RetransmissionTime-Out)RTO 应略大于上面得出的加权平均往返时间 RTTS。 RFC 2988 建议使用下式计算 RTO: RTO R
3、TTS + 4 RTTD (5-5)RTTD 是 RTT 的偏差的加权平均值。RFC 2988 建议这样计算 RTTD。第一次测量时,RTTD 值取为测 量到的 RTT 样本值的一半。在以后的测量中,则使用下式计算加 权平均的 RTTD: 新的 RTTD = (1 ) (旧的RTTD) + RTTS 新的 RTT 样本 (5-6) 是个小于 1 的系数,其推荐值是 1/4,即 0.25。5往返时间 RTT?往返时间的测量相当复杂往返时间的测量相当复杂 TCP 报文段 1 没有收到确认。重传(即报文段 2)后,收到了确认 报文段 ACK。 如何判定此确认报文段是对原来的报文段 1 的确认,还是对
4、重传的 报文段 2 的确认? 发送一个 TCP 报文段超时重传 TCP 报文段收到 ACK时间12往返时间 RTT?是对哪一个报文段 的确认?6Karn Karn 算法算法 在计算平均往返时间 RTT 时,只要报文段重传了,就不采用其往 返时间样本。 这样得出的加权平均平均往返时间 RTTS 和超时重传时间 RTO 就较准确。 7报文段每重传一次,就把 RTO 增大一些:新的 RTO (旧的 RTO) 系数 的典型值是 2 。当不再发生报文段的重传时,才根据报文段的往返时延更新平均往返时 延 RTT 和超时重传时间 RTO 的数值。实践证明,这种策略较为合理。 修正的修正的 Karn Karn
5、 算法算法 85.8 TCP5.8 TCP的拥塞控制的拥塞控制 5.8.1 5.8.1 拥塞控制的一般原理拥塞控制的一般原理 在某段时间,若对网络中某资源的需求超过了该资源所能提供的 可用部分,网络的性能就要变坏产生拥塞(congestion)。出现资源拥塞的条件:对资源需求的总和 可用资源 (5-7) 若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏, 整个网络的吞吐量将随输入负荷的增大而下降。 9拥塞控制与流量控制的关系拥塞控制与流量控制的关系 拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。 拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与 降低网络
6、传输性能有关的所有因素。 流量控制往往指在给定的发送端和接收端之间的点对点通信量的控制。 流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接 收。 10拥塞控制所起的作用拥塞控制所起的作用 提供的负载吞吐量理想的拥塞控制实际的拥塞控制0死锁(吞吐量 = 0)无拥塞控制拥塞轻度 拥塞11拥塞控制的一般原理拥塞控制的一般原理 拥塞控制是很难设计的,因为它是一个动态的(而不是静态的)问 题。 当前网络正朝着高速化的方向发展,这很容易出现缓存不够大而造 成分组的丢失。但分组的丢失是网络发生拥塞的征兆而不是原因。 在许多情况下,甚至正是拥塞控制本身成为引起网络性能恶化甚至 发生死锁的原因
7、。这点应特别引起重视。 12开环控制和闭环控制开环控制和闭环控制 开环控制方法就是在设计网络时事先将有关发生拥塞的因素考虑周 到,力求网络在工作时不产生拥塞。 闭环控制是基于反馈环路的概念。属于闭环控制的有以下几种措施 : 监测网络系统以便检测到拥塞在何时、何处发生。 将拥塞发生的信息传送到可采取行动的地方。 调整网络系统的运行以解决出现的问题。135.8.2 5.8.2 几种拥塞控制方法几种拥塞控制方法 1. 1. 慢开始和拥塞避免慢开始和拥塞避免发送方维持一个叫做拥塞窗口 cwnd (congestion window)的状态变 量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。
8、发送方让自己的发送窗口等于拥塞窗口。如再考虑到接收方的接收 能力,则发送窗口还可能小于拥塞窗口。 发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口 就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞 ,拥塞窗口就减小一些,以减少注入到网络中的分组数。 14慢开始算法的原理慢开始算法的原理 在主机刚刚开始发送报文段时可先设置拥塞窗口 cwnd = 1,即设 置为一个最大报文段 MSS 的数值。 在每收到一个对新的报文段的确认后,将拥塞窗口加 1,即增加 一个 MSS 的数值。 用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注 入到网络的速率更加合理。 15设置慢开始
9、门限状态变量设置慢开始门限状态变量ssthreshssthresh慢开始门限 ssthresh 的用法如下: 当 cwnd ssthresh 时,停止使用慢开始算法而改用拥塞避免算 法。 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避 免算法。 拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢地增大,即每经过 一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加 倍,使拥塞窗口 cwnd 按线性规律缓慢增长。16当网络出现拥塞时当网络出现拥塞时无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现 拥塞(其根据就是没有按时收到确认),就要把慢开始
10、门限 ssthresh 设置为出现拥塞时的发送方窗口值的一半(但不能小于2 )。 然后把拥塞窗口 cwnd 重新设置为 1,执行慢开始算法。 这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发 生拥塞的路由器有足够时间把队列中积压的分组处理完毕。 172216慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节 而使用报文段。慢开始门限的初始值设置为 16 个报文段, 即 ssthresh = 16。“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh
11、 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免 “加法增大”拥塞避免 “加法增大”传输轮次18慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值 。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数 值。2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免 “加法增大”拥塞避免 “加法增大”传输轮次19慢开始和拥塞避免算法的实现
12、举例慢开始和拥塞避免算法的实现举例 在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0 。 2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始拥塞避免 “加法增大”拥塞避免 “加法增大”传输轮次20慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 发送端每收到一个确认 ,就把 cwnd 加 1。于是发送端可以接着发送 M1 和 M2 两个报文段。 2216“乘法减小”24681012141618200048122024拥塞窗口 cw
13、nd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免 “加法增大”拥塞避免 “加法增大”传输轮次21慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 接收端共发回两个确认。发送端每收到一个对新报文段的确认,就把发送端 的 cwnd 加 1。现在 cwnd 从 2 增大到 4,并可接着发送后面的 4 个报文段 。 2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免 “加法增大”拥塞避免 “加法增大”
14、传输轮次22慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 发送端每收到一个对新报文段的确认,就把发送端的拥塞窗口加 1,因此拥 塞窗口 cwnd 随着传输轮次按指数规律增长。 2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免 “加法增大”拥塞避免 “加法增大”传输轮次23慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时) ,就改为执行拥
15、塞避免算法,拥塞窗口按线性规律增长。 2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免 “加法增大”拥塞避免 “加法增大”传输轮次242216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免 “加法增大”拥塞避免 “加法增大”慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 假定拥塞窗口的数值增长到 24 时,网络出现超时,表明网络拥 塞了。 传输轮次252216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免 “加法增大”拥塞避免 “加法增大”慢开始和拥塞避免算法的实现举例慢开始和拥塞避免算法的实现举例 更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再 重新设置为 1,并执行慢开始算法。 传输轮次262216“乘法减小”24681012141618200048122024拥塞窗口 cwn