《TCP协议》PPT课件.ppt_第1页
《TCP协议》PPT课件.ppt_第2页
《TCP协议》PPT课件.ppt_第3页
《TCP协议》PPT课件.ppt_第4页
《TCP协议》PPT课件.ppt_第5页
已阅读5页,还剩130页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章 TCP协议 TCP/IP详解卷1:CH17、CH18、CH19、CH20、CH21、CH22、CH23、CH24,主要内容,2.1 TCP回顾 2.2 TCP连接的建立与终止 2.3 TCP的数据传输(交互数据流和成块数据流) 2.4 TCP的超时与重传 2.5 TCP的坚持定时器和保活定时器 2.6 TCP的未来和性能,2.1 TCP,T C P提供一种面向连接的、可靠的字节流服务 在一个T C P连接中仅有两方进行彼此通信 广播和多播不能用于T C P,端口,发送 TCP 报文段,TCP,TCP,接收缓存,发送缓存,报文段,报文段,报文段,端口,发送端,接收端,向发送缓存 写入数据块,从接收缓存 读取数据块,应用进程,应用进程,TCP报文段被封装在一个IP数据报中进行传输,T C P提供可靠性的方式,应用数据被分割成T C P认为最适合发送的数据块 当T C P发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。 当T C P收到发自T C P连接另一端的数据时,它将发送一个确认。,当TCP收到发自TCP连接另一端的数据,它将发送一个确认。 TCP将保持它首部和数据的检验和 既然TCP报文段作为IP据报来传输,而IPP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要, TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。 既然IP数据报会发生重复, TCP 的接收端必须丢弃重复的数据。 TCP还能提供流量控制,TCP的编号与确认,按字节编号 确认是对收到的数据的最高序号的确认,表示期望下次收到的第一个字节的序号。 由于TCP能够提供全双工通信,因此,可以采用捎带确认以提高传输效率。,TCP的简单确认,发送窗口大小 = 1,发方,收方,Send 1,Receive 1,发方,收方,发送窗口大小 = 1,Send 1,Receive 1,Receive ACK 2,Send ACK 2,发方,收方,发送窗口大小 = 1,Send 1,Receive 1,Receive ACK 2,Send ACK 2,Send 2,Receive 2,发方,收方,发送窗口大小 = 1,Send 1,Receive 1,Receive ACK 2,Send ACK 2,Send 2,Receive 2,Receive ACK 3,Send ACK 3,发方,收方,发送窗口大小 = 1,Send 1,Receive 1,Receive ACK 2,Send ACK 2,Send 2,Receive 2,Receive ACK 3,Send ACK 3,Send 3,Receive 3,发方,收方,发送窗口大小 = 1,Send 1,Receive 1,Receive ACK 2,Send ACK 2,Send 2,Receive 2,Receive ACK 3,Send ACK 3,Send 3,Receive 3,Receive ACK 4,Send ACK 4,发方,收方,发送窗口大小 = 1,TCP 的编号与确认号,Source Port,Dest. Port,Sequence #,Acknowledgement #,Source,Dest.,Seq.,Ack.,1028,23,10,1,I just sent #10.,I just got #10, now I need #11.,Source Port,Dest. Port,Sequence #,Acknowledgement #,1028,23,Source,Dest.,10,Seq.,1,Ack.,1028,23,Source,Dest.,11,Seq.,1,Ack.,I just sent #10.,Source Port,Dest. Port,Sequence #,Acknowledgement #,1028,23,Source,Dest.,11,Seq.,2,Ack.,1028,23,Source,Dest.,10,Seq.,1,Ack.,1028,23,Source,Dest.,11,Seq.,1,Ack.,I just got #10, now I need #11.,I just sent #11.,Source Port,Dest. Port,Sequence #,Acknowledgement #,1028,23,Source,Dest.,11,Seq.,101,Ack.,1028,23,Source,Dest.,10,Seq.,100,Ack.,1028,23,Source,Dest.,11,Seq.,100,Ack.,1028,23,Source,Dest.,12,Seq.,101,Ack.,I just got #11, now I need #12.,I just sent #11.,TCP 的包格式,源端口 (16),目的端口 (16),顺序号 (32),头长 (4),确认序号 (32),保留 (6),窗口 (16),检验和 (16),紧急指针(16),选项和填充 (可选 ),数据 (可变长),20 字节,位 0,15,16,31,TCP 首部,20 字节的 固定首部,目 的 端 口,首部 长度,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,F I N,32 bit,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 首部,发送在前,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,填 充,源端口和目的端口字段各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。,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,填 充,序号字段占 4 字节。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,填 充,确认号字段占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。,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,填 充,首部长度占 4 bit,它指出 TCP 报文段首部有多少个4 字节,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,填 充,保留字段占 6 bit,保留为今后使用,但目前应置为 0。,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,填 充,紧急比特 URG 当 URG 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。,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,填 充,确认比特 ACK 只有当 ACK 1 时确认号字段才有效。当 ACK 0 时,确认号无效。,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,填 充,推送比特 PSH (PuSH) 接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。,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,填 充,复位比特 RST (ReSeT) 当 RST 1 时,表明 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,填 充,同步比特 SYN 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。,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,填 充,终止比特 FIN (FINal) 用来释放一个连接。当FIN 1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。,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,填 充,窗口字段 占 2 字节,用来控制对方发送的数据量,单位为字节。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,填 充,检验和 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。,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,填 充,紧急指针字段 占 16 bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。,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,填 充,选项字段 长度可变。TCP 只规定了一种选项,即最大报文段长度 MSS (Maximum Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”,MSS 是 TCP 报文段中的数据字段的最大长度。 数据字段加上 TCP 首部 才等于整个的 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,填 充,填充字段 这是为了使整个首部长度是 4 字节的整数倍。,2.2 TCP连接的建立与终止,三次握手建立连接 提供全双工的可靠交付的服务 按字节编号 采用可变窗口进行流量控制,一、建立连接,在连接建立过程中要解决三个问题: 要使每一方能够确知对方的存在 要允许双方协商一些参数,如:MTU、Wmax、QoS等 能对运输实体的资源进行分配,如:缓存大小、连接表中的项目等。 采用Client/Server方式工作,Send SYN (seq=100 ctl=SYN),SYN received,Host A,Host B,TCP 使用三次握手建立连接,Send SYN (seq=100 ctl=SYN),SYN received,Send SYN, ACK (seq=300 ack=101 ctl=syn,ack),Host A,Host B,SYN received,Send SYN (seq=100 ctl=SYN),SYN received,Send SYN, ACK (seq=300 ack=101 ctl=syn,ack),Established (seq=101 ack=301 ctl=ack),Host A,Host B,SYN received,二、 释放连接,Send FIN (FIN,seq=X),Host A,Host B,FIN received,Send ACK (ACK=X+1),Host A,Host B,ACK received,Send FIN (FIN,seq=X),Half-close 半关闭,Host A,Host B,Send FIN (FIN,seq=X),FIN received,Send ACK (ACK=X+1),Host A,Host B,ACK received,Send FIN (FIN,seq=X),Half-close 全关闭,FIN received,Host A,Host B,Send FIN (FIN,seq=X),FIN received,Send ACK,FIN (FIN,seq=y,ACK=X+1),Host A,Host B,FIN,ACK received,Send FIN (FIN,seq=X),FIN received,Send ACK,FIN (FIN,seq=y,ACK=X+1),Host A,Host B,FIN,ACK received,Send FIN (FIN,seq=X),Send ACK,FIN (FIN,ACK=Y+1),Full-close 全关闭,连接建立与终止的时间系列,初始序列号 ISN,当一端为建立连接而发送它的SYS时,它为连接选择一个初始序号。ISN随时间而变化,因此每个连接都将具有不同的ISN。 在4 . 4 B S D(和多数的伯克利的实现版)中,系统初始化时初始的发送序号被初始化为1,这个变量每8 ms加1,另外,每次建立一个连接后,这个变量将增加64000。,连接终止期间报文段的正常交换,三、 连接建立的超时,有很多情况导致无法建立连接。如: 服务器主机没有处于正常状态。 服务器忙,B S D版的T C P软件采用一种500 ms的定时器,当我们键入一个命令(如t e l n e t)后,将建立一个6秒的定时器(1 2个时钟滴答( t i c k),但它可能在之后的5 . 5秒 6秒内的任意时刻超时。 尽管定时器初始化为1 2个时钟滴答,但定时计数器会在设置后的第一个0500 ms中的任意时刻减1。从那以后,定时计数器大约每隔500 ms减1,但在第1个500 ms内是可变的(我们使用限定词“大约”是因为在T C P每隔500 ms获得系统控制的瞬间,系统内核可能会优先处理其他中断)。,TCP的500 ms定时器,当滴答计数器为0时,6秒的定时器便会超时,这个定时器会在以后的2 4秒(4 8个滴答)重新复位。之后的下一个定时器将更接近2 4秒,因为当T C P的500 ms定时器被内核调用时,它就会被修改一次。,四、最大报文段长度MSS,MSS表示TCP报文段的数据长度 当一个连接建立时,连接的双方都要通告各自的MSS。 当建立一个连接时,每一方都有用于通告它期望接收的M S S选项(M S S选项只能出现在S Y N报文段中)。 如果一方不接收来自另一方的M S S值,则M S S就定为默认值5 3 6字节.,MSS的大小,如果没有分段发生, MSS越大越好。 当T C P发送一个S Y N时,或者是因为一个本地应用进程想发起一个连接,或者是因为收到了另一端主机的一个连接请求,它能将M S S值设置为外出接口上的M T U长度减去固定的I P首部和T C P首部长度。 如果目的I P地址为“非本地的,M S S通常的默认值为5 3 6。,五、复位报文段,一般说来,无论何时一个报文段发往基准的连接出现错误, T C P都会发出一个复位报文段。如: 到不存在的端口的连接请求 异常终止一个连接 检测半打开连接,到不存在的端口的连接请求,产生复位的一种常见情况是当连接请求到达时,目的端口没有进程正在听。 对于U D P,当一个数据报到达目的端口时,该端口没在使用,它将产生一个I C M P端口不可达的信息。 而T C P则使用复位,异常终止一个连接,在排队数据都已发送之后才发送F I N,正常情况下没有任何数据丢失。但也有可能发送一个复位报文段而不是F I N来中途释放一个连接,称这为异常释放。异常终止一个连接对应用程序来说有两个优点: (1)丢弃任何待发数据并立即发送复位报文段; (2)R S T的接收方会区分另一端执行的是异常关闭还是正常关闭。 应用程序使用的A P I必须提供产生异常关闭而不是正常关闭的手段。,检测半打开连接,如果一方已经关闭或异常终止连接而另一方却还不知道,我们将这样的T C P连接称为半打开的。任何一端的主机异常都可能导致发生这种情况。只要不打算在半打开连接上传输数据,仍处于连接状态的一方就不会检测另一方已经出现异常。 如果服务器突然断电又重新启动其T C P ,它将丢失复位前连接的所有信息,因此它不知道数据报文段中提到的连接。 T C P的处理原则是接收方以复位作为应答,六、同时打开,七、同时关闭,八、TCP选项 RFC793 RFC1323,TCP 的 状 态 变 迁 图,CLOSED,ESTABLISHED,LISTEN,CLOSE_WAIT,FIN_WAIT_1,SYN_RCVD,FIN_WAIT_2,CLOSING,TIME_WAIT,SYN_SENT,LAST_ACK,主动打开,被动打开,被动关闭,主动关闭,起点,被动打开,主动打开 发送 SYN,同时打开,收到 SYN,发送 SYN, ACK,收到 ACK,数据传送 阶段,关闭 发送 FIN,关闭 发送 FIN,关闭 发送 FIN,收到 RST,收到 SYN 发送 SYN, ACK,关闭 或超时,收到 ACK,收到 SYN, ACK 发送 ACK,收到 ACK,收到 ACK,收到 FIN 发送 ACK,收到 FIN, ACK 发送 ACK,收到 FIN 发送 ACK,同时关闭,收到 FIN 发送 ACK,发送 SYN,定时经过两倍报文段寿命后,关闭,TCP正常连接建立和终止所对应的状态,2.3 TCP的数据传输,包括交互数据流和成块数据流 若按分组数量计算,约有一半的T C P报文段包含成块数据(如F T P、电子邮件和U s e n e t新闻),另一半则包含交互数据(如Te l n e t和R l o g i n)。 若按字节计算,则成块数据与交互数据的比例约为9:1 。 T C P需要同时处理这两类数据,但使用的处理算法则有所不同。,一、TCP的交互数据流,输入Rlogin 或Telnet后会产生4个报文段: (1)来自客户的交互按键; (2)来自服务器的按键确认; (3)来自服务器的按键回显; ( 4)来自客户的按键回显确认。,一般可以将报文段2和3进行合并按键确认与按键回显一起发送(捎带确认)。,Telnet有一个选项允许客户发送一行到服务器,通过使用这个选项可以减少网络的负载。,在象R l o g i n这样的连接上客户一般每次发送一个字节到服务器,这就产生了一些4 1字节长的分组:2 0字节的I P首部、2 0字节的T C P首部和1个字节的数据。 在局域网上,这些小分组(被称为微小分组)通常不会引起麻烦,因为局域网一般不会出现拥塞。 但在广域网上,这些小分组则会增加拥塞出现的可能。 一种简单和好的方法就是采用N a g l e算法 RFC 896,Nagle算法,若数据是逐个字节到达发送端,则发送端就将第一个字节发送出去,并将后面到达的字节缓存起来。 当收到对第一个字节的确认后,再将缓存中的所有字符组装成一个报文发送出去,同时继续对到达的字符进行缓存。 只有在收到确认后才发送下一个报文。 为解决字符到达快、网络速度慢的情况,还规定:当到达的字节达到窗口大小的一半或者已达到报文的最大长度时,就立即发送下一个报文。,虽然Nagle算法已被很多TCP程序采用,但是有时候最好不用。 如:在Internet上使用X-Windows,小消息(鼠标移动)必须无时延地发送,以便为进行某种操作的交互用户提供实时的反馈。 当服务器接收到该字符后,它并不发送确认,而是继续等待接收序列中的其他字符。 对交互用户而言,这将产生明显的时延,使用户无法忍受,这时最好关闭这个算法。,糊涂窗口综合症,接受端的缓存已满,而交互式的应用进程一次只从缓存中读取1个字符,然后向发送端发确认,并通知窗口为1字节(发40字节的IP报文)。 接着,发送端又发来1个字节(发41字节的IP报文)。 接收端发确认,仍然通知窗口为1字节。如此进行下去 使得网络效率非常低,两种解决方法,Clark方法:禁止接收方发送1字节的窗口,而是让接收端等待一段时间,等到缓存能容纳一个最长的报文段,或者空出一般的空间,才发送确认。 发送端不要发送太小的报文段,而是将数据积累成足够大的报文段,或者当接收端有一半的空闲缓存时才发送。 这两种方法可配合使用,交互数据总是以小于最大报文段长度的分组发送,二、TCP的成块数据流,TCP 采用大小可变的滑动窗口进行流量控制。窗口大小的单位是字节。 在 TCP 报文段首部的窗口字段写入的数值就是当前给对方设置的发送窗口数值的上限。 发送窗口在连接建立时由双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值(可增大或减小)。,TCP 的可变滑动窗口,发方,收方,Window size = 3 Send 2,Window size = 3 Send 1,Window size = 3 Send 3,发方,收方,Window size = 3 Send 2,Window size = 3 Send 1,Window size = 3 Send 3,ACK 3 Window size = 2,Packet 3 is Dropped,发方,收方,Window size = 3 Send 2,Window size = 3 Send 1,Window size = 3 Send 3,ACK 3 Window size = 2,Packet 3 is Dropped,Window size = 2 Send 4,Window size = 2 Send 3,发方,收方,Window size = 3 Send 2,Window size = 3 Send 1,Window size = 3 Send 3,Packet 3 is Dropped,Window size = 2 Send 4,Window size = 2 Send 3,ACK 5 Window size = 2,Window size = 3,发方,收方,收到确认即可前移,100,200,300,400,500,600,700,800,900,101,201,301,401,501,601,701,801,1,可发送,不可发送,发送端要发送 900 字节长的数据,划分为 9 个 100 字节长的报文段,而发送窗口确定为 500 字节。 发送端只要收到了对方的确认,发送窗口就可前移。 发送 TCP 要维护一个指针。每发送一个报文段,指针就向前移动一个报文段的距离。,收到确认即可前移,100,200,300,400,500,600,700,800,900,101,201,301,401,501,601,701,801,1,不可发送,100,200,300,400,500,600,700,800,900,101,201,301,401,501,601,701,801,1,发送窗口,可发送,不可发送,发送窗口前移,发送端已发送了 400 字节的数据,但只收到对前 200 字节数据的确认,同时窗口大小不变。 现在发送端还可发送 300 字节。,100,200,300,400,500,600,700,800,900,101,201,301,401,501,601,701,801,1,已发送 并被确认,已发送但 未被确认,可发送,不可发送,指针,100,200,300,400,500,600,700,800,900,101,201,301,401,501,601,701,801,1,不可 发送,指针,发送窗口前移,发送端收到了对方对前 400 字节数据的确认,但对方通知发送端必须把窗口减小到 400 字节。 现在发送端最多还可发送 400 字节的数据。,利用可变窗口大小进行流量控制 双方确定的窗口值是 400,主机 A,主机 B,允许 A 再发送 300 字节(序号 201 至 500),A 还能发送 200 字节,A 还能发送 200 字节(序号 301 至 500),A 还能发送 300 字节,A 还能发送 100 字节(序号 401 至 500),A 超时重发,但不能发送序号 500 以后的数据,允许 A 再发送 200 字节(序号 501 至 700),A 还能发送 100 字节(序号 501 至 700),不允许 A 再发送(到序号 600 的数据都已收到),发送数据时,既要考虑到接收端能力,又要使网络不发生拥塞,发送窗口应满足:,通知窗口 接收端根据接收能力许诺的窗口值 拥塞窗口 发送端根据网络拥塞情况得出的窗口值,是指发送方一次可传送的字节数。 发送窗口 =Min通知窗口,拥塞窗口,使用的拥塞控制技术,慢开始(慢启动) 加速递减(乘法减小) 拥塞避免,1. 当一个连接初始化时,拥塞窗口置为1个MSS,并设置慢启动的门限窗口值。 2.发送端若收到了对所有发出的报文段的确认,就在下一次发送时将拥塞窗口加倍;若出现超时,则将当时的拥塞窗口值减半,作为新的门限窗口值,同时将拥塞窗口置为1个MSS。 3. 拥塞窗口重新从1个MSS开始按指数规律增长,但增长到新的门限窗口值时,就每次只将拥塞窗口加1个MSS ,使拥塞窗口按线性规律增长。当网络又出现超时时,仍重复上述过程。,实现步骤,“慢启动”是指每出现一次超时,拥塞窗口都降低到l,使报文段慢慢注人到网络中。 “加速递减”是指每出现一次超时,就将门限窗口值减半。若超时频繁出现,则门限窗口减小的速率是很快的。 “拥塞避免”是指当拥塞窗口增大到门限窗口值时,就将拥塞窗口指数增长速度降低为线性增长,避免网络再次出现拥塞。,慢开始和拥塞避免算法的实现举例,当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。,慢开始门限的初始值设置为 16 个报文段, 即 ssthresh = 16。,2,4,6,8,10,12,14,16,18,20,22,0,0,4,8,12,16,20,24,传输次数,拥塞窗口 cwnd,ssthresh = 16,慢开始,慢开始,拥塞避免,拥塞避免,更新后的 ssthresh = 12,慢开始和拥塞避免算法的实现举例,发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。,2,4,6,8,10,12,14,16,18,20,22,0,0,4,8,12,16,20,24,传输次数,拥塞窗口 cwnd,ssthresh = 16,慢开始,慢开始,拥塞避免,拥塞避免,更新后的 ssthresh = 12,慢开始和拥塞避免算法的实现举例,在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。,2,4,6,8,10,12,14,16,18,20,22,0,0,4,8,12,16,20,24,传输次数,拥塞窗口 cwnd,ssthresh = 16,慢开始,慢开始,拥塞避免,拥塞避免,更新后的 ssthresh = 12,慢开始和拥塞避免算法的实现举例,2,4,6,8,10,12,14,16,18,20,22,0,0,4,8,12,16,20,24,传输次数,拥塞窗口 cwnd,ssthresh = 16,慢开始,慢开始,拥塞避免,拥塞避免,更新后的 ssthresh = 12,发送端收到 ACK1 (确认 M0,期望收到 M1)后,将 cwnd 从 1 增大到 2,于是发送端可以接着发送 M1 和 M2 两个报文段。,慢开始和拥塞避免算法的实现举例,接收端发回 ACK2 和 ACK3。发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1。现在发送端的 cwnd 从 2 增大到 4,并可发送 M4 M6共 4个报文段。,2,4,6,8,10,12,14,16,18,20,22,0,0,4,8,12,16,20,24,传输次数,拥塞窗口 cwnd,ssthresh = 16,慢开始,慢开始,拥塞避免,拥塞避免,更新后的 ssthresh = 12,慢开始和拥塞避免算法的实现举例,发送端每收到一个对新报文段的确认 ACK,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输次数按指数规律增长。,2,4,6,8,10,12,14,16,18,20,22,0,0,4,8,12,16,20,24,传输次数,拥塞窗口 cwnd,ssthresh = 16,慢开始,慢开始,拥塞避免,拥塞避免,更新后的 ssthresh = 12,慢开始和拥塞避免算法的实现举例,当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd = 16 时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。,2,4,6,8,10,12,14,16,18,20,22,0,0,4,8,12,16,20,24,传输次数,拥塞窗口 cwnd,ssthresh = 16,慢开始,慢开始,拥塞避免,更新后的 ssthresh = 12,慢开始和拥塞避免算法的实现举例,假定拥塞窗口的数值增长到 24 时,网络出现超时(表明网络拥塞了)。,2,4,6,8,10,12,14,16,18,20,22,0,0,4,8,12,16,20,24,传输次数,拥塞窗口 cwnd,ssthresh = 16,慢开始,慢开始,拥塞避免,拥塞避免,更新后的 ssthresh = 12,慢开始和拥塞避免算法的实现举例,更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1,并执行慢开始算法。,2,4,6,8,10,12,14,16,18,20,22,0,0,4,8,12,16,20,24,传输次数,拥塞窗口 cwnd,ssthresh = 16,慢开始,慢开始,拥塞避免,拥塞避免,更新后的 ssthresh = 12,慢开始和拥塞避免算法的实现举例,当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。,2,4,6,8,10,12,14,16,18,20,22,0,0,4,8,12,16,20,24,传输次数,拥塞窗口 cwnd,ssthresh = 16,慢开始,慢开始,拥塞避免,拥塞避免,更新后的 ssthresh = 12,乘法减小 (multiplicative decrease),“乘法减小“是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 ssthresh 设置为当前的拥塞窗口值乘以 0.5。 当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注入到网络中的分组数。,加法增大 (additive increase),“加法增大”是指执行拥塞避免算法后,当收到对所有报文段的确认就将拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。,使用这些技术的个前提,由于通信线路带来的误码而使得分组丢失的概率很小(远小于1)。因此,只要出现分组丢失或迟延过长而引起超时重发,就意味着在网络中的某个地方比现了拥塞。下面结合上图来讨论拥塞控制的实现步骤: 拥塞窗口是指发送方一次可传送的字节数。,必须强调指出,“拥塞避免”并非指完全能够避免了拥塞。利用以上的措施要完全避免网络拥塞还是不可能的。 “拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。,8.4 TCP的超时与重传,T C P提供可靠的运输层 它使用的方法之一就是确认从另一端收到的数据 但数据和确认都有可能会丢失 T C P通过在发送时设置一个定时器来解决这种问题 如果当定时器溢出时还没有收到确认,它就重传该数据。 关键就在于超时和重传的策略,即怎样决定超时间隔和如何确定重传的频率。,对每个连接,T C P管理4个不同的定时器,重传定时器 发出数据后启用 坚持定时器 使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。 保活定时器 可检测到一个空闲连接的另一端何时崩溃或重启。 2MSL定时器 测量一个连接处于TIME_WAIT状态的时间。,TCP的重传机制,重传机制是 TCP 中最重要和最复杂的问题之一 TCP每发送一个报文段,就设置一次计时器T,超时未收到确认就重传。 T太小,使得大量报文段重传,给网络增加许多不应有的负担;T太大,使网络的传输效率降低。 传输层的重传定时器(超时计时器)的重传时间T究竟应设置多大?,重传定时器,最好稍大于往返时延 关键:测量往返时延,往返时延的方差很大,由于 TCP 的下层是一个互连网环境,IP 数据报所选择的路由变化很大。因而运输层的往返时延的方差也很大。,时间,数据链路层,T1,T2,T3,往返时延的 概率分布,记录每一个报文段发出的时间 再记录收到相应的确认报文段的时间 这两个时间之差就是报文段的往返时延 将各个报文段的往返时延样本加权平均,就得出报文段的平均

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论