《[信息与通信]第5章运输层new.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]第5章运输层new.ppt(186页珍藏版)》请在三一办公上搜索。
1、第5章 运输层,5.1 运输层协议概述,5.1.1 进程之间的通信,物理层,运输层在层次体系结构中的地位,数据链路层,网络层,运输层,应用层,面向信息处理,面向通信,用户功能,网络功能,运输层为通信的应用进程提供逻辑通信,主机 A,主机 B,IP 协议的作用范围,运输层协议 TCP 和 UDP 的作用范围,IP 层,“逻辑通信”运输层之间的通信似乎是沿水平方向传送数据事实上运输层之间并没有一条水平方向的物理连接,运输层协议和网络层协议的主要区别,应用进程,应用进程,IP 协议的作用范围(提供主机之间的逻辑通信),TCP 和 UDP 协议的作用范围(提供进程之间的逻辑通信),因 特 网,运输层和
2、网络层的区别,12个孩子要与另一个家庭的12个孩子相互通信进程=孩子们进程间报文=信封中的信笺主机=家庭的房子运输协议=孩子之间的通信网络层协议=家庭之间的通信,为什么需要运输层,在一个网络连接上复用多对进程的通信 控制网络层及下两层自身不能解决的传输错误 解决多互连的通信子网 通信协议和提供的服务功能的差异,运输层与上下层之间的关系,运输实体,运输实体,运输协议,应用层,网络层(或网际层),运输层服务访问点TSAP,网络层服务访问点NSAP,运输层,5.1.2 TCP/IP体系中的运输层协议,UDP(User Datagram Protocol)用户数据报协议:提供面向无连接的服务此时逻辑通
3、信信道是一条不可靠信道 TCP(Transmission Control Protocol)传输控制协议:提供面向连接的服务尽管下面的网络不可靠(尽最大努力服务)但逻辑通信信道相当于一条全双工的可靠信道,5.1.3 运输层的端口(port),操作系统用进程标识符来标志运行在计算机中的进程 但因特网上不同操作系统使用不同格式的进程标识符 必须用统一方法对 TCP/IP 体系的应用进程进行标志 进程动态创建和撤销,发送方无法识别其他机器上的进程 端口号只具有本地意义,标志本计算机应用层中的各进程 通信的终点是应用进程,但可以想象通信终点是端口 在协议栈层间的抽象的协议端口是软件端口 路由器或交换机
4、上的端口是硬件端口端口用一个 16 bit 端口号进行标志,套接字,从上面的分析可以看出,要唯一的标识一个网络进程,除了需要主机IP地址外,还需要进程标识-端口号。IP+Port称为套接字。套接字和端口、IP 地址的关系是:,三类端口,熟知端口(01023)登记端口号(102449151)为没有熟知端口号的应用程序使用的使用该端口号必须在 IANA 登记,以防重复客户端口号或短暂端口号(4915265535)留给客户进程选择暂时使用通信结束后,该端口号可供其他客户进程使用,5.2 用户数据报协议UDP,传送的协议数据单元是 UDP 报文或用户数据报无连接方式,发送数据之前不需要建立连接尽最大努
5、力交付,不保证可靠交付,也不使用拥塞控制面向报文,没有拥塞控制,适合多媒体通信支持一对一、一对多、多对一和多对多的交互通信 8 个字节首部,开销小,面向报文的 UDP,IP 层,运输层,应用层报文,应用层,发送方 UDP 对应用程序交下来的报文在添加首部后就向下交付 IP 层一次发送一个报文一次交付一个完整的报文,UDP 首部格式,字节,4,4,1,1,2,12,2,2,2,2,字节,发送在前,UDP 用户数据报,用户数据报 UDP 有两个字段:数据字段和首部字段首部字段由4个字段共8字节组成,每个字段都是两个字节,在计算检验和时临时把“伪首部”和 UDP 用户数据报连接在一起伪首部仅仅是为了
6、计算检验和,计算 UDP 检验和的例子,10011001 00010011 153.1900001000 01101000 8.10410101011 00000011 171.300001110 00001011 14.1100000000 00010001 0 和 1700000000 00001111 1500000100 00111111 108700000000 00001101 1300000000 00001111 1500000000 00000000 0(检验和)01010100 01000101 数据01010011 01010100 数据01001001 01001110
7、 数据01000111 00000000 数据和 0(填充)10010110 11101101 求和得出的结果01101001 00010010 检验和,153.19.8.104,171.3.14.11,12 字节伪首部,8 字节UDP 首部,7 字节数据,按二进制反码运算求和将得出的结果求反码,全 0 17 15 1087 13 15 全 0数据 数据 数据 数据数据 数据 数据 全 0,某UDP用户数据报的首部用十六进制表示是:F6 32 00 45 00 1C E2 17。试求源端口、目的端口、用户数据报的总长度、数据部分长度。这个用户数据报是从客户发送给服务器还是服务器发送给客户?使用
8、UDP的这个服务器程序是什么?,答案,源端口号:63026目的端口号:69用户数据报的总长度为:28字节数据部分长度为:20字节使用UDP的这个服务器程序是:TFTP,UDP 基于端口分用,IP 层,UDP 数据报到达,端口 2,端口 3,端口 1,UDP 分用,5.3 传输控制协议TCP概述,面向连接的运输层协议,提供可靠交付的服务传送的协议数据单元是 TCP 报文段(segment)每条 TCP 连接只能有两个端点(endpoint)每一条 TCP 连接只能是点对点的TCP 提供全双工通信面向字节流,面向字节流的 TCP,敬请关注,是一条虚连接而不是一条真正的物理连接不关心应用进程一次把多
9、长的报文发送到TCP 缓存中根据对方给出的窗口值和当前网络拥塞程度来决定一个报文段应包含多少个字节可把太长的数据块划分短一些再传送也可等待积累有足够多的字节后再构成报文段发送出去,TCP 的连接,TCP 把连接作为最基本的抽象每一条连接有两个端点TCP 连接的端点不是主机、应用进程,或运输层协议端口TCP 连接的端点叫做套接字(socket)或插口端口号拼接到 IP 地址即构成了套接字,TCP 连接:=socket1,socket2=(IP1:port1),(IP2:port2),套接字 socket=(IP地址:端口号),套接字(socket),每一条 TCP 连接唯一地被通信两端套接字所确
10、定,例题,某主机的IP地址是172.12.22.101,运行了3个应用程序:浏览器、QQ和迅雷下载,分别绑定在端口:50333、55443和59932上。如果该主机接收到4个IP数据报,每个IP数据报的目的IP:目的PORT分别是:数据报1 172.12.22.101:55443数据报2 172.12.22.101:59932 数据报3 172.12.22.101:50333数据报4172.12.22.101:10000那么这些数据报会分别上交给哪个应用进程?,关于TCP和UDP端口,下列说法中正确的是()A TCP和UDP分别拥有自己的端口号,二者互不干扰,可以共存于同一台主机B TCP和U
11、DP分别拥有自己的端口号,但二者不能共存于同一台主机C TCP和UDP的端口号没有本质区别,二者互不干扰,可以共存于同一台主机D TCP和UDP的端口号没有本质区别,但二者不能共存于同一台主机,IP 数 据 部 分,32bit,TCP首部,20字节固定首部,TCP报文段,发送在前,5.5 TCP报文段首部,TCP首部,TCP 数 据 部 分,IP首 部,源端口和目的端口字段各占 2 字节端口是运输层与应用层的服务接口运输层的复用和分用功能都要通过端口才能实现,序号字段占 4 字节TCP 连接传送的数据流中每一个字节都编上一个序号序号字段的值指出本报文段所发送的数据的第一个字节的序号,确认号字段
12、占 4 字节期望收到对方的下一个报文段的数据的第一个字节的序号,数据偏移(即首部长度)占 4 位,以 4 字节为计算单位指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,保留字段占 6 位保留为今后使用,目前应置为 0,紧急 URG当 URG 1 时,表明紧急指针字段有效告诉系统此报文段中有紧急数据(高优先级数据),应尽快传送,紧急指针字段 占 16 位指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面),确认 ACK当 ACK 1 时,确认号字段有效 当 ACK 0 时,确认号字段无效,推送 PSH(PuSH)接收 TCP 收到 PSH=1 的报文段,
13、就尽快地交付接收应用进程不再等到整个缓存都填满了后再向上交付,复位 RST(ReSeT)当 RST 1 时,表明 TCP 连接中出现严重差错必须释放连接,然后再重新建立运输连接,同步 SYN 同步 SYN=1 表示这是一个连接请求或连接接受报文,终止 FIN(FINis)用来释放一个连接FIN 1 表明此报文段的发送端数据已发送完毕,要求释放运输连接,窗口字段 占 2 字节用来让对方设置发送窗口的依据,单位为字节,检验和 占 2 字节:检验的范围包括首部和数据这两部分在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部与UDP一样,只不过17修改为6,长度为TCP长度,选项字段
14、长度可变最初只规定了一种选项,最大报文段长度 MSS(Maximum Segment Size)MSS 告诉对方 TCP:“我的缓存能接收报文段数据字段最大长度是 MSS 个字节。”,其他选项,窗口扩大选项 占 3 字节,其中有一个字节表示移位值 S。新的窗口值等于TCP 首部中的窗口位数增大到(16+S),相当于把窗口值向左移动 S 位后获得实际的窗口大小。时间戳选项占10 字节,其中最主要的字段时间戳值字段(4 字节)和时间戳回送回答字段(4 字节),用于计算RTT和防止序号绕回。选择确认选项,填充字段为了使整个首部长度是 4 字节的整数倍,5.4 可靠传输的工作原理,5.4.1 停止等待
15、协议,可靠传输之停止等待协议,(a)无差错情况,A,发送 M1,确认 M1,B,发送 M2,发送 M3,确认 M2,确认 M3,t,t,理想的传输条件:1.传输信道不产生差错2.不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据,可靠传输之停止等待协议,A,发送 M1,B,超时重传 M1,发送 M2,确认 M1,丢弃有差错的报文,(b)超时重传,t,t,如果发送方分组后,一直未收到确认,出现“死锁”,可靠传输之停止等待协议,A,发送 M1,B,超时重传 M1,发送 M2,确认 M1,丢弃有差错的报文,(b)超时重传,t,t,发送完一个分组后,必须暂时保留已发送的分组副本分组和确认分
16、组都必须进行编号超时计时器的重传时间应略长于分组传输平均往返时间,可靠传输之停止等待协议,(c)确认丢失,A,发送 M1,B,发送 M2,丢弃重复M1重传M1确认,t,t,确认 M1,超时重传 M1,可靠传输之停止等待协议,丢弃重复M1重传M1确认,(d)确认迟到,超时重传 M1,A,发送 M1,B,发送 M2,确认 M1,收下迟到确认但什么也不做,t,t,停止等待协议的实现,使用确认和重传机制,可以在不可靠的传输网络上实现可靠通信该可靠传输协议称为自动重传请求ARQ(Automatic Repeat reQuest)ARQ 表明重传的请求是自动进行的接收方不需要请求发送方重传某个出错的分组,
17、停止等待协议的信道利用率,优点:简单缺点:信道利用率太低,TD,RTT,A,TD+RTT+TA,B,分组,确认,t,t,分组,确认,5.4.2 流水线传输,发送方可连续发送多个分组不必每发完一个分组就停顿下来等待对方的确认信道上不间断地传送数据,可获得很高的信道利用率,B,分组,t,t,A,ACK,可靠传输之连续 ARQ 协议,(a)发送方维持发送窗口(发送窗口是 5),发送窗口,(b)收到一个确认后发送窗口向前滑动,向前,可靠传输之连续 ARQ 协议,接收方一般采用累积确认的方式并不逐个确认,只对按序到达的最后一个分组发送确认优点:容易实现,即使确认丢失也不必重传缺点:不能向发送方反映接收方
18、已正确收到所有分组的信息Go-back-N:需要再退回来重传已发送过的 N 个分组当通信线路质量不好时,连续 ARQ 协议会带来负面影响,5.6 连续 ARQ 协议的实现,TCP 连接的每一端都设有窗口一个发送窗口和一个接收窗口TCP 的可靠传输机制用字节序号进行控制TCP 所有的确认都是基于序号而不是基于报文段TCP 两端的四个窗口经常处于动态变化之中TCP连接的往返时间 RTT 也不是固定不变的,需要特定算法估算,TCP 以字节为单位的滑动窗口,前移,不允许发送,已发送并收到确认,A 的发送窗口=20,允许发送的序号,26,27,28,29,30,31,32,33,34,35,36,37,
19、38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,B 期望收到的序号,前沿,后沿,前移,收缩,根据 B 给出的窗口值A 构造出自己的发送窗口,允许发送但尚未发送,P1,P2,P3,不允许接收,已发送确认并交付主机,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,未按序收到,A 发送了 11 个字节的数据,P3 P1=A 的发送窗口(又称为通知窗口)P2 P1=已发送但尚
20、未收到确认的字节数P3 P2=允许发送但尚未发送的字节数(又称为可用窗口),不允许发送,已发送并收到确认,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,允许发送但尚未发送,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,已发送并收到确认,不允许发送,已发送但未收
21、到确认,56,P1,P2,P3,允许接收,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,未按序收到,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,5
22、4,55,已发送但未收到确认,56,P1,P2,P3,A 的发送窗口内的序号都已用完,但还没有再收到确认,必须停止发送,发送缓存与接收缓存的作用,发送缓存用来暂时存放:发送应用程序传送给发送方 TCP 准备发送的数据;TCP 已发送出但尚未收到确认的数据。接收缓存用来暂时存放:按序到达的、但尚未被接收应用程序读取的数据;不按序到达的数据。,发送缓存,最后被确认的字节,发送应用程序,发送缓存,最后发送的字节,发送窗口,已发送,TCP,序号增大,接收缓存,接收应用程序,已收到,接收窗口,TCP,接收缓存,下一个读取的字节,序号增大,下一个期望收到的字节(确认号),按序达到的,未被取走的,未按序达到
23、的,需要暂存的,需要强调三点,A 的发送窗口并不总是和 B 的接收窗口一样大(因为有一定的时间滞后)。TCP 标准没有规定对不按序到达的数据应如何处理。通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。TCP 要求接收方必须有累积确认的功能,这样可以减小传输开销。,TCP的差错控制,差错控制包括:检测传输出错报文,丢失报文,乱序报文,重复报文。TCP的差错检测手段:检验和,确认,超时重传传输出错报文:检验和不等于0,丢弃;不确认丢失报文:超时重传乱序报文:接收方先保存,收齐后再发确认重复报文:丢弃,TCP捎带确认,捎带确认:在发送数据报文中捎带确认信息。T
24、CP建立连接后,收发双方实行全双工通信,通信双方不需要专门发送确认报文,可以在传送数据的同时,以“捎带确认”方法完成确认过程。但是大多数应用程序不同时在两个方向上发送数据。,TCP累积确认,接收方收到第1、2个报文后,发送确认报文,确认号为1601,但这个确认报文在传输过程中丢失,如果确认号为1801的确认报文在第一个报文确认超时之前到达发送方,则发送方可以认为1801之前的所有字节均被正确接收,而忽略之前的确认丢失。,5.6.2 超时重传时间的选择,重传机制是 TCP 中最重要和最复杂的问题之一。TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确
25、认,就要重传这一报文段。,往返时延的方差很大,由于 TCP 的下层是一个互联网环境,IP 数据报所选择的路由变化很大。因而运输层的往返时间的方差也很大。,时间,数据链路层,T1,T2,T3,往返时间的概率分布,加权平均往返时间,TCP 保留了 RTT 的一个加权平均往返时间 RTTS(这又称为平滑的往返时间)。第一次测量到 RTT 样本时,RTTS 值就取为所测量到的 RTT 样本值。以后每测量到一个新的 RTT 样本,就按下式重新计算一次 RTTS:新的 RTTS(1)(旧的 RTTS)(新的 RTT 样本)(5-4)式中,0 1。若 很接近于零,表示 RTT 值更新较慢。若选择 接近于 1
26、,则表示 RTT 值更新较快。RFC 2988 推荐的 值为 1/8,即 0.125。,超时重传时间 RTO(RetransmissionTime-Out),RTO 应略大于上面得出的加权平均往返时间 RTTS。RFC 2988 建议使用下式计算 RTO:RTO RTTS+4 RTTD(5-5)RTTD 是 RTT 的偏差的加权平均值。RFC 2988 建议这样计算 RTTD。第一次测量时,RTTD 值取为测量到的 RTT 样本值的一半。在以后的测量中,则使用下式计算加权平均的 RTTD:新的 RTTD=(1)(旧的RTTD)+RTTS 新的 RTT 样本(5-6)是个小于 1 的系数,其推荐
27、值是 1/4,即 0.25。,往返时间 RTT?,往返时间的测量相当复杂,TCP 报文段 1 没有收到确认。重传(即报文段 2)后,收到了确认报文段 ACK。如何判定此确认报文段是对原来的报文段 1 的确认,还是对重传的报文段 2 的确认?,发送一个TCP 报文段,超时重传TCP 报文段,收到 ACK,时间,1,2,往返时间 RTT?,是对哪一个报文段的确认?,Karn 算法,在计算平均往返时间 RTT 时,只要报文段重传了,就不采用其往返时间样本。这样得出的加权平均平均往返时间 RTTS 和超时重传时间 RTO 就较准确。,报文段每重传一次,就把 RTO 增大一些:新的 RTO(旧的 RTO
28、)系数 的典型值是 2。当不再发生报文段的重传时,才根据报文段的往返时延更新平均往返时延 RTT 和超时重传时间 RTO 的数值。实践证明,这种策略较为合理。,修正的 Karn 算法,5.6.3 选择确认 SACK(Selective ACK),接收方收到了和前面的字节流不连续的两个字节块。如果这些字节的序号都在接收窗口之内,那么接收方就先收下这些数据,但要把这些信息准确地告诉发送方,使发送方不要再重复发送这些已收到的数据。,1 1000 1501 3000 3501 4500,确认号=1001,L1=1501,L2=3501,R1=3001,R1=4501,接收到的字节流序号不连续,连续的字
29、节流,第一个字节块,第二个字节块,和前后字节不连续的每一个字节块都有两个边界:左边界和右边界。图中用四个指针标记这些边界。第一个字节块的左边界 L1=1501,但右边界 R1=3001。左边界指出字节块的第一个字节的序号,但右边界减 1 才是 字节块中的最后一个序号。第二个字节块的左边界 L2=3501,而右边界 R2=4501。,RFC 2018 的规定,如果要使用选择确认,那么在建立 TCP 连接时,就要在 TCP 首部的选项中加上“允许 SACK”的选项,而双方必须都事先商定好。如果使用选择确认,那么原来首部中的“确认号字段”的用法仍然不变。只是以后在 TCP 报文段的首部中都增加了 S
30、ACK 选项,以便报告收到的不连续的字节块的边界。由于首部选项的长度最多只有 40 字节,而指明一个边界就要用掉 4 字节,因此在选项中最多只能指明 4 个字节块的边界信息。,RFC 2018 的规定,由于首部选项的长度最多只有 40 字节,而指明一个边界就要用掉 4 字节,因此在选项中最多只能指明 4 个字节块的边界信息。因为4个字节块共有8个边界,1个边界4字节,8个边界32字节,另外一个字节用来指明SACK选项,另一个字节指明这个选项要占多少字节。如果5个字节块呢,至少需要42字节,超过了40字节的限制了。,TCP 的数据编号与确认,TCP 将所要传送的报文看成是字节组成的数据流,并使每
31、一个字节对应于一个序号。在连接建立时,双方要商定初始序号。TCP 每次发送的报文段的首部中的序号字段数值表示该报文段中的数据部分的第一个字节的序号。,TCP 的数据编号与确认,TCP 的确认是对接收到的数据的最高序号表示确认。接收端返回的确认号是已收到的数据的最高序号加 1。确认号表示接收端期望下次收到的数据中的第一个数据字节的序号。TCP采用捎带确认的方式,捎带确认技术指的是在反方向的通信中捎带下一个期望接收的报文段的序号以减少通信量。,TCP 的数据编号与确认,若收到的报文段无差错,只是未按序号,那么应如何处理?将不按序的报文段丢弃,接收方简单处理,但容易造成网络拥塞,因此,TCP通常先将
32、其暂存于接收缓存内,待所缺序号的报文段收齐后再一起上交应用层。,设TCP连接两端分别记为A和B若A发出一序号字段为101,数据部分长度为200字节的报文段,该报文段正确到达B,则B发出的报文段中确认号字段值为多少?若B发出的报文段中窗口字段值为500,那么在收到确认报文前A最多可发送多少字节数据?A发出的下一个报文段中序号字段值为多少?,举例,在基于TCP/IP的互联网中,IP协议提供主机之间的()分组传输服务。TCP协议提供端口之间的()报文传输服务。为了实现可靠、高效的传输服务,TCP协议采用超时重传、捎带确认技术。其中捎带确认技术指的是在反方向的通信中捎带()的序号以减少通信量。1 A
33、可靠的面向连接的 B 不可靠的面向连接的 C 可靠的无连接的 D 不可靠的无连接的2 A 可靠的面向连接的 B 不可靠的面向连接的 C 可靠的无连接的 D 不可靠的无连接的3 A 上一个已接收的报文段 B 下一个期望接收的报文段 C 正在发送的报文段 D 下一个将要发送的报文段,5.9 TCP 的运输连接管理,运输连接有三个阶段:连接建立、数据传送和连接释放运输连接的管理就是使运输连接的建立和释放都能正常地进行连接建立过程中要解决以下三个问题:使每一方能够确知对方的存在允许双方协商一些参数(如最大报文段长度,最大窗口大小等)对运输实体资源(如缓存大小,连接表中的项目等)进行分配,用三次握手建立
34、 TCP 连接,CLOSED,A,B,客户,服务器,A 的 TCP 向 B 发出连接请求报文段其首部中的同步位 SYN=1,并选择序号 seq=x,三次握手建立 TCP 连接,B 的 TCP 收到连接请求报文段后,如同意,则发回确认 B 在确认报文段中应使 SYN=1,使 ACK=1,其确认号ack=x 1,自己选择的序号 seq=y。,三次握手建立 TCP 连接,三次握手,第一次:主机A的TCP向主机B的TCP发出连接请求报文,其首部中的比特同步SYN置为1,同时选择一个序号x,该序号称为初始序号ISN(Initial Sequence Number)。第二次:主机B的TCP收到连接请求报文
35、后,如同意,则发回确认。在确认报文中将SYN置为1,确认序号为x+1,同时也为自己选择一个序号y。第三次:主机A的TCP收到此报文段后,还要向B给出确认,其确认序号为y+1。然后客户机A就可以通知上层应用进程,连接已经建立。当B收到A的确认后也通知上层应用进程,连接已经建立。“三次握手”是由连接双方的TCP完成的,应用程序只要一个简单的connect调用即可。比如执行telnet命令,当出现login时连接已建立,建立的过程TCP协议实体在后台进行。,问题,为什么要发送第三个报文?x,y的值有没有关系?,已失效的连接请求报文段,A发出的第一个连接请求报文段并没有丢失,但由于在某个网络结点滞留了
36、,以致延误到连接释放以后的某个时间才到达B。B以为是A发来的新的连接请求呢,于是向A发送确认报文段,同意建立连接。如果不采用三次握手,那么A、B间的连接就建立了。,序号间的关系,如果请求建立连接报文段的序号为x,则确认报文段的确认号为x+1。建立连接时发送的报文段不包含数据部分,但要消耗掉一个序号。TCP规定,ACK报文如果不携带数据则不消耗序号,所以下一个报文段的序号仍可以是x+1。,例子,TCP使用初始序号1200打开一个连接,另一端使用初始序号4800打开一个连接,试画出建立连接的过程,需要标出SYN、SEQ、ACK等字段。,TCP使用3次握手协议来建立连接,假设甲乙双方发送报文段的初始
37、序号分别为X和Y,甲方发送()报文段给乙方,乙方接收报文段后发送()的报文段给甲方,然后甲方发送一个确认报文段给乙方,这样就在甲乙双方之间建立了一条TCP连接。1.A SYN=1,seq=X B SYN=1,seq=X+1,ack=X C SYN=1,seq=Y D SYN=1,seq=X+1,ack=Y2.A SYN=1,seq=X+1 B SYN=1,seq=X+1,ack=X C SYN=1,seq=Y D SYN=1,seq=Y,ack=X+1,ACK=1,例子,TCP 的连接释放,ESTAB-LISHED,A,B,客户,服务器,数据传输结束后,通信的双方都可释放连接 现在 A 的应用
38、进程先向其 TCP 发出连接释放报文段停止发送数据,主动关闭 TCP连接 A 把连接释放报文段首部 FIN=1,序号seq=u,等待 B 的确认,通知应用进程,TCP 的连接释放(四次握手),B 发出确认,确认号 ack=u 1,此报文段序号 seq=v TCP 服务器进程通知高层应用进程 从 A 到 B 这个方向的连接就释放了,TCP 连接 处于半关闭状态。B 若发送数据,A 仍要接收,TCP 的连接释放,若 B 已经没有要向 A 发送的数据其应用进程就通知 TCP 释放连接,TCP 的连接释放,A 收到连接释放报文段后,必须发出确认,前两次握手第一个半关闭,当主机A没有数据向B发送时,主机
39、A向主机B发送一个终止连接的TCP报文,将报文首部的终止比特FIN置1,其序号x等于前面已传送过的数据的最后一个字节的序号加1。主机B的TCP收到释放连接的通知后,即发出确认,序号为y,其序号x等于前面已传送过的数据的最后一个字节的序号加1。同时通知高层的应用进程。这样,从A到B的连接就释放了,连接处于半关闭状态。这种状态相当于主机A对主机B说:“我已经没有数据要发送了。但你如果还发送数据,我仍接收”。,后两次握手完全关闭,在主机B向主机A的数据发送结束后,其应用进程就通知TCP释放连接。主机B发出的连接释放报文段必须将终止比特FIN置1,并使序号y等于前面已传送过的数据的最后一个字节的序号加
40、1,还必须重复上次已发送过的ACK=x+1。主机A必须对此发出确认,给出ACK=y+1。这样才将从B到A的 反方向连接释放掉。主机A的TCP再向其应用进程报告,整个连接已全部释放。连接释放过程和连接建立过程的三次握手本质上是一致的。,A 必须等待 2MSL 的时间,第一,为了保证 A 发送的最后一个 ACK 报文段能够到达 B。第二,防止“已失效的连接请求报文段”出现在本连接中。A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。,例子,一条TCP连接的建立过程包
41、括()个步骤A 2 B 3 C 4 D 5一条TCP连接的释放过程包括()个步骤A 2 B 3 C 4 D 5,5-41,用TCP传送512字节的数据。设窗口为100字节,而TCP报文段每次也是传送100字节的数据。再设发送方和接收方的起始序号分别为100和200,试画出从连接建立到连接释放的工作示意图。,5.7 TCP的流量控制,流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。利用滑动窗口实现流量控制。,流量控制,5.7.1 TCP 利用滑动窗口实现流量控制,A,B,允许 A 发送序号 201 至 500 共 300 字节,A
42、 发送了序号 101 至 200,还能发送 200 字节,A 发送了序号 301 至 400,还能再发送 100 字节新数据,A 发送了序号 1 至 100,还能发送 300 字节,A 发送了序号 401 至 500,不能再发送新数据了,A 超时重传旧的数据,但不能发送新的数据,允许 A 发送序号 501 至 600 共 100 字节,A 发送了序号 501 至 600,不能再发送了,不允许 A 再发送(到序号 600 为止的数据都收到了),A 向 B 发送数据,报文数据长100字节,连接建立时B 告诉 A:“我的接收窗口 rwnd=400字节”,这个窗口成为“通知窗口”,死锁,B有空闲缓存了
43、B 告诉 A:“我的接收窗口 rwnd=400(字节)”。但A一直没有收到。因此B在等待A发送数据,A在等待B修改窗口大小。这样就形成互相等待的死锁局面。,持续计时器(persistence timer),TCP 为每一个连接设有一个持续计时器。只要 TCP 连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带 1 字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器。若窗口不是零,则死锁的僵局就可以打破了。,特殊情况,一个交互式用户使用远程终端维护网络,设用户只发
44、生一个字符。TCP接收方缓存已满,而交互式应用进程一次只取1字节数据,然后向发送方确认,并设置窗口为1字节。,5.7.2 必须考虑传输效率,可以用不同的机制来控制 TCP 报文段的发送时机:第一种机制是 TCP 维持一个变量,它等于最大报文段长度 MSS。只要缓存中存放的数据达到 MSS 字节时,就组装成一个 TCP 报文段发送出去。第二种机制是发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过 MSS)发送出去。第三种机制是由发送方的应用进程指明要求发送报文段,即 TCP 支持的推送(push)操作。,5.8 TCP的拥塞控制,TCP的拥塞(congestion
45、),在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,于是产生拥塞。出现资源拥塞的条件:对资源需求的总和 可用资源 网络拥塞的原因:网络资源不足:如结点缓存太小/处理机处理速度路由器的路由选择问题恶意破坏者(如网络病毒)若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降,拥塞控制所起的作用,提供的负载,吞吐量,0,5.8.1 拥塞控制的一般原理,拥塞控制的一般原理:防止过多的数据注入到网络中。拥塞控制的前提:网络能够承受现有的网络负荷拥塞控制是一个全局性的过程,涉及到所有主机、所有路由器以及与降低网络传输性能有关
46、的所有因素。,开环控制和闭环控制,开环控制方法就是在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。闭环控制是基于反馈环路的概念。属于闭环控制的有以下几种措施:监测网络系统以便检测到拥塞在何时、何处发生。将拥塞发生的信息传送到可采取行动的地方。调整网络系统的运行以解决出现的问题。,TCP的拥塞控制方法,每个TCP发送方根据所感知到的网络拥塞程度,来限制其能向网络发送流量的速率。三个问题:(1)发送方如何限制其发送速率?(2)发送方如何感知网络存在拥塞?(3)发送方如何改变发送速率?,发送方如何限制其发送速率?,TCP拥塞控制机制让TCP连接维护一个变量,即拥塞窗口。拥塞
47、窗口cwnd:它对发送方能向网络发送流量的速率进行了限制。发送方的发送窗口=Min通知窗口,拥塞窗口【说明】:通知窗口是接收方根据自己的接收能力确定的窗口值。,发送方如何感知网络存在拥塞?,当网络出现拥塞时,路径上的一台或多台路由器的缓存会溢出,导致数据报丢失。数据报丢失,会引起发送方的重传计时器超时,或者,重传计时器未超时但收到3个重复确认报文。,发送方如何改变发送速率?,TCP发送方在感知到网络存在拥塞时,会调节其发送速率,采用的拥塞控制算法有:慢开始和拥塞避免算法快重传和快恢复算法,5.8.2 几种拥塞控制方法,慢开始和拥塞避免快重传和快恢复,传输轮次(transmission roun
48、d),“传输轮次”:把拥塞窗口 cwnd 所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。一个传输轮次所经历的时间其实就是往返时间 RTT。例如,拥塞窗口 cwnd=4,这时的往返时间 RTT 就是发送方连续发送 4 个报文段,并收到这 4 个报文段的确认,总共经历的时间。,慢开始和拥塞避免的原则,发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。,慢开始算法,在主机刚刚开始发送报文段时可先设置拥塞窗口 cwnd=1,即设置为一个最大报文段 MSS 的数值
49、。在每收到一个对新的报文段的确认后,将拥塞窗口加1,即增加一个 MSS 的数值。用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。,发送方,接收方,发送 M1,确认 M1,发送 M2M3,确认 M2M3,发送 M4M7,确认 M4M7,cwnd=1,cwnd=2,cwnd=4,发送 M8M15,cwnd=8,t,t,发送方每收到一个对新报文段的确认(重传的不算在内)就使 cwnd 加1。,轮次 1,轮次 2,轮次 3,慢开始每经过一个传输轮次,拥塞窗口 cwnd 就加倍,拥塞避免算法,拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢地增大,即每经过一个传输轮次就
50、把发送方的拥塞窗口 cwnd 加 1,使拥塞窗口 cwnd 按线性规律缓慢增长。,发送方,接收方,发送 M1,确认 M1,发送 M2M3,确认 M2M3,发送 M4M6,确认 M4M6,cwnd=1,cwnd=2,cwnd=3,发送 M7M10,cwnd=4,t,t,轮次 1,轮次 2,轮次 3,拥塞避免每经过一个传输轮次,拥塞窗口 cwnd 就加1。,设置慢开始门限状态变量ssthresh,慢开始门限 ssthresh 的用法如下:当 cwnd ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。当 cwnd=ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。,当网络出