1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,试验四-传播层参考答案,计算机学院教学试验中心,-6-10,第1页,第1页,总览:动静结合,TCP,协议理解,静:,TCP,报文格式,首部各字段;,动:协议运营各种机制,连接建立、释放,传播管理:定期器管理即超时与重传机制,流量控制:滑动窗口机制,拥塞控制:慢启动、拥塞避免、快重传、快恢复,糊涂窗口综合症避免:发送端,Nagle,算法、接受端推迟确认技术,第2页,第2页,数据传播要点(兼解疑),TCP,是全双工,即,TCP,每端既可发送数据也可接受数据。每个,TCP,连接中都有两条数据“流”,,TCP,每
2、端发出报文中“序列号”,字段只用于表示自己所,发送,“数据流”数据序号,,“确认号”字段只用于表示(确认)自己所接受“数据流”数据序号,且每次在自己发送数据时捎带确认,“窗口”字段只用于表示给自己所接受“数据流”接受窗口大小。,试验场景设置只启用了,TCP,每一端,一个功效,,,即一端只,发送数据另一端只接受数据,,并从这个角度将,TCP,两端分别称作发送方和接受方。,相称于只启用了,TCP,单工功效,只启用和分析了,TCP,连接中一个“流”,第3页,第3页,题1参考答案,连接建立方式:三次握手;,PCA,:积极打开方,(C),;,PCB,:被动打开方,(S),。,先点发送后点接受,连接没法成
3、功,注意:,(有时,先点发送后点接受间隔很短也会连接成功,这是由于发出SYN报文后一段时间没有收到SYN+ACK报文,会重复几次发送SYN报文试探),原因:,C/S,模式,,Server,没启,,Client,也就连接不上了。,假如没有应用进程被动打开,则积极打开应用进程也就无法成功建立起一个连接。,结合看,TCP,状态机,必须有被动打开方才干连,第4页,第4页,TCP状态变迁图,参考书籍:,(美)W.Richard Stevens著,范建华 等译 TCP/IP协议详解,卷一:协议,机械工业出版社,计算机科学丛书,4月,第5页,第5页,题2、4要点,连接建立三次握手,连接释放四次握手,能够结合
4、TCP,状态机,连接建立过程:“,Flags,字段”,SYN,、,ACK,标识位。,连接释放过程:“,Flags,字段”,FIN,、,ACK,标识位。,第6页,第6页,题3要点:选项字段-MSS,连接建立时协商参数“选项,(Option),字段”,Maximum Segment Size,+-+-+-+-+,|00000010|00000100|max seg size|,+-+-+-+-+,Kind=2 Length=4,Maximum Segment Size Option Data:16 bits,试验报文中十六进制数值:,02 04 05 b4,第7页,第7页,题3要点:以太网帧,最
5、大传播单元(MTU)限制:1500字节;,最小传播单元限制:46字节。,为何有最大?最小?参考AST计算机网络第四版,第8页,第8页,题3、5参考答案,MSS=,最大,MTU,长度,IP首部,固定(最小),长度,TCP,首部固定(最小)长度,=1500-20-20=1460,-,题,3,TCP,数据部分长度计算公式,-,题,5,要区别题3,要点:结合,IP首部各,字段,、,TCP首部各,字段,=(IP,总长度字段,(16 bits),值,-IP,首都长度字段,(4 bits),值,*,4,-TCP,首部长度字段,(4 bits),值,*,4,),字节,IP,、,TCP,首都长度字段值以,32b
6、its(4bytes),为单位,第9页,第9页,滑动窗口机制要点,窗口左边沿定义,窗口指针定义,窗口右边沿定义,注意:查看数据文献tcpsndwnddata.txt体会发送窗口改变,同时推断接受窗口改变,第10页,第10页,题6(1)要点,要点:结合慢启动,第11页,第11页,题6(3)要点,事实上,,6(3),题就是发送方和接受方窗口同时前、后问题,分为两种情况:,发送方发送,DATA,报文,接受方窗口同时前、后问题,接受方发送,ACK,报文,发送方窗口同时前、后问题,窗口同时,:在,网络中没有报文,时,包括,接受方收到发送方发出所有报文,,发送方收到接受方发出所有报文,,发送方窗口与接受方
7、窗口,左边沿、指针应当是同样(同时)。,第12页,第12页,题6(3)发送方发送DATA报文,DATA,报文,到达接受方前,DATA,报文,到达接受方后,,并与发送方窗口同时,第13页,第13页,题6(3)接受方发送ACK报文,ACK,报文,到达发送方前,ACK,报文,到达发送方后,,并与接受方窗口同时,第14页,第14页,窗口同时问题小结,窗口左边沿,是由接受方发送,ACK,报文驱动改变;,接受方发送,ACK,报文后其接受窗口左边沿向右滑动;,发送方在收到,ACK,报文后其发送窗口左边沿也随之向右滑动。,窗口指针,是由发送方发送,DATA,报文驱动改变;,发送方发送,DATA,报文后其发送窗
8、口指针向右滑动;,接受方在收到,DATA,报文后其接受窗口指针也随之向右滑动。,接受窗口右边沿,与接受缓存、接受方确认数据都相关系;,在接受缓存足够情况下,接受方确认数据,其接受窗口左边沿向右滑动,接受窗口右边沿也向右滑动,满足接受窗口最大值,65535,;,在接受缓存不够情况下,无法满足接受窗口最大值,65535,,则接受方确认数据,其接受窗口左边沿向右滑动,而接受窗口右边沿停滞不动,对外表现为接受方向发送方发送,ACK,报文时其通告接受窗口越来越小。,发送窗口右边沿,与发送方拥塞窗口,cwnd,、接受方通告接受窗口,rwnd,相关,在任何时候,其值,=,发送窗口左边沿,+min cwnd,
9、rwnd,。,第15页,第15页,题6(2)要点,主要是接受方窗口与缓存关系,第16页,第16页,题,6(2),图例演示,1/2,接受方,第17页,第17页,题,6(2),图例演示,2/2,接受方,第18页,第18页,题6(2)参考答案,假如接受缓存,不小于,65535,,在接受窗口值,连续减少前,接受端已开始休眠。,假如接受缓存,小于等于,65535,,在接受窗口值,连续减少时,接受端开始休眠。,能够明显看出接受端开始休眠 是,X1,号报文,由于其后通告接受窗口越来越小,(左边沿在不断向右移动,而右边沿不再移动),接受方在窗口范围外可用缓存已被使用完,表明接受方在窗口范围外可用缓存被已确认数
10、据占据着,应用程序进程没有再从缓存中读取这些已确认数据,即表明其已开始休眠。,第19页,第19页,题6(4)要点,窗口收缩定义:右边沿向左移动,窗口合拢定义:左边沿向右边沿靠近,窗口张开定义:右边沿向右移动,接,6(2),图例演示,继续,第20页,第20页,题6(4)参考答案,窗口收缩普通不发生,窗口合拢发生在,接受窗口连续减小期间,窗口张开发生在,休眠结束后通告大窗口时,第21页,第21页,题7要点与答案,窗口侦查报文指是Keep-Alive报文,每相邻两条窗口侦查报文Keep-Alive报文 时间差构成数据序列规律:成倍增长规律,t,1,t,2,t,3,t,4,t,5,t,6,t,7,t1
11、t2-t1,窗口侦查报文发,送或接受时间,相邻两条窗口侦,查报文时间差,t2=,t3-t2,t3=,t4-t3,t2=,2,t1,t3=,2,t2,.,t,n,=,2,t,n-1,第22页,第22页,题8(1)答案,慢启动初始值,sthread=65535,,,snd_cwnd=2,;,RFC2581,慢启动初始值要求。,snd_cwnd*1460 ssthread,,慢启动阶段。,发送窗口计算,snd_wnd=min cwnd,rwnd,rcv_wnd=65535,,,snd_cwnd*1460=2920,;,因此,snd_wnd=min snd_cwnd,rcv_wnd=snd_cwn
12、d*1460=2920,;,snd_wnd_right=snd_wnd_left+snd_wnd,。,第23页,第23页,题8(2)答案,ssthread不变=65535,每收到一个ACK报文,snd_cwnd加1。,由于snd_cwnd*1460 ssthread,处于慢启动阶段,每收到一个ACK,snd_cwnd至多增长1个MSS数值(即随RTT时间而指数增长)。,第24页,第24页,题8(2)验证规律答案,能够。,现象,(普通情况下),:发送方初次发送,2,个,DATA,报文,其后维持在两个确认报文之间发送,3,个,DATA,报文。,原因:,在发送方,发满,当前发送窗口,snd_wnd,
13、情况下(慢启动初始发满两个,DATA,报文),收到接受方,1,个,ACK,报文时,,由于接受方每收到,2,个,DATA报文,发送个ACK报文对其进行确认,那么在维持当前发送窗口snd_wnd,不变情况下,发送方可再次发送,2,个,DATA,报文,,同时由于慢启动机制,收到一个正常,ACK,报文拥塞窗口,cwnd,值加,1,,在,cwnd,远小于接受窗口,rwnd,时,,snd_wnd,就等于,cwnd,即,snd_wnd,加,1,,发送方还可再发送,1,个,DATA,报文,,这样发送方共可发送,3,个,DATA,报文。,第25页,第25页,题8(2)验证规律题定量分析归纳,试验现象(普通情况下
14、发送方:初次发送,2,个,DATA,报文,其后维持在两个确认报文之间发送,3,个,DATA,报文。,接受方:接受方每收到,2,个,DATA报文,发送个ACK报文对其进行确认,。,第26页,第26页,规律分析-初始,初始:,snd_wnd=min snd_cwnd,rcv_wnd=2*MSS,;,snd&noAck_data=0*MSS,;,useable_wnd=2*MSS,注:假设每个发送报文大小都是,1,个,MSS,第27页,第27页,规律,分析-第1步,发送,2,个,DATA,报文,snd_wnd=2*MSS,;,snd&noAck_data=2*MSS,;,useable_wnd=
15、0*MSS,收到1个,ACK,报文,snd_wnd=snd_wnd_old+,1*MSS,=3*MSS,;,snd&noAck_data=snd&noAck_data_old,2*MSS,=0*MSS,;,useable_wnd=1*MSS+2*MSS=3*MSS,第28页,第28页,规律,分析-第2步,发送,3,个,DATA,报文,snd_wnd=3*MSS,;,snd&noAck_data=3*MSS,;,useable_wnd=0*MSS,收到1个,ACK,报文,snd_wnd=snd_wnd_old+,1*MSS,=4*MSS,;,snd&noAck_data=snd&noAck_da
16、ta_old,2*MSS,=1*MSS,;,useable_wnd=1*MSS+2*MSS=3*MSS,第29页,第29页,规律,分析-第3步,发送,3,个,DATA,报文,snd_wnd=4*MSS,;,snd&noAck_data=4*MSS,;,useable_wnd=0*MSS,收到1个,ACK,报文,snd_wnd=snd_wnd_old+,1*MSS,=5*MSS,;,snd&noAck_data=snd&noAck_data_old,2*MSS,=2*MSS,;,useable_wnd=1*MSS+2*MSS=3*MSS,第30页,第30页,规律,分析-第4步,发送,3,个,DA
17、TA,报文,snd_wnd=5*MSS,;,snd&noAck_data=5*MSS,;,useable_wnd=0*MSS,收到1个,ACK,报文,snd_wnd=snd_wnd_old+,1*MSS,=6*MSS,;,snd&noAck_data=snd&noAck_data_old,2*MSS,=3*MSS,;,useable_wnd=1*MSS+2*MSS=3*MSS,第31页,第31页,规律归纳,规律,分析-第n步,发送,3,个,DATA,报文,snd_wnd=(n+1)*MSS,;,snd&noAck_data=(n+1)*MSS,;,useable_wnd=0*MSS,收到1个,
18、ACK,报文,snd_wnd=snd_wnd_old+,1*MSS,=(n+2)*MSS,;,snd&noAck_data=snd&noAck_data_old,2*MSS,=(n-1)*MSS,;,useable_wnd=1*MSS+2*MSS=3*MSS,第32页,第32页,题8(3)要点与答案,有超时报文,网络拥塞,实行拥塞处理,X,号报文,,ssthread=max(,cwnd/2,,,2*MSS),(,RFC,);,cwnd=1,;超时,表明网络有拥塞。,在正常传播后,将依次处于慢启动、拥塞避免阶段,其后第一阶段:,ssthread,不变,,cwnd,值每收到一个,ACK,报文就加,
19、1,。由于,snd_cwnd*1460 ssthread,,拥塞避免阶段。,第33页,第33页,题9要点,正常传播期间:,RTO,计算算法,超时重传期间:,Karn,算法,RTO=2*RTO_old,第34页,第34页,题9(1)参考答案,两种速率下重传时间有很大差异,,因为RTO值是依据RTT(平均往返时间)值而加权计算得出;,而RTT值又是依据ACK报文抵达而测量出往返时间样本而加权计算得出;,因为速率不同,两种速率下在DATA报文发出到ACK报文抵达时间差会有很大差距。,三次重传时间呈加倍关系,Karn算法起作用。,第35页,第35页,题9(2)参考答案,分别稳定在,RTO1,和,RTO
20、2,。,发生超时时,,RTT,值不变,由于,RTT,改变主要依据,ACK,报文到达才干得到往返时间样本进而更新,RTT,值,而,RTO,在每次重传发生时则加倍。原因是,Karn,算法起作用。,继续正常报文传播时,,RTT,伴随,ACK,报文到来一度变大,由于超时期间没有收到任何,ACK,报文,新到达,ACK,报文使得往返时间样本急剧增大,按平均往返时间计算算法更新,RTT,值;,RTO,值不再加倍但还是很大,由于超时结束,,Karn,算法不再起作用,又开始按照,RTT,值进行更新计算(依据重传超时时间计算算法计算),而此时,RTT,值很大。,第36页,第36页,题9附注,按,RFC1122,要
21、求将,RTT,和,RTO,初始值设置为:,RTT=0,秒,,RTO=3,秒。,由于,Linux,这些时间值以,10,毫秒为单位,试验数据文献中表现为,SRTT=0,;,RTO=300,;,且,RTO,最小值为,200,毫秒,最大值为,120,秒。试验数据文献中表现为,20,和,1,;,Linux,中,RTT,最小,80,毫秒,试验数据文献中表现为,8,第37页,第37页,题10要点,快重传算法针对收到三个重复ACK报文后,即重传重复ACK序号那条DATA报文,快恢复算法针对收到三个重复ACK报文后,对拥塞窗口修正,第38页,第38页,题10(1)参考答案,X5、X6、X7号报文。,不等报文超时
22、马上进行报文重传,收到三个重复确认,认为报文丢失,快重传。,第39页,第39页,题10(2)参考答案,在第三个重复,ACK,到达时,,ssthread=max(,cwnd/2,,,2*MSS),(,RFC,);,cwnd=min cwnd,已发送报文数,已到达接受方但未正式确认报文,+,重传报文数,+3,。,收到三个重复确认,快恢复算法。,RTT,和,RTO,无改变,由于往返时间测量是依据,ACK,报文到达情况来计算,而此时网络并未真正拥塞,只是偶然报文传播犯错,因此,RTT,测量不受影响,从而,RTO,没有改变。,第40页,第40页,题10(3)参考答案,有。,ssthread,不变,,c
23、wnd=min cwnd,已发送报文数,已到达接受方但未正式确认报文,+,重传报文数,+3,。,在没有重复,ACK,报文后即开始接受正常,ACK,报文,,ssthread,不变,,cwnd,值每通过一个,RTT,增长一个,SMSS*SMSS/cwnd,大小。由于,snd_cwnd*1460 ssthread,,拥塞避免阶段。,第41页,第41页,题11(1)参考答案,启用,Nagle,算法传播过程数据长度普通都以,MSS,长度发送;,而禁用,Nagle,算法传播过程数据长度普通都以“每次写入套接字字节数”长度发送;,Nagle,算法原理和作用:发送方在连接建立开始发送数据时,马上按序发送缓存中
24、数据(必须,=1*MSS);,接受端推迟确认技术:对收到报文段进行确认和通告窗口前提条件是:接受缓存可用空间至少得到总空间二分之一或者达到最大报文长度之后。假如条件不满足,则推迟发送确认和窗口通告。,第43页,第43页,4.2 TCP,流量控制和拥塞控制,TCP“,数据流”概念(逻辑),流:编了序号“珠串”,可靠性:面向连接、数据传播,ACK,机制,流量控制:使用滑动窗口机制,窗口仅仅是在流上一个连续片断,拥塞控制:是通过,TCP,中端到端基于滑窗流量控制机制完毕,拥塞控制四算法:慢启动、拥塞避免、快重传、快恢复,第44页,第44页,流量控制和拥塞控制区别和关系,流量控制,主要考虑,接受端,,
25、目的是使发送端发送速率不超出接受端接受能力;,拥塞控制,主要考虑端节点之间,网络环境,,目的是使负载不超出网络传送能力;,在很长一段时间内,接受端驱动,TCP,流量控制机制是唯一可行拥塞控制办法;,但“流量控制”和“拥塞控制”两者切不可混淆,事实上,,前者只是实现后者一个技术实现路径而已。,第45页,第45页,试验场景,shutdown,路由器接口模拟网络拥塞,丢包模拟偶然传播错误,(,也许主机原因也也许网络原因,),,但不是真正网络拥塞,第46页,第46页,滑动窗口机制要点,窗口左边沿定义,窗口指针定义,窗口右边沿定义,窗口同时,:在,网络中没有报文,即接受方收到发送方发出所有报文,发送方收到接受方发出所有报文时,发送方窗口与接受方窗口,左边沿、指针应当是同样(同时)。,第47页,第47页,






