《第6章-传输层协议及分析课件.ppt》由会员分享,可在线阅读,更多相关《第6章-传输层协议及分析课件.ppt(82页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第六章传输层协议及分析1/12/20231重点和难点n重点q传输层的功能qTCP协议和UDP协议n难点qTCP协议的理解1/12/20232nOSI体系结构中的传输层nInternet体系中的传输层1/12/202336.1 OSI体系结构中的传输层n传输层位于开放系统互连模型中的第四层。n是衔接由物理层、数据链路层及网路层构成的通信子网和包含会话层、表示层及应用层的资源子网的桥梁,起到承上启下的作用。传输层对高层用户起到了屏蔽作用,使高层用户的同等实体在交互过程中不会受到下层数据通信技术细节的影响。1/12/20234传输层与其上下层之间的关系的 OSI表示法 传输实体传输实体传输协议传输层
2、层接口 传输服务用户(应用层实体)传输服务用户(应用层实体)层接口 网络层(或网际层)应用层主机 A主机 B传输层服务访问点TSAP网络层服务访问点NSAP1/12/20235n从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。物理层网络层传输层应用层数据链路层面向信息处理面向通信用户功能网络功能6.1 OSI体系结构中的传输层1/12/20236传输层为相互通信的应用进程提供了逻辑通信 54321传输层提供应用进程间的逻辑通信应用进程应用进程IP 层AP1AP2AP4端口端口54321AP3主机 A主机 B路由器 1路由器
3、2AP1LAN2WANAP2AP3AP4LAN1IP 协议的作用范围传输层协议 TCP 和 UDP 的作用范围1/12/20237应用进程之间的通信n两个主机进行通信实际上就是两个主机中的应用进程互相通信。n应用进程之间的通信又称为端到端的通信端到端的通信。n传输层的一个很重要的功能就是复复用用和和分分用用。应用层不同进程的报文通过不同的端口向下交到传输层,再往下就共用网络层提供的服务。n传输层提供应用进程间的逻辑通信,这里“逻辑通信”的意思是:传传输输层层之之间间的的通通信信好好像像是是沿沿水水平平方方向向传传送送数数据据。但事实上这两个传输层之间并没有一条水平方向的物理连接。1/12/20
4、238端口的概念n端口就是运输层服务访问点 TSAP。n端口的作用就是让应用层的各种应用进程都能将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。n从这个意义上讲,端口是用来标志应用层的进程。1/12/20239端口在进程之间的通信中所起的作用 应用层传输层网络层TCP 报文段UDP用户数据报应用进程TCP 复用IP 复用UDP 复用TCP 报文段UDP用户数据报 应用进程端口端口TCP 分用UDP 分用IP 分用发送方接收方1/12/202310端口 n端口用一个 16 bit 端口号进行标志。n端口号只具有本地意义,即端口号只是为了
5、标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。1/12/202311两类端口 n一类是熟知端口,其数值一般为 01023,保留给诸如HTTP(80)、FTP(21)等熟知协议的。当一种新的应用程序出现时,必须为它指派一个熟知端口。n另一类则是一般端口,用来随时分配给请求通信的客户进程。1/12/202312插口(socket)nTCP 使用“连接”(而不仅仅是“端口”)作为最基本的抽象,同时将 TCP 连接的端点称为插口(socket),或套接字、套接口。n插口和端口、IP 地址的关系是:IP 地址131.6.23.13 端口号1500 131.6.23.13,1
6、500插口(socket)1/12/2023136.2 Internet体系中的传输层在Internet网络上,传输层有两个并列的协议,一个是TCP,一个是UDP。TCP即传输控制协议,它是面向连接的,可提供高可靠的服务。UDP即用户数据报协议,它是面向无连接的,可提供高效率的服务。1/12/202314传输层向上提供可靠的和不可靠的逻辑通信信道?应用层传输层发送进程接收进程接收进程数据数据全双工可靠信道数据数据使用 TCP 协议使用 UDP 协议不可靠信道发送进程1/12/2023156.2.1 TCP协议nTCP的主要功能p完成对数据报的确认、流量控制和网络拥塞的处理。p数据报自动检测、提
7、供错误自动重发功能。p将多条路径传送的数据报按照原序排列,并对重复数据进行择取。p控制超时重发、自动调整超时值。p提供自动恢复丢失数据的功能1/12/202316n TCP的数据传送过程pTCP是一种面向数据流的协议,操作过程分为三个阶段:建立TCP连接、传送数据和结束TCP连接。应用层传输层网络层网络接口层Ethernet用户报文TCP数据报IP数据报以太帧用户数据用户数据数 据FTPH数 据TCPHIPH TCPHTCPHIPH以太帧头FTPH数 据FTPH数 据FTPH数 据TCP的报文传送目的地址 源地址帧头包类型包数 据CRC校验1/12/20231718n TCP数据报的格式20
8、字节的固定首部TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充1/12/20231819TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充源端口和目的端口字段各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。n TCP数据报的格式1/12/2023
9、1920TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充序号字段占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节在整个报文字节流中的序号。n TCP数据报的格式1/12/20232021TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 1
10、6 24 31填 充确认号字段占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。n TCP数据报的格式1/12/202321TCP的数据编号与确认 nTCP 协议是面向字节的。TCP 将所要传送的报文看成是字节组成的数据流,并使每一个字节对应于一个序号。n在连接建立时,双方要商定初始序号。TCP 每次发送的报文段的首部中的序号字段数值表示该报文段中的数据部分的第一个字节的序号。n TCP 的确认是对接收到的数据的最高序号表示确认。接收端返回的确认号是已收到的数据的最高序号加 1。因此确认号表示接收端期望下次收到的数据中的第一个数据字节的序号。1/12/202322pTCP序列
11、号和确认序列号 示例 主机 A主机 BSeq=42,ACK=79,data=CSeq=79,ACK=43,data=CSeq=43,ACK=80用户键入用户键入C主机确认收到主机确认收到回显的回显的 C主机确认收到主机确认收到C,回显回显C时间n TCP数据报的格式1/12/2023233.5 面向连接的传输:TCP报文格式TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充首部长度占 4 bit,它指示以32bit为单位的TCP首部长度。1/
12、12/202324TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充保留字段占 6 bit,保留为今后使用,但目前应置为 0。3.5 面向连接的传输:TCP报文格式1/12/202325TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充紧急比特 URG 当 URG 1 时,表明紧急指针字段有
13、效。它告诉系统此报文段中有紧急数据,应尽快传送。(一般不使用)3.5 面向连接的传输:TCP报文格式1/12/202326TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充确认比特 ACK 只有当 ACK 1 时确认号字段才有效。当 ACK 0 时,确认号无效。3.5 面向连接的传输:TCP报文格式1/12/202327TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FI
14、N32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充推送比特 PSH(PuSH)接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。3.5 面向连接的传输:TCP报文格式1/12/202328TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充复位比特 RST(ReSeT)当 RST 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须
15、释放连接,然后再重新建立运输连接。3.5 面向连接的传输:TCP报文格式1/12/202329TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充同步比特 SYN 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。3.5 面向连接的传输:TCP报文格式1/12/202330TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHA
16、CKURG比特 0 8 16 24 31填 充终止比特 FIN(FINal)用来释放一个连接。当FIN 1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。3.5 面向连接的传输:TCP报文格式1/12/202331TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充窗口字段窗口字段 占占 2 字节。窗口字段用来控制对方发送的数据量,字节。窗口字段用来控制对方发送的数据量,单位为字节。单位为字节。TCP 连接的一端根据设置的缓存空
17、间大小确定自己连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。3.5 面向连接的传输:TCP报文格式1/12/202332TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充检验和 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部(源IP地址(4字节)、目的IP地址(
18、4字节)、0(1字节)、6(TCP协议号,1字节)、TCP长度(2字节)。3.5 面向连接的传输:TCP报文格式1/12/202333TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充紧急指针字段 占 16 bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。3.5 面向连接的传输:TCP报文格式1/12/202334TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号
19、保 留FIN32 bitSYNRSTPSHACKURG比特 0 8 16 24 31填 充选项字段 长度可变。定义了最大报文段长度 MSS(Maximum Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”此外还定义了时间戳选项。MSS 是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。1/12/202335TCP首部目 的 端 口首部长度检 验 和选 项 (长 度 可 变)源 端 口序 号紧 急 指 针窗 口确 认 号保 留FIN32 bitSYNRSTPSHACKURG比
20、特 0 8 16 24 31填 充填充字段 这是为了使整个首部长度是 4 字节的整数倍。3.5 面向连接的传输:TCP报文格式1/12/202336TCP 的流量控制nTCP流量控制流量控制q背景nTCP接收方有一个缓存,所有上交的数据全部缓存在里面n应用进程从缓冲区中读取数据可能很慢q目标n发送方不会由于传得太多太快而使得接收方缓存溢出q手段n接收方在反馈时,将缓冲区剩余空间的大小填充在报文段首部的窗口字段中,通知发送方1/12/202337q窗口值的计算空闲空间空闲空间缓存中的缓存中的TCP数据数据RcvWindow来自来自IP的数据的数据应用进程应用进程RcvBufferLastByte
21、Rcvd LastByteRead RcvBuffer接收方:接收方:RcvWindows=RcvBuffer LastByteRcvd-LastByteRead发送方:发送方:LastByteSent LastByteAcked RcvWindow接收端窗口rwnd和拥塞窗口cwnd1/12/202338Thursday,January 12,2023393.5 面向连接的传输:TCPq一种特殊的情况n接收方通知发送方RcvWindow为0,且接收方无任何数据传送给发送方n发送方持续向接受方发送只有一个字节数据的报文段,目的是试探1/12/202339收到确认即可前移100200300400
22、5006007008009001012013014015016017018011发送窗口可发送不可发送指针n发送端要发送 900 字节长的数据,划分为 9 个 100 字节长的报文段,而发送窗口确定为 500 字节。n发送端只要收到了对方的确认,发送窗口就可前移。n发送 TCP 要维护一个指针。每发送一个报文段,指针就向前移动一个报文段的距离。1/12/202340n发送端已发送了 400 字节的数据,但只收到对前 200 字节数据的确认,同时窗口大小不变。n现在发送端还可发送 300 字节。收到确认即可前移1002003004005006007008009001012013014015016
23、017018011可发送不可发送指针1002003004005006007008009001012013014015016017018011发送窗口可发送不可发送指针发送窗口前移已发送并被确认已发送但未被确认1/12/202341n发送端收到了对方对前 400 字节数据的确认,但对方通知发送端必须把窗口减小到 400 字节。n现在发送端最多还可发送 400 字节的数据。1002003004005006007008009001012013014015016017018011已发送并被确认已发送但未被确认可发送不可发送指针10020030040050060070080090010120130140
24、15016017018011已发送并被确认可发送不可发送指针发送窗口前移发送窗口缩小1/12/202342利用可变窗口大小进行流量控制双方确定的窗口值是 400 SEQ=1SEQ=201SEQ=401SEQ=301SEQ=101SEQ=501ACK=201,WIN=300ACK=601,WIN=0ACK=501,WIN=200主机 A主机 B允许 A 再发送 300 字节(序号 201 至 500)A 还能发送 200 字节A 还能发送 200 字节(序号 301 至 500)A 还能发送 300 字节A 还能发送 100 字节(序号 401 至 500)A 超时重发,但不能发送序号 500
25、以后的数据允许 A 再发送 200 字节(序号 501 至 700)A 还能发送 100 字节(序号 501 至 700)不允许 A 再发送(到序号 600 的数据都已收到)SEQ=201丢失!1/12/202343Thursday,January 12,202344TCP的拥塞控制nTCP进行拥塞控制的方法进行拥塞控制的方法q每个发送方自动感知网络拥塞的程度q发送方根据感知的结果限制外发的流量n如果前方路径上出现了拥塞,则降低发送速率n如果前方路径上没有出现拥塞,则增加发送速率1/12/20234445TCP拥塞控制nTCP拥塞控制需要解决的三个问题拥塞控制需要解决的三个问题qTCP发送方如
26、何限制外发流量的速率n发送端的主机在确定发送报文段的速率时,既要根据接收端的接收能力,又要从全局考虑不要使网络发生拥塞。LastByteSent-LastByteAcked minCongWin,RcvWindowq发送方如何感知拥塞n超时n三个冗余ACKq在感知到拥塞后,发送方如何调节发送速率rate=CongWin RTT Bytes/sec1/12/20234546TCP拥塞控制nTCP拥塞控制算法(拥塞控制算法(Reno算法)算法)q加性增,乘性减(AIMD)n出现丢包事件后将当前 CongWin 大小减半,可以大大减少注入到网络中的分组数n当没有丢包事件发生,每个RTT之后将Cong
27、Win增大1个MSS使拥塞窗口缓慢增大,以防止网络过早出现拥塞拥塞窗口拥塞窗口时间时间1/12/202346Thursday,January 12,202347TCP拥塞控制q慢启动n建立连接时,CongWin=1 MSSq例如:MSS=500 bytes&RTT=200 msecq初始速率=20 kbpsn可用带宽 MSS/RTTq初始阶段以指数的速度增加发送速率n连接初始阶段,以指数的速度增加发送速率,直到发生一个丢包事件为止q每过一个RTT将CongWin的值翻倍q每收到一个ACK就增加Congwin总结总结:初始速率很低但速率的增长速度很快初始速率很低但速率的增长速度很快1/12/20
28、2347Thursday,January 12,202348TCP拥塞控制q慢启动主机 A1个报文段RTT主机 B时间两个报文段四个报文段1/12/202348Thursday,January 12,202349TCP拥塞控制q对超时事件的反应n门限值设为当前CongWin的一半(门限值初始值65kB)n将CongWin设为1个 MSS大小;n窗口以指数速度增大n窗口增大到门限值之后,再以线性速度增大q对收到3个重复ACK的反应n将CongWin减为原来的一半n线性增大拥塞窗口特别说明:早期的TCP Tahoe版本对上述两个事件并不区分,统一将CongWin降为1。实际上,3个重复的ACK相对
29、超时来说是一个预警信号,因此在Reno版中作了区分1/12/202349乘法减小(multiplicative decrease)n“乘法减小“是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 ssthresh 设置为当前的拥塞窗口值乘以 0.5。n当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注入到网络中的分组数。1/12/202350加法增大(additive increase)n“加法增大”是指执行拥塞避免算法后,当收到对所有报文段的确认就将拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥
30、塞。1/12/202351强调说明 n“拥塞避免”并非指完全能够避免了拥塞。利用以上的措施要完全避免网络拥塞还是不可能的。n“拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。1/12/202352慢开始和拥塞避免算法的实现举例 当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。慢开始门限的初始值设置为 16 个报文段,即 ssthresh=16。246810121416182022004812162024传输次数拥塞窗口 cwnd进入拥塞避免发生超时指数规律增长线性规律增长ssthresh=16慢开始慢开始拥塞避免拥塞
31、避免更新后的 ssthresh=12进入拥塞避免1/12/202353慢开始和拥塞避免算法的实现举例 发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。246810121416182022004812162024传输次数拥塞窗口 cwnd进入拥塞避免发生超时指数规律增长线性规律增长ssthresh=16慢开始慢开始拥塞避免拥塞避免更新后的 ssthresh=12进入拥塞避免1/12/202354慢开始和拥塞避免算法的实现举例 在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段
32、 M0。246810121416182022004812162024传输次数拥塞窗口 cwnd进入拥塞避免发生超时指数规律增长线性规律增长ssthresh=16慢开始慢开始拥塞避免拥塞避免更新后的 ssthresh=12进入拥塞避免1/12/202355慢开始和拥塞避免算法的实现举例 246810121416182022004812162024传输次数拥塞窗口 cwnd进入拥塞避免发生超时指数规律增长线性规律增长ssthresh=16慢开始慢开始拥塞避免拥塞避免更新后的 ssthresh=12进入拥塞避免发送端收到 ACK1(确认 M0,期望收到 M1)后,将 cwnd 从 1 增大到 2,于
33、是发送端可以接着发送 M1 和 M2 两个报文段。1/12/202356慢开始和拥塞避免算法的实现举例 接收端发回 ACK2 和 ACK3。发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1。现在发送端的 cwnd 从 2 增大到 4,并可发送 M3 M6共 4个报文段。246810121416182022004812162024传输次数拥塞窗口 cwnd进入拥塞避免发生超时指数规律增长线性规律增长ssthresh=16慢开始慢开始拥塞避免拥塞避免更新后的 ssthresh=12进入拥塞避免1/12/202357慢开始和拥塞避免算法的实现举例 发送端每收到一个对新报文段的确认
34、 ACK,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输次数按指数规律增长。246810121416182022004812162024传输次数拥塞窗口 cwnd进入拥塞避免发生超时指数规律增长线性规律增长ssthresh=16慢开始慢开始拥塞避免拥塞避免更新后的 ssthresh=12进入拥塞避免1/12/202358慢开始和拥塞避免算法的实现举例 当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd=16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。246810121416182022004812162024传输次数拥塞窗口 cwnd进入拥
35、塞避免发生超时指数规律增长ssthresh=16慢开始慢开始线性规律增长拥塞避免拥塞避免更新后的 ssthresh=12进入拥塞避免1/12/202359慢开始和拥塞避免算法的实现举例 假定拥塞窗口的数值增长到 24 时,网络出现超时(表明网络拥塞了)。246810121416182022004812162024传输次数拥塞窗口 cwnd进入拥塞避免发生超时指数规律增长线性规律增长ssthresh=16慢开始慢开始拥塞避免拥塞避免更新后的 ssthresh=12进入拥塞避免1/12/202360慢开始和拥塞避免算法的实现举例 更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一
36、半),拥塞窗口再重新设置为 1,并执行慢开始算法。246810121416182022004812162024传输次数拥塞窗口 cwnd进入拥塞避免发生超时指数规律增长线性规律增长ssthresh=16慢开始慢开始拥塞避免拥塞避免更新后的 ssthresh=12进入拥塞避免1/12/202361慢开始和拥塞避免算法的实现举例 当 cwnd=12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。246810121416182022004812162024传输次数拥塞窗口 cwnd进入拥塞避免发生超时指数规律增长线性规律增长ssthresh=16慢开
37、始慢开始拥塞避免拥塞避免更新后的 ssthresh=12进入拥塞避免1/12/2023623.快重传和快恢复n快速重传快速重传q超时周期往往太长n增加重发丢失分组的延时q通过重复的ACK检测丢失报文段n发送方常要连续发送大量报文段n如果一个报文段丢失,会引起很多连续的重复ACK.q如果发送收到一个数据的3个重复的ACK,它会认为确认数据之后的报文段丢失n快速重传:在超时到来之前重传报文段1/12/202363快重传举例M1,M2ACK2,ACK3M4主机 A主机 BB 确认 M1 和 M2A 发送 M1 和 M2A 收到了三个重复的确认 ACK3,就立即重传 M3,而不必等待超时重传。M3丢失
38、!A 发送 M3 但丢失了A 发送 M4ACK3M5A 发送 M5ACK3B 发送第二个重复确认 ACK3M6A 发送 M6ACK3M3B 发送第三个重复确认 ACK3B 只能再次确认 M2(因为 M3 没有收到)1/12/202364快恢复算法(1)当发送端收到连续三个重复的 ACK 时,就重新设置慢开始门限 ssthresh。(2)与慢开始不同之处是拥塞窗口 cwnd 不是设置为 1,而是设置为 ssthresh+3 MSS。(3)若收到的重复的 ACK 为 n 个(n 3),则将 cwnd 设置为 ssthresh+n MSS。(4)若发送窗口值还容许发送报文段,就按拥塞避免算法继续发送
39、报文段。(5)若收到了确认新的报文段的 ACK,就将 cwnd 缩小到 ssthresh。1/12/202365TCP 的重传机制n重传机制是 TCP 中最重要和最复杂的问题之一。nTCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。1/12/20236667nTCP超时的设置超时的设置q如何设置TCP的超时n应该大于RTTq但 RTT是变化的n太短:q造成不必要的重传n太长:q对丢包反应太慢TCP 的重传机制1/12/20236768q如何估算 RTTn样本RTT(SampleRTT):对报文段从发出到收到该报文段的确认之间
40、的时间进行测量q忽略重传n样本RTT会有波动,要使得估算RTT更平滑,需要将最近几次的测量进行平均,而非仅仅采用最近一次的SampleRTTEstimatedRTT=(1-)*EstimatedRTT+*SampleRTT参考值:=0.125TCP 的重传机制1/12/202368往返时延 RTT?往返时间的测量相当复杂 nTCP 报文段 1 没有收到确认。重传(即报文段 2)后,收到了确认报文段 ACK。n如何判定此确认报文段是对原来的报文段 1 的确认,还是对重传的报文段 2 的确认?发送一个TCP 报文段超时重传TCP 报文段收到 ACK时间12往返时延 RTT?是对哪一个报文段的确认?
41、1/12/20236970nRTT估计样本与RTT估计TCP 的重传机制1/12/20237071q考虑RTT的波动,估计EstimatedRTT与SampleRTT的偏差DevRTT=(1-)*DevRTT+*|SampleRTT-EstimatedRTT|(参考值参考值,=0.25)TimeoutInterval=EstimatedRTT+4*DevRTTTCP中的超时间隔为中的超时间隔为TCP 的重传机制1/12/202371TCP的连接管理-运输连接的三个阶段 n运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。n连接建立过
42、程中要解决以下三个问题:q要使每一方能够确知对方的存在。q要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。q能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。1/12/202372客户/服务器方式 nTCP 的连接和建立都是采用客户服务器方式。n主动发起连接建立的应用进程叫做客户(client)。n被动等待连接建立的应用进程叫做服务器(server)。1/12/202373用三次握手建立 TCP 连接 SYN,SEQ=x主机 BSYN,ACK,SEQ=y,ACK=x 1ACK,SEQ=x+1,ACK=y 1被动打开主动打开确认确认主机 A连接请求1/12/202
43、374建立 TCP 连接nA 的 TCP 向 B 发出连接请求报文段,其首部中的同步比特 SYN 应置为 1,并选择序号 x,表明传送数据时的第一个数据字节的序号是 x+1。nB 的 TCP 收到连接请求报文段后,如同意,则发回确认。nB 在确认报文段中应将 SYN 置为 1,其确认号应为 x 1,同时也为自己选择序号 y。nA 收到此报文段后,向 B 给出确认,其确认号应为 y 1。nA 的 TCP 通知上层应用进程,连接已经建立。n当运行服务器进程的主机 B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程,连接已经建立。1/12/202375TCP 连接释放的过程 FIN,SEQ
44、=xACK,SEQ=y,ACK=x 1ACK,SEQ=x+1,ACK=y 1应用进程释放连接A 不再发送报文FIN,ACK,SEQ=y,ACK=x+1主机 B主机 A通知主机应用进程应用进程释放连接B 不再发送报文确认确认1/12/202376Thursday,January 12,2023776.2.2 UDP 协议n一个最简单的运输层协议一个最简单的运输层协议q多路复用/多路分解服务q差错检查n适应C/S模式的简单请求/响应通信需要n UDP保留各报文间的边界,不把应用进程多次发送的数据合并成一个包发出去,且发包后不对该包缓存,这对简单请求/响应很方便;n“尽力而为”服务,UDP报文段可能
45、会:q丢失q应用数据不按序到达1/12/202377Thursday,January 12,202378nUDP处理数据的流程处理数据的流程q发送方n从应用进程得到数据n附加上为多路复用/多路分解所需的源和目的端口号及差错检测信息,形成报文段(数据报)n递交给网络层,尽力而为的交付给接收主机q接收方n从网络层接收报文段(数据报)n根据目的端口号,将数据交付给相应的应用进程UDP通信事先无需握手,是通信事先无需握手,是无连接的无连接的UDP报文段之间是相互独立的报文段之间是相互独立的6.2.2 UDP 协议1/12/202378Thursday,January 12,202379nUDP报文段的
46、结构报文段的结构源端口源端口#目的端口目的端口#32 位位应用数据应用数据(报文报文)长度长度检查和检查和包括首部在内的包括首部在内的UDP报文段长度报文段长度,(以字节为单位)(以字节为单位)6.2.2 UDP 协议整个报文的校验和。整个报文的校验和。1/12/202379Thursday,January 12,202380nUDP的优势的优势q无需建立连接建立连接会增加时延q简单发送方和接收方无需维护连接状态q段首部开销小TCP:20Byte vs UDP:8Byteq无拥塞控制UDP 可按需要随时发送6.2.2 UDP 协议1/12/202380Thursday,January 12,202381n部分采用部分采用UDP协议的应用协议的应用q远程文件系统(NFS)q流式多媒体q因特网电话q网络管理(SNMP)q选路协议(RIP)q域名解析(DNS)6.2.2 UDP 协议1/12/20238182nUDP大量应用可能导致的严重后果大量应用可能导致的严重后果q路由器中大量的分组溢出q显著减小TCP通信的速率,甚至挤垮TCP会话n使用使用UDP的可靠数据传输的可靠数据传输q在应用层实现数据的可靠传输q增加了应用进程的实现难度6.2.2 UDP 协议1/12/202382