资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第五章 运输层,计算机网络(第五版),第1页,第 5 章,运输层,5.1 运输层协议概述,5.1.1 进程之间通信,Go,5.1.2 运输层两个主要协议,Go,5.1.3 运输层端口,Go,5.2 用户数据报协议 UDP,5.2.1 UDP 概述,Go,5.2.2 UDP 首部格式,Go,5.3 传输控制协议 TCP 概述,5.3.1 TCP 最主要特点,Go,5.3.2 TCP 连接,Go,第2页,第 5 章,运输层(续),5.4 可靠传输工作原理,5.4.1 停顿等候协议,Go,5.4.2 连续 ARQ 协议,Go,5.5 TCP 报文段首部格式,Go,5.6 TCP 可靠传输实现,5.6.1 以字节为单位滑动窗口,Go,5.6.2 超时重传时间选择,Go,5.6.3 选择确认 SACK,Go,5.7 TCP流量控制,5.7.1 利用滑动窗口实现流量控制,Go,5.7.2 必须考虑传输效率,Go,第3页,第 5 章,运输层(续),5.8 TCP 拥塞控制,5.8.1 拥塞控制普通原理,Go,5.8.2 几个拥塞控制方法,Go,5.8.3 随机早期检测 RED,Go,5.9 TCP 运输连接管理,5.9.1 TCP 连接建立,Go,5.9.2 TCP 连接释放,Go,5.9.3 TCP 有限状态机,Go,第4页,5.1.1 进程之间通信,从通信和信息处理角度看,,运输层向它上面应用层提供通信服务,,它属于面向通信部分最高层,同时也是用户功效中最低层,当网络边缘部分中两个主机使用网络关键部分功效进行端到端通信时,,只有,位于网络边缘部分,主机协议栈才有运输层,,而网络关键部分中,路由器在转发分组时都只用到下三层功效,第5页,运输层为相互通信应用进程提供了逻辑通信,主机 A,主机 B,应用进程,应用进程,5,4,3,2,1,运输层提供给用进程,间,逻辑,通信,IP 层,AP,1,AP,2,AP,4,端口,端口,5,4,3,2,1,AP,3,路由器 1,路由器 2,AP,1,LAN,2,WAN,AP,2,AP,3,AP,4,LAN,1,IP 协议作用范围,运输层协议 TCP 和 UDP 作用范围,第6页,运输层协议和网络层协议主要区分,应用进程,应用进程,IP 协议作用范围,(提供主机之间逻辑通信),TCP 和 UDP 协议作用范围,(提供进程之间逻辑通信),因 特 网,Back,第7页,TCP/IP 运输层有两个不一样协议:,(1)用户数据报协议,UDP,(User Datagram Protocol),(2)传输控制协议,TCP,(Transmission Control Protocol),两个对等运输实体在通信时传送数据单位叫作,运输协议数据单元,TPDU(Transport Protocol Data Unit),TCP 传送数据单位协议是,TCP 报文段,(segment),UDP 传送数据单位协议是,UDP 报文,或,用户数据报,5.1.2 运输层两个主要协议,第8页,TCP/IP 体系中运输层协议,TCP,UDP,IP,应用层,与各种网络接口,运输层,运输层 UDP 用户数据报与网际层IP数据报有很大区分。IP 数据报要经过互连网中许多路由器存放转发,但 UDP 用户数据报是在运输层端到端抽象逻辑信道中传送,TCP 则提供面向连接服务。,但不提供广播或多播服务,。因为 TCP 要提供可靠、面向连接运输服务,所以不可防止地增加了许多开销。这不但使协议数据单元首部增大很多,还要占用许多处理机资源,第9页,还要强调两点,运输层,UDP,用户数据报与网际层IP数据报有很大区分。IP,数据报要经过互连网中许多路由器存放转发,但,UDP,用户数据报是在运输层端到端抽象逻辑信道中传送,TCP,报文段是在运输层抽象端到端逻辑信道中传送,这种信道是可靠全双工信道。但这么信道却不知道终究经过了哪些路由器,而这些路由器也根本不知道上面运输层是否建立了 TCP 连接,Back,第10页,5.1.3 运输层端口,运行在计算机中进程是用,进程标识符,来标志。,运行在应用层各种应用进程却不应该让计算机操作系统指派它进程标识符。这是因为在因特网上使用计算机操作系统种类很多,而不一样操作系统又使用,不一样格式进程标识符,为了使运行不一样操作系统计算机应用进程能够相互通信,就,必须用统一方法,对 TCP/IP 体系应用进程进行标志,第11页,需要处理问题,因为进程创建和撤消都是动态,发送方几乎无法识别对方机器上进程,有时我们会变更接收报文进程,但并不需要通知全部发送方,我们往往需要利用目标,主机提供功效,来识别终点,而,不需要知道,实现这个功效进程,第12页,端口号(protocol port number),处理这个问题方法:在运输层使用,协议端口号,(protocol port number),或通常简称为,端口,(port),即使通信终点是应用进程,但我们能够把端口想象是通信终点,因为我们,只要把要传送报文交到目标主机某一个适当目标端口,剩下工作,(即最终交付目标进程),就由 TCP 来完成,注意:,在协议栈层间抽象协议端口是,软件端口,路由器或交换机上端口是,硬件端口,第13页,TCP/IP 端口,端口用一个,16 位,端口号进行标志,端口号只含有,当地,意义,三类端口,熟知端口:,数值普通为 01023,登记端口号,:数值为102449151,为没有熟知端口号应用程序使用。使用这个范围端口号必须在 IANA 登记,以预防重复,客户端口号/短暂端口号,:数值为4915265535,留给客户进程选择暂时使用,Back,第14页,5.2.1 UDP 概述,UDP 主要特点,UDP 是,无连接,,即发送数据之前不需要建立连接,UDP 使,用尽最大努力交付,,即不确保可靠交付,同时也不使用拥塞控制,UDP 是,面向报文,UDP 没有,拥塞控制,,很适合多媒体通信要求,UDP 支持一对一、一对多、多对一和多对多交互通信,UDP,首部开销小,,只有,8 个字节,第15页,面向报文 UDP,发送方 UDP 对应用程序交下来报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来报文,,既不合并,也不拆分,,但保留这些报文边界,应用层交给 UDP 多长报文,UDP 就照样发送,即,一次发送一个报文,接收方 UDP 对 IP 层交上来 UDP 用户数据报,在去除首部后就原封不动地交付上层应用进程,,一次交付一个完整报文,应用程序,必须选择,适当大小报文,第16页,UDP 是面向报文,IP 数据报数据部分,IP 首部,IP 层,UDP 首部,UDP 用户数据报数据部分,运输层,应用层报文,应用层,Back,第17页,5.2.2 UDP 首部格式,伪首部,源端口,目端口,长 度,检验和,数 据,首 部,IP 数据报,12,2,2,2,2,字节,发送在前,数 据,首 部,UDP 用户数据报,第18页,UDP 基于端口分用,IP 层,UDP 数据报抵达,端口 2,端口 3,端口 1,UDP 分用,第19页,UDP 校验和伪首部,UDP长度,源 IP 地址,目 IP 地址,0,17,字节,4,4,1,1,2,伪首部,源端口,目端口,长 度,检验和,数 据,首 部,IP 数据报,12,2,2,2,2,字节,发送在前,数 据,首 部,UDP 用户数据报,第20页,计算 UDP 检验和例子,153.19.8.104,171.3.14.11,12 字节,伪首部,8 字节,UDP 首部,7 字节,数据,填充,全 0 17 15,1087 13,15 全 0,数据 数据 数据 数据,数据 数据 数据 全 0,10011001 00010011 153.19,00001000 01101000 8.104,10101011 00000011 171.3,00001110 00001011 14.11,00000000 00010001 0 和 17,00000000 00001111 15,00000100 00111111 1087,00000000 00001101 13,00000000 00001111 15,00000000 00000000,0(检验和),01010100 01000101 数据,01010011 01010100 数据,01001001 01001110 数据,01000111,00000000,数据和 0(填充),10010110 11101101 求和得出结果,01101001 00010010 检验和,按二进制反码运算求和,将得出结果求反码,Back,第21页,5.3.1 TCP 最主要特点,TCP 是,面向连接,运输层协议,每一条 TCP 连接,只能有两个端点,(endpoint),每一条 TCP 连接只能是,点对点,(一对一),TCP 提供,可靠交付,服务,TCP 提供,全双工,通信,面向字节流,第22页,TCP 面向流概念,TCP,7,6,8,H,发送 TCP 报文段,发送方,接收方,把字节写入,发送缓存,从接收缓存,读取字节,应用进程,应用进程,1,2,3,0,18,17,16,15,14,19,20,21,4,5,13,12,11,H,10,9,H,加上 TCP 首部,组成 TCP 报文段,TCP,字节流,字节流,H,表示 TCP 报文段首部,x,表示序号为 x 数据字节,TCP 连接,Back,第23页,5.3.2 TCP 连接,TCP 把连接作为最基本抽象,每一条 TCP 连接有两个端点,TCP 连接端点不是主机,不是主机IP 地址,不是应用进程,也不是运输层协议端口。TCP 连接端点叫做,套接字,(socket)或,插口,端口号拼接到(contatenated with)IP 地址,即组成了,套接字,第24页,套接字(socket),套接字 socket=(IP地址:端口号)(5-1),每一条,TCP,连接唯一地被通信两端两个端点(即两个套接字)所确定,。即:,TCP 连接:=socket,1,socket,2,=(IP,1,:port,1,),(IP,2,:port,2,)(5-2),Back,第25页,5.4.1 停顿等候协议(停-等协议),(a)无差错情况,A,发送 M,1,确认 M,1,B,发送 M,2,发送 M,3,确认 M,2,确认 M,3,t,t,A,发送 M,1,B,超时重传 M,1,发送 M,2,确认 M,1,丢弃有差错,报文,(b)超时重传,t,t,第26页,请注意,在发送完一个分组后,必须,暂时保留,已发送分组副本,分组,和,确认分组,都必须进行,编号,超时计时器,重传时间,应该比数据在分组传输,平均往返时间更长一些,第27页,确认丢失和确认迟到,A,发送 M,1,B,超时,重传 M,1,发送 M,2,丢弃重复 M,1,重传确认 M,1,(a)确认丢失,确认 M,1,t,t,A,发送 M,1,B,超时,重传 M,1,发送 M,2,丢弃重复 M,1,重传确认M,1,(b)确认迟到,确认 M,1,收下迟到,确认,但什么也不做,t,t,第28页,信道利用率 U,停顿等候协议优点是简单,但缺点是信道利用率太低,T,D,RTT,A,T,D,+RTT+,T,A,B,分组,确认,t,t,分组,确认,(5-3),第29页,流水线传输,发送方可,连续发送,多个分组,无须每发完一个分组就停顿下来等候对方确实认,因为信道上一直有数据不间断地传送,这种传输方式可取得很高信道利用率,B,分组,t,t,A,ACK,Back,第30页,5.4.2 连续 ARQ 协议,1,2,3,4,5,6,7,8,9,10,11,12,(a)发送方维持发送窗口(发送窗口是 5),发送窗口,(b)收到一个确认后发送窗口向前滑动,向前,1,2,3,4,5,6,7,8,9,10,11,12,发送窗口,第31页,累积确认,接收方普通采取,累积确认,方式。即无须对收到分组逐一发送确认,而是对按序抵达最终一个分组发送确认,表示:,到这个分组为止全部分组都已正确收到了,优点是:轻易实现,即使确认丢失也无须重传确认,缺点是:不能向发送方反应出接收方已经正确收到全部分组信息,第32页,Go-back-N(回退 N),假如发送方发送了前 5 个分组,而中间第 3 个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组下落,而只好把后面三个分组都再重传一次,这就叫做,Go-back-N(回退 N),,表示需要再退回来重传已发送过,N,个分组,可见当通信线路质量不好时,连续 ARQ 协议会带来负面影响,第33页,TCP 可靠通信详细实现,TCP 连接每一端都必须设有两个窗口:,发送窗口,和,接收窗口,TCP 可靠传输机制用,字节序号,进行控制。TCP 全部确实认都是,基于序号,而不是基于报文段,TCP 两端四个窗口经常处于,动态改变,之中,TCP连接往返时间 RTT 也,不是固定不变,。需要使用特定算法估算较为合理重传时间,Back,第34页,5.5 TCP 报文段首部格式,TCP,首部,20 字节,固定首部,目 端 口,数据,偏移,检 验 和,选 项(长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,32 位,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位 0 8 16 24 31,填 充,TCP 数据部分,TCP 首部,TCP 报文段,IP 数据部分,IP 首部,发送方向,第35页,TCP首部各字段含义,TCP,首部,20,字节,固定,首部,目 端 口,数据,偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F,I,N,S,Y,N,R,S,T,P,S,H,A,C,K,U,R,G,位 0 8 16 24 31,填 充,第36页,选项字段,TCP最初只要求了一个选项,即,最大报文段长度MSS,(Maximum Segment Size),。MSS告诉对方TCP:,我缓存所能接收报文段数据字段最大长度是MSS个字节,。MSS 是指数据字段最大长度(数据字段加上 TCP 首部才等于整个 TCP 报文段),窗口扩大选项,:占3字节,其中有一个字节表示移位值 S。新窗口值等于TCP 首部中窗口位数增大到(16+S),相当于把窗口值向左移动 S 位后取得实际窗口大小,时间戳选项,:占10字节,其中最主要域是,时间戳值字段,(4 字节)和,时间戳回送回答字段,(4 字节),选择确认选项,:在后面5.6.3节介绍,Back,第37页,5.6.1 以字节为单位滑动窗口,前移,不允许发送,已发送并,收到确认,A 发送窗口=20,允许发送序号,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,B 期望,收到序号,窗口前沿,窗口后沿,前移,收缩,依据 B 给出窗口值,A 结构出自己发送窗口,TCP 标准强烈不赞成发送窗口前沿向后收缩,第38页,发送端 A 和接收端 B 窗口,不允许发送,已发送并,收到确认,A,发送窗口位置不变,允许发送但还未发送,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,已发送但未收到确认,56,P,1,P,2,P,3,不允许接收,已发送确认,并交付主机,B,接收窗口,允许接收,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,未按序收到,可用窗口,发送了11个字节数据,P,3,P,1,=A 发送窗口(又称为,通知窗口,),P,2,P,1,=已发送但还未收到确认字节数,P,3,P,2,=允许发送但还未发送字节数(又称为,可用窗口,),第39页,A 和 B 窗口向前滑动,允许发送但还未发送,A 发送窗口向前滑动,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,已发送并收到确认,不允许,发送,已发送但未收到确认,56,P,1,P,2,P,3,允许接收,B 接收窗口向前滑动,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,已发送确认,并交付主机,不允许,接收,56,先存下,等候缺乏数据抵达,未按序收到,第40页,A 继续发送直到窗口满,不允许,发送,已发送并收到确认,A 发送窗口已满,有效窗口为零,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,已发送但未收到确认,56,P,1,P,2,P,3,A窗口已满,但还没有再收到B确认,必须停止发送,此时P2和P3重叠,如果长时间内均未收到确认,发生超时,A要重传这些数据,第41页,发送缓存,最终被确认,字节,发送应用程序,发送缓存,最终发送,字节,发送窗口,已发送,TCP,序号增大,发送缓存用来暂时存放:,发送应用程序传送给发送方 TCP 准备发送数据,TCP 已发送出但还未收到确认数据,最终写入,字节,第42页,接收缓存,接收应用程序,已收到,接收窗口,TCP,接收缓存,下一个读,取字节,序号增大,下一个期望收到,字节(确认号),接收缓存用来暂时存放:,按序抵达、但还未被接收应用程序读取数据,不按序抵达数据,第43页,需要强调三点,A 发送窗口并不总是和 B 接收窗口一样大(因为有一定时间滞后),TCP 标准没有要求对不按序抵达数据应怎样处理。通常是先暂时存放在接收窗口中,等到字节流中所缺乏字节收到后,再按序交付上层应用进程,TCP 要求接收方必须有,累积确认,功效,这么能够减小传输开销,Back,第44页,5.6.2 超时重传时间选择,因为 TCP 下层是一个互联网环境,IP 数据报所选择路由改变很大,因而运输层,往返时延方差也很大,时间,数据链路层,运输层,T,1,T,2,T,3,往返时间,概率分布,第45页,TCP 保留了 RTT 一个加权平均往返时间 RTT,S,(又称为平滑往返时间),第一次测量到 RTT 样本时,RTT,S,值就取为所测量到 RTT 样本值。以后每测量到一个新 RTT 样本,就按下式重新计算一次 RTT,S,:,新 RTT,S,(1,),(旧RTT,S,),(新RTT样本)(5-4),式中,0,1。若,很靠近于零,表示 RTT 值更新较慢。若选择,靠近于1,则表示RTT值更新较快,RFC 2988 推荐,值为 1/8,即 0.125,加权平均往返时间,第46页,RTO 应略大于上面得出加权平均往返时间 RTT,S,RFC 2988 提议使用下式计算 RTO:,RTO,RTT,S,+4,RTT,D,(5-5),RTT,D,是 RTT 偏差加权平均值,RFC 2988 提议这么计算 RTT,D,。第一次测量时,RTT,D,值取为测量到 RTT 样本值二分之一。在以后测量中,则使用下式计算加权平均 RTT,D,:,新RTT,D,=(1,),(旧RTT,D,)+,RTT,S,新RTT样本,(5-6),是个小于 1 系数,其推荐值是 1/4,即 0.25,超时重传时间 RTO,(RetransmissionTime-Out),第47页,往返时间 RTT?,往返时间测量相当复杂,TCP 在时间1发送报文段,但没有收到确认。在时间2重传报文段后,收到了确认报文段 ACK,怎样判定此确认报文段是对原来报文段 1 确实认,还是对重传报文段 2 确实认?,发送一个,TCP 报文段,超时重传,TCP 报文段,收到 ACK,时间,1,2,往返时间 RTT?,是对哪一个报,文段确认?,第48页,Karn 算法,在计算平均往返时间 RTT 时,只要报文段重传了,就不采取其往返时间样本,修正 Karn 算法,报文段每重传一次,就把 RTO 增大一些:,新 RTO,(旧 RTO),系数,经典值是,2,当不再发生报文段重传时,才依据报文段往返时延更新平均往返时延 RTT 和超时重传时间 RTO 数值,Back,第49页,5.6.3 选择确认SACK,(Selective ACK),接收方收到了和前面字节流不连续两个字节块,假如这些字节序号都在接收窗口之内,那么接收方就先收下这些数据,但要把这些信息准确地告诉发送方,使发送方不要再重复发送这些已收到数据,第50页,接收到字节流序号不连续,1 1000 1501 3000 3501 4500,确认号=1001,L,1,=1501,L,2,=3501,R,1,=3001,R,1,=4501,连续字节流,第一个字节块,第二个字节块,和前后字节不连续每一个字节块都有,左边界,和,右边界,,但TCP首部没有哪个字段能提供这些边界信息,要使用选择确认,,在建立 TCP 连接时,,就要在 TCP 首部选项中加上“,允许 SACK,”选项,而且原来首部中“确认号字段”使用方法依然不变,但在,首部中都增加SACK选项,在选项中最多只能指明,4 个字节块边界信息,Back,第51页,5.7.1 利用滑动窗口实现流量控制,流量控制,(flow control)就是让发送方发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞,在连接建立时,B通知A接收窗口 rwnd=400(字节),seq=1,DATA,seq=201,DATA,seq=401,DATA,seq=301,DATA,seq=101,DATA,seq=201,DATA,seq=501,DATA,ACK=1,ack=201,rwnd=300,ACK=1,ack=601,rwnd=0,ACK=1,ack=501,rwnd,=100,A,B,允许 A 发送序号 201 至 500 共 300 字节,A 发送了序号 101 至 200,还能发送 200 字节,A 发送了序号 301 至 400,还能再发送 100 字节新数据,A 发送了序号 1 至 100,还能发送 300 字节,A 发送了序号 401 至 500,不能再发送新数据了,A 超时重传旧数据,但不能发送新数据,允许 A 发送序号 501 至 600 共 100 字节,A 发送了序号 501 至 600,不能再发送了,不允许 A 再发送(到序号 600 为止数据都收到了),丢失!,第52页,连续计时器,(persistence timer),TCP 为每一个连接设有一个,连续计时器,只要 TCP 连接一方收到对方,零窗口,通知,就开启连续计时器,若连续计时器设置时间到期,就发送一个,零窗口探测报文段,(仅携带 1 字节数据),而对方就在确认这个探测报文段时给出了现在窗口值,若窗口依然是零,则收到这个报文段一方就重新设置连续计时器,若窗口不是零,则死锁僵局就能够打破了,Back,第53页,5.7.2 必须考虑传输效率,能够用不一样机制来控制 TCP 报文段发送时机,第一个机制是 TCP 维持一个变量,它等于最大报文段长度 MSS。只要缓存中存放数据到达 MSS 字节时,就组装成一个 TCP 报文段发送出去,第二种机制是由发送方应用进程指明要求发送报文段,即 TCP 支持推送(push)操作,第三种机制是发送方一个计时器期限到了,这时就把当前已经有缓存数据装入报文段(但长度不能超出 MSS)发送出去,Nagle算法和Clark算法,Back,第54页,5.8.1 拥塞控制普通原理,在某段时间,若对网络中某资源需求超出了该资源所能提供可用部分,网络性能就要变坏产生,拥塞,(congestion),出现资源拥塞条件,对资源需求总和 可用资源 (5-7),若网络中有许多资源同时产生拥塞,网络性能就要显著变坏,整个网络吞吐量将随输入负荷增大而下降,第55页,拥塞控制与流量控制关系,拥塞控制:,预防过多数据注入到网络中,使得网络中过多路由器和链路不产生过载,拥塞控制所要做都有一个前提,就是,网络能够承受,现有网络负荷,拥塞控制是一个,全局性,过程,包括到全部主机、全部路由器,以及与降低网络传输性能相关全部原因,流量控制:,往往指在给定发送端和接收端之间点对点通信量控制,流量控制所要做就是,抑制发送端发送数据速率,,方便使,接收端来得及接收,第56页,拥塞控制所起作用,提供负载,吞吐量,理想拥塞控制,实际拥塞控制,0,死锁(吞吐量=0),无拥塞控制,拥塞,轻度,拥塞,负载饱和点,第57页,开环控制和闭环控制,开环控制,方法就是在设计网络时事先将相关发生拥塞原因考虑周到,力争网络在工作时不产生拥塞,闭环控制,是基于反馈环路概念,有以下几个步骤,监测,网络系统方便检测到拥塞在何时、何处发生,将拥塞发生信息,传送,到可采取行动地方,调整,网络系统运行以处理出现问题,Back,第58页,5.8.2 几个拥塞控制方法(1),1.慢开始和拥塞防止,发送方维持一个叫做,拥塞窗口 cwnd,(congestion window)状态变量,拥塞,窗口大小,取决于网络拥塞程度,而且动态地在改变,发送方让自己发送窗口等于拥塞窗口,如再考虑到接收方接收能力,则发送窗口还可能小于拥塞窗口,发送方控制拥塞窗口标准是:只要网络没有出现拥塞,拥塞窗口就再增大一些,方便把更多分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以降低注入到网络中分组数,第59页,慢开始算法原理,在主机刚才开始发送报文段时可先设置拥塞窗口 cwnd=1,即设置为一个最大报文段MSS数值,在每收到一个对新报文段确实认后,将拥塞窗口加 1,即增加一个MSS数值,用这么方法逐步增大发送端拥塞窗口cwnd,能够使分组注入到网络速率愈加合理,第60页,慢开始算法举例,发送方,接收方,发送 M,1,确认 M,1,发送 M,2,M,3,确认 M,2,M,3,发送 M,4,M,7,确认 M,4,M,7,cwnd=1,cwnd=2,cwnd=4,发送 M,8,M,15,t,t,轮次 1,轮次 2,轮次 3,cwnd=8,发送方每收到一个对新报文段确实认(重传不算在内)就使 cwnd 加 1,第61页,设置慢开始门限状态变量ssthresh,慢开始门限 ssthresh 使用方法,当 cwnd ssthresh 时,停顿使用慢开始算法而改用,拥塞防止,算法,当 cwnd=ssthresh 时,既可使用慢开始算法,也可使用拥塞防止算法,拥塞防止算法思绪:让拥塞窗口 cwnd 迟缓地增大,即每经过一个往返时间 RTT 就把发送方,拥塞窗口 cwnd 加 1,,而不是加倍,使拥塞窗口 cwnd 按线性规律迟缓增加,第62页,当网络出现拥塞时,不论在慢开始阶段还是在拥塞防止阶段,只要发送方判断网络出现拥塞(其依据就是没有按时收到确认),就要把,慢开始门限 ssthresh 设置为出现拥塞时发送方窗口值二分之一(但不能小于2),然后把,拥塞窗口 cwnd 重新设置为 1,,执行慢开始算法,这么做目标就是要快速降低主机发送到网络中分组数,使得发生拥塞路由器有足够时间把队列中积压分组处理完成,第63页,当 TCP 连接进行初始化时,将拥塞窗口置为,1,慢开始门限初始值设置为,16 个报文段,,即ssthresh=16,图中窗口单位为举例方便不使用字节而使用,报文段数,发送端发送窗口不能超出,拥塞窗口 cwnd,和,接收端窗口 rwnd,中,最小值,。本例假定接收端窗口足够大,所以现在发送窗口数值等于拥塞窗口数值,在执行慢开始算法时,拥塞窗口 cwnd 初始值,为 1,,发送第一个报文段 M,0,发送端每收到一个确认,就把,cwnd 加 1,。于是发送端能够接着发送 M,1,和 M,2,两个报文段,接收端共发回两个确认。发送端每收到一个对新报文段确实认,就把发送端,cwnd 加 1,。现在 cwnd 从,2,增大到,4,,并可接着发送后面,4,个报文段,发送端每收到一个对新报文段确实认,就把发送端拥塞窗口加1,所以拥塞窗口cwnd 随着传输轮次按指数规律增加,当拥塞窗口,cwnd,增加到,慢开始门限值ssthresh,时(即当cwnd=,16,时),就改为执行,拥塞防止,算法,拥塞窗口开始,按线性规律,增加,假定拥塞窗口数值增加到,24,时,网络出现超时,表明网络拥塞了,更新后 ssthresh 值变为,12,(即发送窗口数值 24 二分之一),拥塞窗口再重新设置为,1,,并,重新执行慢开始,算法,当cwnd=,12,时又改为执行拥塞防止算法,拥塞窗口按按线性规律增加,每经过一个往返时延就增加,1,个MSS大小,ssthresh初始值,慢开始和拥塞防止算法实现举例,新ssthresh值,慢开始,22,16,“,乘法减小,”,2,4,6,8,10,12,14,16,18,20,0,0,4,8,12,20,24,拥塞窗口 cwnd,网络拥塞,指数规律增加,慢开始,慢开始,拥塞防止,“,加法增大,”,拥塞防止,“,加法增大,”,线性规律增加,第64页,乘法减小,(multiplicative decrease),乘法减小,:是指不论在慢开始阶段还是拥塞防止阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值ssthresh设置为当前拥塞窗口值乘以 0.5,当网络频繁出现拥塞时,ssthresh值就下降得很快,以大大降低注入到网络中分组数,加法增大,:指执行拥塞防止算法后,在收到对全部报文段确实认后(即经过一个往返时间),就把拥塞窗口cwnd增加一个MSS大小,使拥塞窗口迟缓增大,以预防网络过早出现拥塞,第65页,5.8.2 几个拥塞控制方法(2),2.快重传和快恢复,快重传算法:,首先要求接收方每收到一个失序报文段后就,马上发出重复确认,,以让发送方及早知道有报文段没有抵达接收方,发送方只要一连收到,三个重复确认,就应该马上重传对方还未收到报文段,第66页,快重传算法举例,发送方,接收方,发送 M,1,确认 M,1,t,确认 M,2,发送 M,2,发送 M,3,发送 M,4,?,发送 M,5,发送 M,6,重复确认 M,2,马上重传 M,3,重复确认 M,2,重复确认 M,2,t,发送 M,7,收到三个连续对M,2,重复确认马上重传M,3,丢失,第67页,快恢复算法,当发送端收到连续三个重复确实认时,就执行“乘法减小”算法,把慢开始门限ssthresh减半。但接下去不执行慢开始算法,因为发送方现在认为网络很可能没有发生拥塞,所以现在不执行慢开始算法,即拥塞窗口 cwnd 现在,不设置为 1,,而是,设置为慢开始门限 ssthresh 减半后数值,,然后开始执行拥塞防止算法(“加法增大”),使拥塞窗口迟缓地线性增大,第68页,快恢复算法举例,新 ssthresh 值,24,2,4,6,8,10,12,14,16,18,20,22,0,0,4,8,12,16,20,传输轮次,拥塞窗口 cwnd,收到 3 个重复确,认执行快重传算法,慢开始,“乘法减小”,拥塞防止,“加法增大”,TCP Reno,版本,TCP Tahoe 版本,(已废弃不用),ssthresh 初始值,拥塞防止,“加法增大”,慢开始,快恢复,第69页,发送方发送窗口上限值应该取为接收方窗口 rwnd 和拥塞窗口 cwnd 这两个变量中较小一个,即,发送窗口上限值,MIN(rwnd,cwnd)(5-8),当 rwnd cwnd 时,是接收方接收能力限制发送窗口最大值,当 cwnd rwnd 时,则是网络拥塞限制发送窗口最大值,发送窗口上限值,Back,第70页,5.8.3 随机早期检测RED,(Random Early Detection),使路由器队列维持两个参数,即队列长度,最小门限 TH,min,和,最大门限 TH,max,RED 对每一个抵达数据报都先计算平均队列长度,L,AV,若平均队列长度,小于最小门限 TH,min,,则将新抵达数据报,放入队列,进行排队,若平均队列长度,超出最大门限 TH,max,,则将新抵达数据报,丢弃,若平均队列长度,在最小门限 TH,min,和最大门限TH,max,之间,,则按照某一,概率,p,将新抵达数据报,丢弃,第71页,RED 路由器队列门限划分,从队首,发送,最小门限 TH,min,最大门限 TH,min,分组,抵达,平均队列长度,L,av,排队,丢弃,以概率,p,丢弃,第72页,丢弃概率,p,与,TH,min,和,Th,max,关系,最小门限 TH,min,最大门限 TH,max,平均队列长度,L,av,分组丢弃概率,p,1.0,0,p,max,当,L,AV,TH,min,时,丢弃概率,p,=0,当,L,AV,TH,max,时,丢弃概率,p,=1,当 TH,min,L,AV,TH,max,时,0,p,1,如可按线性规律改变,从 0 变到,p,max,第73页,瞬时队列长度和平均队列长度区分,队列长度,时间,瞬时队列长度,平均队列长度,平均队列长度L,AV,(1-)(旧L,AV,)+(当前队列长度样本),(5-9),pp,temp,/(1-countp,temp,),(5-10),p,temp,p,max,(L,AV,-TH,min,)/(TH,max,-TH,min,),(5-11),Back,第74页,5-9 TCP 运输连接管理,1.运输连接三个阶段,三个阶段即:,连接建立,、,数据传送,和,连接释放,运输连接管理就是使运输连接建立和释放都能正常地进行,连接建立过程中要处理以下三个问题,要使每一方能够确知对方存在,要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等),能够对运输实体资源(如缓存大小,连接表中项目等)进行分配,Back,第75页,5.9.1 TCP 连接建立(1),SYN=1,seq=x,CLOSED,CLOSED,主动打开,被动打开,A,B,客户,服务器,A TCP 向 B 发出连接请求报文段,其首部中同时位,SYN=1,,并选择序号,seq=x,,表明传送数据时第一个数据字节序号是 x,三次握手建立TCP连接,第76页,5.9.1 TCP 连接建立(2),SYN=1,seq=x,CLOSED,CLOSED,主动打开,被动打开,A,B,客户,服务器,SYN=1,ACK=1,seq=y,ack=x,1,B TCP收到连接请求报文段后,如同意,则发回确认,B 在确认报文段中应使,SYN=1,,使,ACK=1,,其确认号,ack=x,1,,自己选择序号,seq=y,三次握手建立TCP连接,第77页,SYN=1,seq=x,ACK=1,seq=x+1,ack=y,1,CLOSED,CLOSED,主动打开,被动打开,A,B,客户,服务器,SYN=1,ACK=1,seq=y,ack=x,1,5.9.1 TCP 连接建立(3),A收到此报文段后向B给出确认,其,ACK=1,,确认号,ack=y,1,ATCP 通知上层应用进程,连接已经建立,三次握手建立TCP连接,第78页,SYN=1,seq=x,ACK=1,seq=x+1,ack=y,1,CLOSED,CLOSED,数据传送,主动打开,被动打开,A,B,客户,服务器,SYN=1,ACK=1,seq=y,ack=x,1,5.9.1 TCP 连接建立(4),BTCP收到主机A确实认后,也通知其上层应用进程:TCP连接已经建立,三次握手建立TCP连接,第79页,SYN-,SENT,ESTAB-,LISHED,SYN-,RCVD,LISTEN,ESTAB-,LISHED,三次握手建立TCP连接状态
展开阅读全文