第8章传输控制8.1概述8.2传输层端口8.3用户数据报协议UDP8.4传输控制协议TCP8.1概述传输层为用户的应用进程提供了传输控制服务,提供一条端到端(endtoend)的逻辑通道,它连接源站和目的站的两个传输层实体,不涉及路径中间的路由器,传输层协议对这条逻辑信道进行数据传输过程的控制,把传输数据交给目的应用进程。传输层的另一个重要目的是要加强数据传输的QoS,在不可靠的IP服务基础上,提高传输的可靠性。这主要体现在传输控制协议TCP上。面向连接,流量控制,拥塞控制和差错控制。UDP是非连接,不能提供可靠的传输服务,但较之TCP,简便快捷,服务效率高。8.1概述传输层基于端口机制为源和目的应用进程之间提供了端到端的逻辑通信。8.2传输层端口协议端口(protocolport),TCP/UDP通过端口与上层的应用进程交互,端口标识了应用层中不同的进程。端口号(portnumber),16比特,可提供65536个端口。保留端口:全局方式进行统一分配并公布于众,又称为周知端口(well-knownport)。分配给服务器进程,每一种标准的服务器都分配有一个周知端口号。号码为0~1023,由ICANN管理。8.2传输层端口自由端口:本地方式进行分配,用户可自由使用。号码为1024及以上。通信端点的二元组描述:(主机IP地址,端口号)TCP连接的四元组描述:(源主机IP地址,源端口号;目的主机IP地址,目的端口号)端口机制提供了复用(multiplexing)和解复用(demultiplexing)的功能。8.3用户数据报协议UDP用户数据报UDP报文封装UDP报文格式8.3用户数据报协议UDP伪报头(pseudoheader):UDP计算校验和使用的,校验和计算之后就丢弃,为了验证用户数据报是否传到正确的目的地址。UDP的特点可靠性差效率高适合传输实时数据UDP伪报头格式031源站IP地址目的站IP地址填充域(全0)协议UDP长度8.4传输控制协议TCP8.4.1TCP的编号与确认数据流、报文段和编号TCP提供流(stream)传输机制,即数据流,无结构的字节序列。每次传输,把数据流划分为报文段(segment)。TCP对数据流按字节编上序号,序号的空间,32比特,以便使序号循环一周的时间足够长。最大报文段生存时间,120s,MSL不应大于IP数据报的TTL(120秒)。序号循环一周的时间应大于MSL,防止序号回绕。产生相同序号有以下两种情况:不同的TCP连接出现相同的初始序号;同一TCP连接中出现相同序号。8.4.1TCP的编号与确认TCP确认机制累计确认(cumulativeacknowledgement)方式,延迟确认算法(delayedACKalgorithm),延迟时间不能超过500ms。数据捎带确认(piggybackingACK)。TCP收到了失序(outoforder)的报文段,即接收的数据流出现了间断,就立即发出一个对期望接收序号的确认。8.4.2TCP报文段TCP报文段的格式8.4.2TCP报文段TCP报文段选项最大报文段长度选项建立TCP连接时,双方的TCP使用选项字段协商MSS.在互联网环境中,选择合适的MSS是很困难的。TCP使用如下简单方法选择MSS:取建立连接时双方声明的MSS的较小者;如果一方没有声明,MSS取默认值536字节。8.4.2TCP报文段窗口比例因子选项窗口比例因子选项,扩大窗口的数值,双方在建立连接时商定。16比特的窗口字段,限制TCP最多只能在RTT时间内发送64KB的数据。窗口比例因子表示原来16位的窗口值向左移位的次数,扩展后的窗口可达230=16384×64KB。时间戳选项负确认选项可以用于选择重传ARQ。8.4.2TCP报文段TCP选项格式最大报文段长度选项:类=2(1)长度=4(1)最大报文段长度(2)窗口比例因子选项:类=3(1)长度=3(1)移位数(1)时间戳选项:负确认选项:类=8(1)长度=10(1)时间戳(4)时间戳回送(4)类=A(1)长度=7(1)序号(4)未收到段数(1)8.4.3TCP连接管理建立TCP连接TCP连接有如下特点:两端点之间点对点的连接。全双工连接。采用C/S模式。连接的端点是用IP地址和端口号二元组来标识,一个连接则用一个四元组标识。TCP使用三次握手(three-wayhandshake)的方式建立连接。8.4.3TCP连接管理三次握手的报文序列8.4.3TCP连接管理是否可以用两次握手?可能产生错误。建立连接的过程中,可以完成的工作:使每一方都确知对方存在,对方已准备就绪;双方确商定了初始传输序号;双方还可以协商,窗口大小,MSS和窗口比例因子等。三次握手清除延迟的连接请求8.4.3TCP连接管理关闭TCP连接复位TCP连接异常情况突然地关闭连接,发出一个报文段,其码元字段的RST=1。8.4.4TCP重传机制自适应重传机制Internet环境中,传输层数据报往返时间的变化很大。TCP采用自适应重传机制数据链路层和TCP往返时间的概率密度8.4.4TCP重传机制往返时间估计与超时重传机制TCP的自适应重传算法随时估算每个连接的传输时延,据此调整RT的定时时限RTO。报文段样本往返时间RTT(RoundTripTime)平滑往返时间SRTT(SmoothedRoundTripTime):srtt(k)=α×srtt(k-1)+(1-α)×rtt(k)最初的算法:设定RTO:rto(k)=β×srtt(k)最初规范推荐β=2。8.4.4TCP重传机制改进的算法:不使用固定的β,引入了实测值和估计值偏差的平滑值d(k):d(k)=γ×d(k-1)+(1-γ)×|rtt(k)-srtt(k)rto(k)=srtt(k)+4d(k)实际使用算法:srtt(k)=srtt(k-1)+0.125(rtt(k)-srtt(k-1))d(k)=d(k-1)+0.25(|rtt(k)-srtt(k)|-d(k-1))rto(k)=srtt(k)+4d(k)8.4.4TCP重传机制Karn算法确认的二义性计算往返时间估计值时,忽略重传报文段的样本,但当出现超时重传时,使用定时器补偿策略:rto(k)=δ×rto(k-1)(δ=2)8.4.5TCP流量控制可变窗口流量控制可变滑动窗口机制:确认报文中的窗口字段,反映了收方当前可用接收缓冲区的大小,发方对发送窗口的大小在向前滑动时进行调节,使之等于收方反馈的窗口大小,从而调节了发送数据的流量,适应了收方的接收能力。零窗口(zerowindow)坚持定时器(persistencetimer)8.4.5TCP流量控制TCP可变窗口流量控制示例8.4.5TCP流量控制糊涂窗口综合症SWS及其对策发方或收方的应用程序工作速度很慢时,TCP会出现短报文段传输的问题,影响了网络的传输效率。接收应用程序工作慢引起的SWS8.4.5TCP流量控制接收方应对SWS的策略有两种:Clark方法:接收缓冲区满之后,发出零窗口通知,缓冲区可用空间达到MSS或缓冲区总空间的一半之后,才更新窗口的大小。延迟确认:发送方应对SWS的策略:Nagle算法:①当应用程序产生一个第一块数据块时,TCP会立即发送出去,即使只有一个字节。②发送端TCP在输出缓存中积累数据,并等待下列事件之一发生,触发一次新的发送:收到接收端发送的一个确认;数据已积累到一个MSS。③以后的传输,重复步骤②。8.4.6TCP拥塞控制TCP/IP拥塞控制最根本的措施是源抑制(sourcequench)。为了避免和控制拥塞,TCP推荐使用以下技术:慢启动(slowstart);拥塞避免(congestionavoidance);快速重传(fastretransmission);快速恢复(fastrecovery)TCP的拥塞控制机制是闭环控制,可以有以下途径发现拥塞:报文段的重传定时器到时;收到ICMP的源抑制报文。8.4.6TCP拥塞控制拥塞窗口(congestionwindow)发送窗口:swnd=Min(cwnd,rwnd)慢启动门限(slowstartthreshold)当cwnd﹤ssthresh,使用慢启动策略;当cwnd﹥ssthresh,使用拥塞避免策略;当cwnd=ssthresh,即可使用慢启动策略也可使用拥塞避免策略。8.4.6TCP拥塞控制慢启动和拥塞避免拥塞控制策略示例8.4.6TCP拥塞控制慢启动每出现一次拥塞,拥塞窗口都要降到1MSS的起点。拥塞避免当拥塞窗口增大到慢启动门限值之后,将其增长速率由指数增长变为加性增长,以避免再次出现拥塞。快速重传和快速恢复当收到第3个重复的确认时,就认为报文丢失,发生了拥塞,因此重传报文段,而不必等到重传定时器到时,故称快速重传。下面取消慢启动而执行快速恢复,并不把cwnd降到1,而是原来的一半。TCPReno版本采用了快速重传和快速恢复算法,在建立连接和超时重传时则使用慢启动和拥塞避免。8.4.6TCP拥塞控制TCPReno拥塞控制策略示例