第7章传输控制协议TCP要求:1. 掌握TCP的可靠性机制:确认、重传、序号;2. 掌握TCP的流控和提高传输效率策略:滑动窗口机制;3. 掌握TCP连接的建立与关闭协议:三次握手;4. 掌握TCP的报文段格式;5. 掌握TCP的拥塞控制技术;6. 掌握TCP避免糊涂窗口综合症的技术;了解紧急数据发送和强迫数据发送。
7.概述7.1要实现可靠的数据流传输服务,必须解决哪几个问题?1.可靠性:①防丢失:确认与重传;②防重复:报文段序号;2.传输效率、流量控制:滑动窗口机制;3.拥塞控制:加速递减与慢启动技术;4.建立连接:三次握手协议;改进的三次握手协议。
关闭连接:5.可靠传输服务有哪些特点?①面向数据流;虚电路连接;②有缓冲的传输;③无结构的数据流;④全双工连接。
⑤.7.2 提供可靠性1. 防丢失–带重传的肯定确认技术接收方收数据接收数据发送方数据后向源站发发送分组确认(ACK);发送确认接收分组发送分组接收确认②设置定时发送确认接收分组器,源站在限定超时重传时间内未收到ACK ,则重发。
接收确认.两个问题:如何对待重复的数据?定时器时限设置多长?2. 防重复–可捎带的累计确认技术①为每一分组赋予序号。
②确认时也指明确认哪个分组。
序号同时保证了分组间的正确顺序。
③.3. RTT 与重传定时器问题:超时重传,如何设置定时器的时限?两个概念:①RTT:往返时间,报文段发出到收到确认信息间的时间段。
②自适应重传算法:监视每个连接的性能,由此推算出合适的定时时限。
当连接的性能变化时,随时修改定时时限。
重传定时时限的计算方法:①早期的方法②改进的方法算法和定时器补偿Karn③.(1)早期的方法R:RTT的估计值M:本次测量的RTT值RT0:定时时限修改估计值:R ←αR + (1-α)M(0≤α<1,通常取α=0.9)计算时限:RT0 = βR(β早期取2,后改为4)缺陷:在RTT 变化较大的场合,说明网络某处处于拥塞状态,但上述方法对此反映不敏感,从而造成不必要的重传,进一步加重网络负担。
.(2)改进的方法R:RTT的估计值M:本次测量的RTT值RT0:定时时限Diff:差值Dev :平均偏差的估计值Diff←M -RR ←R + δ*DiffDev ←Dev +ρ*(|Diff| -Dev) (Dev的估计值)RT0 ←R +η*Devδ、ρ在0—1之间,通常取:322= 1/2δ= 2,η= 1/2,ρ.(3)Karn算法和定时器补偿确认二义性:对于重传的报文段,收到确认后是对哪一次传输的确认无法确定。
结果:RTT 样本值无法使用;Karn算法:思想:当超时重传发生时,不再更新RTT估计器,忽略重传样本。
定时器补偿:超时重传发生,加大定时时限:RT0 ←γ*RT0(γ通常取2,即指数避退)。
对重传分组的后续分组,定时时限不变,直到获得一个新的有效样本时再更改时限值。
.7.3 传输效率和流量控制-滑动窗口机制1.一般的滑动窗口机制思想允许发送方不必等确认到来就可继续送下面的分组,但规定一个上限。
若多个分的确认未到时,则暂停发送。
分组流WindowSize=81 2 3 4 5 6 7 8 9 10 11 12 13已发并已发未未发但不能发送可以发得到确认得到确认.2. TCP的滑动窗口技术分组WindowSize=400(5) TC连两端各有1 2 ..100 101102 ……4100 410个窗口(送窗口和未发已发已发不能发送得到确认得到确认可以发收窗口)(1)数据流的各字节被编上序号。
(2) TCP的滑动窗口按字节操作而不是按报文段或分组操作。
(3) TCP窗口大小为字节数。
最大为65535字节。
(4)通信双方都设有发送和接收缓冲区(相当于发送窗口和接收窗口)。
默认大小各系统有差异,如4096、等。
发送缓冲区大小为默认窗口大小。
16384、8192.3. TCP端到端流量控制-窗口大小可变技术时机:目的主机缓冲区变小而不能接收源主机更多的数据时,就要进行流量控制。
TC技术可随时改变窗口大小。
目的主机在确时,还向源主机告知目的主机接收缓冲区的大小发送窗口,初320 321…399200 201 ……101 …始时400发送窗口,变为120确认(200)窗口通告(120)说明:接收方使用0窗口通告来停止所有的传输。
此时,除了紧急数据和窗口试探报文外,不发其它数据。
窗口通告丢失或造成死锁0防止非窗口试探报文:7.4 糊涂窗口综合症SWS 1.什么是SWS ?接收方的小窗口通告造成发送方发送一系列小的报文段,严重浪费网络带宽。
2.启发式的避免策略:接收方:(1)避免小窗口通告,在零窗口通告之后,只在可用缓冲区显著增加(缓冲区空间的一半或一个MSS)后才发送新的窗口通告(2)推迟确认(最多500ms),窗口大小不到避免SWS策略所需的尺寸时,不确认。
为了使发送方正确估计RTT,至少每隔一个报文段要进行正常的确认。
.发送方:避免小报文段发送Nagle算法:自适应推迟传输以便将数据组块(1)连接建立后,最初的数据会立即发送。
(2)当缓冲区中数据不足一个报文段,则推迟发送。
等到一个确认来到(确认触发)时,发送缓冲区中的小报文段。
问题:可能出现死锁吗?确认丢失。
3.说明①Nagle 算法的两个优点:自适应:确认到达得越快,数据也就发送得越快;计算简单:不需要定时器。
②可关闭Nagle 算法,应用程序接口一般提供选项算法。
Nagle 来关闭TCP-NODELAY .7.5 TCP拥塞控制技术拥塞:交换节点(如路由器)数据报负载过重的现象。
回顾:IP层的拥塞控制技术:(ICMP源站抑制报文),是一种被动机制。
TCP拥塞控制的必要性:在TCP层,拥塞造成时延增加,这又会造成超时重传,控制不当会进一步加重拥塞。
采用了一种主动控制机制。
TCP.7.6 TCP报文源端目标端序确认窗码元比保首部长紧急指校验和填充选项(若有)数据1. 报文段和序号:报文段是TCP软件间传输数据的基本单元,每个报文段都有一个序号。
(1)选取初始序号(2)第n+1段的序号=第n段序号+ 第n段数据区字节数)相当于每个字节都有一个序号(首部长度:4字节计数,最大15,TCP首部长度20-60序号:当前报文的序号确认号:希望接收的对方下一报文段序号(已成功接收到的数据字节序+1)说明:(1)序号和确认序号在一起使得确认可捎带进行。
(2)TCP采用累计确认策略。
问题:采用累计确认,确认丢失不一迫使发送方重传,为什么?(3) TCP采用经受时延的确认(时延一般为200ms)。
缺点:发送方无法收到所有成功传输的报文段的确认信息,对往返时间样本的精确测量带来影响。
窗口:通告对等端缓冲区大小,使发送方修改窗口的大小,以便进行收发双方的流量控制。
问题:初始窗口大小如何确定?默认值,在建立连接时互相通告校验和计算:加入伪首部,必须(UDP可选)源IP目标IP长度TCP0协议码元比特(标识报文段的目的与内容):URACPSRSSYFI字节强紧连序确同复同步正常关闭连接异常关闭连接建立连接带有确认选项:第一版TCP:定义了选项表结束、无操作、MSS(最大报文段长度。
选项表结Kind=0(1byte无操Kind=1(1byte 功能:使得选项达字节的整数倍MSS MSS(2byte)Kind=2(1byte)len=4(1byte)M SS过小:效率低MSS过大:考虑分片,丢失可能性增大MSS 接近路径MTU时为最佳(由于路径改变,很难)。
字节536,默认MSS报文能协商SYN只有说明:选项:第二版TCP(rfc1323):增加了窗口扩大因子和时间戳。
窗口扩大因Kind=len=移位数功能:将TCP窗口定义从16bit扩大到32bit。
R2=65535 ╳移位数= R:窗口大小说明:①只能出现在一个SYN报文段中;②主动建立连接的一方发送这个选项,被动方收到该选项后才能发此选项;每个方向上的扩大因子可以不同;③.时间戳选项:kind=len=1时间戳(4 byte时间戳回显应(4 byte时间戳发送方填时间戳回显应答:接收方确认复制发回功能:更好地估算RTT防止回绕的序号问题:如果接收方发送了一个对两个报文段的确认,那么应该复制哪一个报文的时间戳字段呢?解决:TCP为每个连接保留一个时间戳数值。
1. TCP 设置两个变量:(1)tsrecent:每个连接的时间戳数值;(2)lastack: 最后发送的ACK的确认序号;2. 当包含lastack的报文段到达时,其中的时间戳被保存至tsrecent;3. 无论何时发送确认,tsrecent将被写入时间戳回显应答字段,确认序号则被保存到。
lastack分析:1. 若ACK被接收方延迟,则回显的是第一个报文段。
例:若包含1~1024和1025~2048字节的两个报文段到达,则:lastack为1025,回显时间戳为1~1024的时戳。
原因:发送方在进行重传超时时间的计算时,必须将延迟的ACK也考虑在内。
2. 若收到的报文失序,则丢失的报文段到达时,它的时结果:造成RTT 估计过高,比过低好间戳被回显。
例:收到报文的顺序为1~1024->2049~4072->102 5~2048,则处理情况如下:(1)确认号为1025,回显时间戳为1~1024的时戳;(2)确认号为1025,回显时间戳为1~1024的时戳;的时戳;1025~2048,回显时间戳为4073)确认号为3(.功能:连接的建立与关闭7.7 TCP1. 同意连接协商,做:三次握手1.建立连接好传输数据的准备;2.各自报文ISN服务客户始序列协不能报文SY发送‘1');seq=x REQUEST SYN接收3. 协商MSS(只有SYN seq=y,ACK x+1发送SYN报文段能协商ACCEPTED SYN+ACK接收MSS )。
ACK y+1发送CONFIRM 说明:ACK 接收报文段占用初始SYN 发送数据的第一序号,。
ISN+1字节序号为关闭连接:改进的三次握手2.说明:2网点1网点FI报文段占用FI发seq=AC FI接ACK x+报文段不占用序号TC提供了半关AC接收能力:连接的一端在结FIN seq=y 发送束它的发送后还能接收ACKx+1FIN +ACK接收来自另一端数据。
ACK y+1发送③有些编程接口提供ACK接收close来关闭TCP连接,提供shutdown加特殊参数来实现半关闭。
异常时强行关闭连接3.报文段;双方立即停连接复位RST–,发起端发RST止传输,并退出连接。
.一个DOS命令:Netstat Active ConnectionsProto Local AddressForeign Address StateTCP koukou:1056202.196.56.240:https ESTABLISHED列出与每个端口相关的进程–o:Netstat显示路由表–r:Netstat7.8 紧急数据和强迫数据发送1. 紧急数据发送和带外数据带外数据:源站不能按字节流的顺序而需要立即发给接收方并及时处理的数普通数据流中的紧急数UR ……1…………数据区……紧急指针……紧急数据接收方收到URG 报文段,立即把紧急数据交应用程序处理,然后再处理普通数据流。