《TCP-IP教学课件资料:第6章 运输层协议》由会员分享,可在线阅读,更多相关《TCP-IP教学课件资料:第6章 运输层协议(101页珍藏版)》请在金锄头文库上搜索。
1、第第6章运输层协议章运输层协议本讲内容n运输层的功能和任务 n端口机制 nUDP协议nTCP协议nTCP连接管理nTCP可靠性传输nTCP可靠性控制n流量控制n拥塞控制 运输层的功能和任务 运输层的功能和任务 运输层为应用进程提供逻辑通道网络层、运输层和应用层关系网络层存在的问题IP IP 提供的是面向无连接的服务,如提供的是面向无连接的服务,如基于基于IPIP的因特网就是一个巨大的面的因特网就是一个巨大的面向无连接的网络,又称为尽力而为向无连接的网络,又称为尽力而为(best-effort)best-effort)的网络。的网络。IP IP 独立地传送每一个数据包。数据独立地传送每一个数据包
2、。数据包除乱序、重复现象外,还可能会包除乱序、重复现象外,还可能会被丢失。被丢失。IPIP依赖于传输层协议来判断数据包依赖于传输层协议来判断数据包是否丢失是否丢失是否丢失是否丢失从而请求发送方重传。传从而请求发送方重传。传输层同时也负责按输层同时也负责按正确的顺序正确的顺序正确的顺序正确的顺序重组重组数据包数据包网络层不能直接为应用层服务,因为分组交换技术可能会带来数据的丢失、乱序、重复等问题。另外如何确定应用程序的地址也是网络层所不能解决的。传输层的功能 传输层要为应用层提供一条逻辑通道,好像在两个传输层要为应用层提供一条逻辑通道,好像在两个应用进程间连接了一个管道,数据从管道的一端进应用进
3、程间连接了一个管道,数据从管道的一端进去,从另外一端出来。去,从另外一端出来。 运输层的主要功能运输层的主要功能 应用进程寻址应用进程寻址 提供数据的可靠传递提供数据的可靠传递流量控制流量控制拥塞控制拥塞控制 端口机制 运输层是为应用层服务的,多个应用层协议可能会使运输层是为应用层服务的,多个应用层协议可能会使用同一个运输层协议。用同一个运输层协议。 运输层如何将收到的数据交给正确的应用层进程?运输层如何将收到的数据交给正确的应用层进程? TCP/IPTCP/IP提供了端口机制来解决这个问题。提供了端口机制来解决这个问题。 端口机制-应用程序寻址端口是一种软件结构,是运输层协议和应用层协议交互
4、时的接口,每个端口有一个唯一的端口号,并且有相应的输入和输出缓存。 一个应用进程通过系统调用可以绑定到运输层协议(UDP或TCP)的一个端口上。 端口和应用进程是一一对应的,通过端口号能确定主机内的一个应用进程。 端口机制发送数据时,传输层首部中包含源端口号(发送方进程端口号)和目的端号发送数据时,传输层首部中包含源端口号(发送方进程端口号)和目的端号(接收方进程端口号)。(接收方进程端口号)。接收方的运输层根据目的端口号将数据交给正确的应用进程。对于知名的服务,如Web服务、FTP服务等,使用的运输层协议和端口号都是固定的,这些端口称为熟知端口熟知端口,其数值一般都小于1024 。而对于客户
5、进程,操作系统通常会随机给它分配一个大于1024的端口号。端口机制 TCP/IPTCP/IP协议体系中,每个端口都有一个端口号,这个端口号协议体系中,每个端口都有一个端口号,这个端口号是一个是一个1616比特的数字,所以最多可以有比特的数字,所以最多可以有64K64K个端口。个端口。 TCPTCP和和UDPUDP的端口是各自独立的,的端口是各自独立的,TCPTCP可以有可以有6553565535个端口,个端口,UDPUDP也可以有也可以有6553565535个端口。个端口。 端口机制常用的UDP协议的端口号 常用的TCP协议的端口号 UDP协议用户数据报协议UDP(User Datagram
6、Protocol)UDP是简单面向数据报的运输层协议,进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。UDP对应用层交下来的报文,既不合并也不拆分,一次发送一个报文。所以应用程序必须关心选择合适大小的报文。用户数据报协议UDP(User Datagram Protocol)UDP不提供可靠的数据服务 ,数据可能会丢失、乱序和重复。 UDP采用无连接的工作方式 , UDP比较简单,应用层的数据能够被迅速、及时地发送出去 。UDP的效率比较高,适合于对实时性要求高,但能够容忍部分数据丢失的应用,如视频会议,音频数据传输等。 用户数据报协议UDP(User Datagr
7、am Protocol)UDP接收应用层的数据,加上UDP首部后封装成UDP数据报,UDP数据报是UDP的传输单元 UDP数据报格式UDP数据报由UDP首部和其封装的应用层数据组成,是UDP协议的传输单元。 UDP数据报格式源端口源端口是指发送方应用进程对应的端口号。目的端口目的端口是指接收方应用进程对应的端口号。 长度字段长度字段的值给出了UDP数据报(包括首部和数据包括首部和数据)的字节数。 UDP数据报的长度可以是奇数奇数字节校验和校验和用来检测UDP报文在传输中的错误。UDP报文的校验是可选可选的,如果校验和的值为0,则表示没有校验。 UDP差错检测UDP提供了首部校验和字段来检测UD
8、P数据报在传输过程中的错误。一旦检测出错误,UDP会丢弃出错的UDP数据报。 UDP首部校验和的计算比较特殊,在计算校验和之前,要在UDP报文前面添加一个伪首部。 TCP协议TCP是TCP/IP协议体系中传输层的重要协议。 TCP为应用层提供面向连接面向连接的、可靠可靠的的数据传递服务。 在提供数据可靠性的同时,TCP还为应用层提供了全双工全双工的数据传输服务。 TCP还具有流量控制流量控制和拥塞控制拥塞控制的功能。 TCP协议特点协议特点TCP首部20 字节的固定首部目 的 端 口数据偏移检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 位S
9、YNRSTPSHACKURG位 0 8 16 24 31填 充TCP 数据部分TCP 首部TCP 报文段IP 数据部分IP 首部发送在前TCP 报文段的首部格式 MSS (Maximum Segment Size)是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。选项字段 长度可变。TCP 最初只规定了一种选项,即最大报文段长度 MSS。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。” 练习:主机练习:主机A A向主机向主机B B连续发送了两个连续发送了两个TCPTCP报文段,报文段,其序号分别是其序
10、号分别是7070和和100100,请问:,请问:1、第一个报文段携带了多少字节的数据?2、主机B收到第一个报文段后发回的确认中的确认号应当是多少?3、如果B收到第二个报文段后发回的确认中的确认号是180,问A发送的第二个报文段中的数据有多少字节?4、如果A发送的第一个报文段丢失了,但第二个报文段到达了B。B在第二个报文段到达后向A发送确认,确认号是多少?TCP连接管理TCPTCP提供面向连接的传输服务。提供面向连接的传输服务。利用利用TCPTCP通信的两个应用进程要首先建立连接。这个连接是通信的两个应用进程要首先建立连接。这个连接是软软件意义件意义上的连接,并不是一条实际的物理线路。上的连接,
11、并不是一条实际的物理线路。建立连接的目的是使通信双方在开始传输数据前建立联系,使建立连接的目的是使通信双方在开始传输数据前建立联系,使双方都确定对方愿意与之通信;同时在建立连接的过程中传递双方都确定对方愿意与之通信;同时在建立连接的过程中传递和协商一些必要的参数(如发送字节的起始编号和和协商一些必要的参数(如发送字节的起始编号和MSSMSS),为),为后面的数据传递打下基础。后面的数据传递打下基础。建立连接的过程是两端的建立连接的过程是两端的TCPTCP交换一些特殊的交换一些特殊的TCPTCP报文段来完成报文段来完成的。的。 TCP连接管理连接管理1.1.建立连接。建立连接。2.2.传输应用层
12、数据。传输应用层数据。3.3.关闭连接关闭连接TCP传输数据的过程传输数据的过程用三次握手建立 TCP 连接 SYN = 1, seq = xCLOSEDCLOSED主动打开被动打开AB客户服务器TCP 的连接建立A 的 TCP 向 B 发出连接请求报文段,其首部中的同步位 SYN = 1,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x。TCPTCP规定:规定:SYN=1SYN=1的报文不能携带的报文不能携带数据,但要消耗数据,但要消耗一个序号。一个序号。同步已发送状态同步已发送状态用三次握手建立 TCP 连接 SYN = 1, seq = xCLOSEDCLOSED主
13、动打开被动打开AB客户服务器TCP 的连接建立SYN = 1, ACK = 1, seq = y, ack= x 1 B 的 TCP 收到连接请求报文段后,如同意,则 发回确认。 B 在确认报文段中应使 SYN = 1,使 ACK = 1, 其确认号ack = x 1,自己选择的序号 seq = y。同步收到状态同步收到状态SYN = 1, seq = xACK = 1, seq = x + 1, ack = y 1CLOSEDCLOSED主动打开被动打开AB客户服务器SYN = 1, ACK = 1, seq = y, ack= x 1 A 收到此报文段后向 B 给出确认,其 ACK = 1
14、, 确认号 ack = y 1。 A 的 TCP 通知上层应用进程,连接已经建立。 TCPTCP规定:规定:ACK=1ACK=1的报文可以携带的报文可以携带数据,不携带数数据,不携带数据不消耗序号。据不消耗序号。已建立连接状态已建立连接状态已建立连接状态已建立连接状态SYN = 1, seq = xACK = 1, seq = x + 1, ack = y 1CLOSEDCLOSED数据传送主动打开被动打开AB客户服务器SYN = 1, ACK = 1, seq = y, ack= x 1 B 的 TCP 收到主机 A 的确认后,也通知其上层 应用进程:TCP 连接已经建立。SYN-SENTE
15、STAB-LISHEDSYN-RCVDLISTENESTAB-LISHED用三次握手建立 TCP 连接的各状态 SYN = 1, seq = xACK = 1, seq = x + 1, ack = y 1CLOSEDCLOSED数据传送主动打开被动打开AB客户服务器TCP 的连接建立SYN = 1, ACK = 1, seq = y, ack= x 1三次握手三次握手三次握手保活定时器 n一个TCP连接建立后,可能会长时间处于空闲状态,没有任何数据交换。 n服务器需要知道客户端是否已经关闭或是重启,需要确认是否有必要继续保留这个连接。 n服务器通过设置保活定时器(keepalive time
16、r)来达到这个目的。 保活定时器n保活定时器的时间一般设为2小时。n如果服务器在2小时内收到了客户端的信息,那么定时器就复位,重新计时。n如果2小时内没有收到任何数据,那么服务器TCP就会给客户端发送一个探测报文。 保活定时器n客户端可能处于以下的4个状态: (1)客户端依然活跃,并且收到了服务器的探测报文。客户端的TCP便会发出响应报文,使服务器知道自己仍然处于活动状态。服务器的TCP会将保活定时器复位,保持这个连接。 (2)客户端已经崩溃,并且已经关机。此时服务器TCP不会收到任何响应。然后服务器TCP每隔75秒发送一个探测报文,如果发送了10个探测报文仍没有回应,那么服务器就关闭连接,释
17、放相应的资源。 (3)客户端已经重启,这时客户端的TCP不会保留原来连接的信息。当收到服务器的探测报文后,客户端TCP会发送一个复位(RST)的响应,服务器收到后便会关闭连接。 (4)客户端依然活跃,但是始终都无法收到服务器的探测报文(可能是由于网络拥塞造成的)。这种情况同(2)类似,服务器收不到响应,也会关闭连接。 FIN = 1, seq = uCLOSED主动关闭数据传送ESTAB-LISHEDESTAB-LISHEDAB客户服务器CLOSEDTCP 的连接释放 数据传输结束后,通信的双方都可释放连接。 现在 A 的应用进程先向其 TCP 发出连接释放 报文段,并停止再发送数据,主动关闭
18、 TCP 连接。 A 把连接释放报文段首部的 FIN = 1,其序号 seq = u,等待 B 的确认。TCPTCP规定:规定:FIN=1FIN=1的报文即使不携的报文即使不携带数据也要消耗带数据也要消耗一个序号。一个序号。终止等待终止等待1 1状态状态FIN = 1, seq = uACK = 1, seq = v, ack= u 1主动关闭数据传送通知应用进程ESTAB-LISHEDESTAB-LISHEDAB客户服务器TCP 的连接释放 B 发出确认,确认号 ack = u 1, 而这个报文段自己的序号 seq = v。 TCP 服务器进程通知高层应用进程。 从 A 到 B 这个方向的连
19、接就释放了,TCP 连接 处于半关闭状态。B 若发送数据,A 仍要接收。关闭等待状态关闭等待状态终止等待终止等待2 2状态状态FIN = 1, seq = uACK = 1, seq = v, ack= u 1FIN = 1, ACK = 1, seq = w, ack= u 1主动关闭被动关闭数据传送通知应用进程ESTAB-LISHEDESTAB-LISHEDAB客户服务器数据传送TCP 的连接释放 若 B 已经没有要向 A 发送的数据, 其应用进程就通知 TCP 释放连接。 最后确认状态最后确认状态FIN = 1, seq = uACK = 1, seq = v, ack= u 1FIN
20、= 1, ACK = 1, seq = w, ack= u 1主动关闭被动关闭数据传送通知应用进程ESTAB-LISHEDESTAB-LISHEDAB客户服务器数据传送TCP 的连接释放 A 收到连接释放报文段后,必须发出确认。 ACK = 1, seq = u + 1, ack = w 1时间等待状态时间等待状态FIN = 1, seq = uACK = 1, seq = v, ack= u 1FIN = 1, ACK = 1, seq = w, ack= u 1主动关闭被动关闭数据传送通知应用进程ESTAB-LISHEDESTAB-LISHEDAB客户服务器数据传送TCP 的连接释放 在确
21、认报文段中 ACK = 1,确认号 ack w 1, 自己的序号 seq = u + 1。 ACK = 1, seq = u + 1, ack = w 1CLOSEDACK = 1, seq = u + 1, ack = w 1FIN = 1, seq = uACK = 1, seq = v, ack= u 1FIN = 1, ACK = 1, seq = w, ack= u 1FIN-WAIT-1CLOSE-WAITFIN-WAIT-2LAST-ACK等待 2MSLTIME-WAIT主动关闭被动关闭数据传送通知应用进程ESTAB-LISHEDESTAB-LISHEDAB客户服务器数据传送CL
22、OSED5.9.2 TCP 的连接释放 TCP 连接必须经过时间 2MSL 后才真正释放掉。 MSL :Maximum Segment Lifetime 可靠性传输不可靠协议的问题:没有反馈基本可靠性:带重传的肯定确认带重传的肯定确认-改进型TCP面向流的滑动窗口确认系统发送窗口与可用窗口可靠性控制数据的可靠性传输nTCP报文段需要封装在IP的报文中才能到达目的地。数据的可靠性传输nIP协议不能提供可靠的数据传输服务 ,IP报文可能会丢失、重复或者乱序。nTCP报文段也会遇到同样的问题。nTCP主要使用确认、重传机制实现数据的可靠性传输。确认和重传机制 n每一方的TCP都要为所传输的数据编号,
23、编号以字节为单位。n如果收到了编号正确的数据,那么就要给对方发送确认。 n确认也可能在中途丢失,从而造成对方无法收到确认的情况。在发出一个TCP报文段后,就启动一个定时器,如果定时器时间到了但确认还没有来,那么就重传一次这个报文。 确认和重传机制数据出错的四种情况和处理(1)TCP报文段丢失 。发送方定时器超时,重传。(2) TCP报文段里的数据出错。接收方丢弃出错报文段,不发送确认。发送方定时器超时,重传。(3)TCP报文段的重复。接收方直接丢弃重复报文段,同时发送确认。 (4) TCP报文段的乱序。TCP通常会选择缓存这些乱序的报文,将其排序再上传给应用进程。 超时重传时间n在发送一个TC
24、P报文后,就会启动重传定时器。n如果在定时器截止时间之前收到了确认,就撤销这个定时器。如果定时器时间到了,确认还没有收到,就重传该报文并将定时器复位。 n随着网络情况不断在发生变化,重传定时器的时间设定也会跟随变化 。n重专时间过短,引起不必要的重传,网络负荷增大。过长,使网络空闲时间增大,降低了传输效率超时重传时间计算nTCP 保留了 RTT 的一个加权平均往返时间 RTTS(这又称为平滑的往返时间)。n第一次测量到 RTT 样本时,RTTS 值就取为所测量到的 RTT 样本值。以后每测量到一个新的 RTT 样本,就按下式重新计算一次 RTTS: 新的 RTTS (1 ) (旧的 RTTS)
25、 (新的 RTT 样本) n式中,0 1。若 很接近于零,表示 RTT 值更新较慢。若选择 接近于 1,则表示 RTT 值更新较快。nRFC 2988 推荐的 值为 1/8,即 0.125。 超时重传时间计算nRTO 应略大于上面得出的加权平均往返时间 RTTS。nRFC 2988 建议使用下式计算 RTO:n RTO RTTS + 4 RTTD nRTTD 是 RTT 的偏差的加权平均值。nRFC 2988 建议这样计算 RTTD。第一次测量时,RTTD 值取为测量到的 RTT 样本值的一半。在以后的测量中,则使用下式计算加权平均的 RTTD:新的 RTTD = (1 ) (旧的RTTD)
26、+ RTTS 新的 RTT 样本 n 是个小于 1 的系数,其推荐值是 1/4,即 0.25。往返时间 RTT?往返时间的测量相当复杂 nTCP 报文段 1 没有收到确认。重传(即报文段 2)后,收到了确认报文段 ACK。n如何判定此确认报文段是对原来的报文段 1 的确认,还是对重传的报文段 2 的确认? 发送一个TCP 报文段超时重传TCP 报文段收到 ACK时间12往返时间 RTT?是对哪一个报文段的确认?Karn 算法 n在计算平均往返时间 RTT 时,只要报文段重传了,就不采用其往返时间样本。n这样得出的加权平均平均往返时间 RTTS 和超时重传时间 RTO 就较准确。 n报文段每重传
27、一次,就把 RTO 增大一些:新的 RTO (旧的 RTO) n系数 的典型值是 2 。n当不再发生报文段的重传时,才根据报文段的往返时延更新平均往返时延 RTT 和超时重传时间 RTO 的数值。n实践证明,这种策略较为合理。 修正的 Karn 算法 流量控制流量控制n在建立连接时,TCP连接的每一端都会为这个连接分配一定数量的缓存。当收到正确的字节后,就会将数据放入缓存。 n如果发送进程发送数据的速度超过接收进程取走数据的速度,那么接收缓存就会被充满,最后溢出。 n需要有一种机制来控制发送方发送数据的速度,保证接收缓存不溢出,这种机制称为流量控制。 流量控制nTCP利用首部中的窗口字段将自己
28、接收缓存大小通知对方,从而保证数据不会溢出。流量控制流量控制中的两个问题n零窗口通告 n使用坚持定时器解决。n零窗口通告后容易出现糊涂窗口综合症 n糊涂窗口症状 n解决方案:n接收方等待一段时间,使得或者接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存有一半空闲的空间。只要出现这两种情况之一,接收方发出确认报文,通知窗口大小。n发送方不要发送太小的报文段,而是把数据积累成足够大的报文段,或者达到接收缓存的空间的一半大小。 拥塞控制拥塞n当大量的数据涌入网络时,网络中的部分路由器就会因为过载而被迫丢弃一些分组,就产生了拥塞。n发送方会因为定时器超时重传那些被路由器丢弃的分组,从而引起更
29、严重的拥塞,使整个网络陷入瘫痪。 TCP拥塞控制n1.如何判断产生拥塞?nTCP认为如果发生了数据丢失,没有及时地收到确认,那么拥塞就产生了。 n2.如何缓解拥塞?n一个连接两端的TCP都维持一个变量,称为拥塞窗口,用来限制TCP向网络中注入数据的大小和速率。n拥塞窗口的大小能够随时进行调整。 n发送方在某个时刻能够向网络输入数据的最大字节数应该是接收方通告窗口和发送方拥塞窗口之间的最小值 。慢开始算法的原理 n在主机刚刚开始发送报文段时可先设置拥塞窗口 cwnd = 1,即设置为一个最大报文段 MSS 的数值。n在每收到一个对新的报文段的确认后,将拥塞窗口加 1,即增加一个 MSS 的数值。
30、n用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。 发送方接收方发送 M1 确认 M1发送 M2M3 确认 M2M3 发送 M4M7 确认 M4M7 cwnd = 1 cwnd = 2 cwnd = 4 发送 M8M15cwnd = 8 tt发送方每收到一个对新报文段的确认(重传的不算在内)就使 cwnd 加 1。 轮次 1轮次 2轮次 3传输轮次(transmission round)n使用慢开始算法后,每经过一个传输轮次,拥塞窗口 cwnd 就加倍。 n一个传输轮次所经历的时间其实就是往返时间 RTT。n“传输轮次”更加强调:把拥塞窗口 cwnd 所允许
31、发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。n例如,拥塞窗口 cwnd = 4,这时的往返时间 RTT 就是发送方连续发送 4 个报文段,并收到这 4 个报文段的确认,总共经历的时间。 设置慢开始门限状态变量ssthreshn慢开始门限 ssthresh 的用法如下:n当 cwnd ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。n当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。n拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1,而不是加倍,使拥塞窗口
32、cwnd 按线性规律缓慢增长。当网络出现拥塞时n无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限 ssthresh 设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。n然后把拥塞窗口 cwnd 重新设置为 1,执行慢开始算法。n这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。 2216慢开始和拥塞避免算法的实现举例 当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。慢开始门限的初始值设置为 16 个报文段,即 ssthresh =
33、 16。“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免“加法增大”拥塞避免“加法增大”传输轮次慢开始和拥塞避免算法的实现举例 发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免“加
34、法增大”拥塞避免“加法增大”传输轮次慢开始和拥塞避免算法的实现举例 在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。 2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始拥塞避免“加法增大”拥塞避免“加法增大”传输轮次慢开始和拥塞避免算法的实现举例 发送端每收到一个确认 ,就把 cwnd 加 1。于是发送端可以接着发送 M1 和 M2 两个报文段。 2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的
35、 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免“加法增大”拥塞避免“加法增大”传输轮次慢开始和拥塞避免算法的实现举例 接收端共发回两个确认。发送端每收到一个对新报文段的确认,就把发送端的 cwnd 加 1。现在 cwnd 从 2 增大到 4,并可接着发送后面的 4 个报文段。 2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免“加法增大”拥塞避免“加法增大”传输轮次慢开始和拥塞避免算法的实现举例 发送端每收到一
36、个对新报文段的确认,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输轮次按指数规律增长。 2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免“加法增大”拥塞避免“加法增大”传输轮次慢开始和拥塞避免算法的实现举例 当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。 2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新
37、的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免“加法增大”拥塞避免“加法增大”传输轮次2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免“加法增大”拥塞避免“加法增大”慢开始和拥塞避免算法的实现举例 假定拥塞窗口的数值增长到 24 时,网络出现超时,表明网络拥塞了。 传输轮次2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长
38、ssthresh 的初始值慢开始慢开始慢开始拥塞避免“加法增大”拥塞避免“加法增大”慢开始和拥塞避免算法的实现举例 更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1,并执行慢开始算法。 传输轮次2216“乘法减小”24681012141618200048122024拥塞窗口 cwnd新的 ssthresh 值网络拥塞指数规律增长ssthresh 的初始值慢开始慢开始慢开始拥塞避免“加法增大”拥塞避免“加法增大”慢开始和拥塞避免算法的实现举例 当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个
39、MSS 的大小。 传输轮次快重传和快恢复n快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认,而不是使用捎带确认。这样做可以让发送方及早知道有报文段没有到达接收方。 n发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段地,而不是等到重传计时器到期。 n不难看出,快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。 快重传举例发送方接收方发送 M1 确认 M1t 确认 M2 发送 M2发送 M3发送 M4 ?发送 M5发送 M6 重复确认 M2 立即重传 M3 重复确认 M2 重复确认 M2 t发送 M7收到三个连续的对 M2 的重复确认立即重传 M
40、3丢失快恢复算法 (1) 当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限 ssthresh 减半。但接下去不执行慢开始算法。 (2)由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口 cwnd 现在不设置为 1,而是设置为慢开始门限 ssthresh 减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。 24从连续收到三个重复的确认转入拥塞避免 2468101214161820220048121620传输轮次拥塞窗口 cwnd收到 3 个重复的确认执行快重传算法慢开始“乘法减小”拥塞避免“加法增大”TCP Ren
41、o版本TCP Tahoe 版本(已废弃不用)ssthresh 的初始值拥塞避免“加法增大”新的 ssthresh 值慢开始快恢复TCP的拥塞控制练习:练习:TCPTCP拥塞窗口拥塞窗口cwndcwnd大小与传输轮次大小与传输轮次n n的关系如下所示:的关系如下所示:cwnd1248163233343536373839n12345678910111213cwnd4041422122232425261248n141516171819202122232425261)试画出拥塞窗口与传输轮次的关系曲线2)指明TCP工作在慢开始阶段的时间间隔3)指明TCP工作在拥塞避免阶段的时间间隔4)在第16轮次和第
42、22轮次之后发送方是通过收到三个重复的确认还是通过超时检测到丢失了报文段?练习:练习:TCPTCP拥塞窗口拥塞窗口cwndcwnd大小与传输轮次大小与传输轮次n n的关系如下所示:的关系如下所示:cwnd1248163233343536373839n12345678910111213cwnd4041422122232425261248n141516171819202122232425265)在第1轮次、18轮次和第24轮次发送时,门限ssthresh分别被设置为多大?6)在第几轮次发送出第70个报文段?7)假定在第26轮次之后收到了三个重复的确认,因而检测出了报文段的丢失,那么拥塞窗口cwnd
43、和门限ssthresh应设置为多大?随机早期检测 RED (Random Early Detection) n使路由器的队列维持两个参数,即队列长度最小门限 THmin 和最大门限 THmax。nRED 对每一个到达的数据报都先计算平均队列长度 LAV。n若平均队列长度小于最小门限 THmin,则将新到达的数据报放入队列进行排队。n若平均队列长度超过最大门限 THmax,则将新到达的数据报丢弃。n若平均队列长度在最小门限 THmin 和最大门限THmax 之间,则按照某一概率 p 将新到达的数据报丢弃。n最小门限Thmin必须足够大:n最大门限Thmax和最小门限Thmin之差必须足够大。n最大门限Thmax等于最小门限Thmin值的两倍n概率p不是常数,取决于当前的平均队列长度LAV和所设定的两个门限值Thmin和Thmax 。n平均队列长度LAV=(1-)(旧的LAV)+(当前的队列长度样本) 01np=ptemp/(1-countptemp)ncount代表新到达的分组有多少个已经进入了队列(没有被丢弃)nptemp=ptemp(LAV - Thmin)/(Thmax - Thmin)课程回顾n运输层的功能和任务 n端口机制 nUDP协议nTCP协议nTCP连接管理nTCP可靠性传输nTCP可靠性控制n流量控制n拥塞控制