实验四-传输层参考答案计算机学院教学实验中心2019-6-10总览:动静结合TCP协议的理解静:TCP报文格式,首部各字段;动:协议运行的各种机制连接建立、释放传输管理:定时器管理即超时与重传机制流量控制:滑动窗口机制拥塞控制:慢启动、拥塞避免、快重传、快恢复糊涂窗口综合症避免:发送端Nagle算法、接收端推迟确认技术数据传输要点(兼解疑)TCP是全双工的,即TCP每端既可发送数据也可接收数据。每个TCP连接中都有两条数据“流”,TCP每端发出的报文中的“序列号”字段只用于表示自己所发送的“数据流”的数据序号,“确认号”字段只用于表示(确认)自己所接收的“数据流”的数据序号,且每次在自己发送数据时捎带确认“窗口”字段只用于表示给自己所接收的“数据流”的接收窗口大小。实验场景设置只启用了TCP每一端的一个功能,即一端只发送数据另一端只接收数据,并从这个角度将TCP两端分别称作发送方和接收方。相当于只启用了TCP的单工功能,只启用和分析了TCP连接中的一个“流”题1参考答案连接建立方式:三次握手;PCA:主动打开方(C);PCB:被动打开方(S)。先点发送后点接收连接没法成功注意:(有时先点发送后点接收间隔很短也会连接成功,这是因为发出SYN报文后一段时间没有收到SYN+ACK报文,会重复几次发送SYN报文试探)原因:C/S模式,Server没启,Client也就连接不上了。如果没有应用进程被动打开,则主动打开的应用进程也就无法成功建立起一个连接。结合看TCP状态机,必须有被动打开方才能连TCP的状态变迁图参考书籍:(美)W.RichardStevens著,范建华等译《TCP/IP协议详解,卷一:协议》,机械工业出版社,计算机科学丛书,2000年4月题2、4要点连接建立三次握手,连接释放四次握手可以结合TCP状态机连接建立过程:“Flags字段”的SYN、ACK标记位。连接释放过程:“Flags字段”的FIN、ACK标记位。题3要点:选项字段--MSS连接建立时协商参数的“选项(Option)字段”MaximumSegmentSize+--------+--------+---------+--------+|00000010|00000100|maxsegsize|+--------+--------+---------+--------+Kind=2Length=4MaximumSegmentSizeOptionData:16bits实验报文中的十六进制数值:020405b4题3要点:以太网帧最大传输单元(MTU)限制:1500字节;最小传输单元限制:46字节。为什么有最大?最小?参考AST《计算机网络》第四版数据(46~1500字节)6目的地址6源地址2类型EthernetMAC4CRC802.2LLC数据1DASP11SSAPcntlOrgCodetype42802.2SNAPMAC客户数据(46~1500字节)6目的地址6源地址2长度4CRC802.3MAC题3、5参考答案MSS=最大MTU长度–IP首部固定(最小)长度–TCP首部固定(最小)长度=1500-20-20=1460--题3TCP数据部分长度计算公式--题5,要区分题3要点:结合IP首部各字段、TCP首部各字段=(IP总长度字段(16bits)值-IP首都长度字段(4bits)值*4-TCP首部长度字段(4bits)值*4)字节IP、TCP首都长度字段值以32bits(4bytes)为单位滑动窗口机制要点窗口左边沿定义窗口指针定义窗口右边沿定义注意:查看数据文件tcpsndwnddata.txt体会发送窗口的变化,同时推断接收窗口的变化0123456789……n-1n……345678发送窗口=min[cwnd,rwnd]可用窗口左边沿发送但未被确认指针右边沿能够继续发送不能够发送直至窗口移动已发送并被确认3450123456789……n-1n……3456789……n-1接收窗口rwnd可用窗口左边沿已接收但未被确认指针右边沿能够继续接收不能够发送直至窗口移动已接收并被确认345题6(1)要点要点:结合慢启动0123456789……n-1n……01发送窗口=min[cwnd,rwnd]=2*MSS可用窗口2*MSS左边沿指针右边沿能够继续发送不能够发送直至窗口移动0123456789……n-1n……01发送窗口=min[cwnd,rwnd]=2*MSS左边沿指针右边沿不能够发送直至窗口移动发送但未被确认0123456789……n-1n……234发送窗口=min[cwnd,rwnd]=3*MSS可用窗口3*MSS左边沿指针右边沿能够继续发送不能够发送直至窗口移动发送但未被确认0123456789……n-1n……234发送窗口=min[cwnd,rwnd]=3*MSS左边沿指针右边沿不能够发送直至窗口移动发送但未被确认0123456789……n-1n……4567发送窗口=min[cwnd,rwnd]=4*MSS可用窗口3*MSS左边沿指针右边沿能够继续发送不能够发送直至窗口移动4发送但未被确认0123456789……n-1n……4567发送窗口=min[cwnd,rwnd]=4*MSS左边沿指针右边沿不能够发送直至窗口移动发送但未被确认0123456789……n-1n……6789……发送窗口=min[cwnd,rwnd]=5*MSS可用窗口3*MSS左边沿指针右边沿能够继续发送不能够发送直至窗口移动67题6(3)要点实际上,6(3)题就是发送方和接收方窗口同步前、后的问题,分为两种情况:发送方发送DATA报文,接收方窗口同步前、后问题接收方发送ACK报文,发送方窗口同步前、后问题窗口同步:在网络中没有报文时,包括接收方收到发送方发出的所有报文,发送方收到接收方发出的所有报文,发送方窗口与接收方窗口的左边沿、指针应该是一样的(同步)。题6(3)发送方发送DATA报文0123456789……n-1n……3456789……n-1接收窗口rwnd可用窗口左边沿已接收但未被确认指针右边沿能够继续接收不能够发送直至窗口移动已接收并被确认3450123456789……n-1n……3456789……n-1接收窗口rwnd可用窗口左边沿已接收但未被确认指针右边沿能够继续接收不能够发送直至窗口移动已接收并被确认3456DATA报文到达接收方前DATA报文到达接收方后,并与发送方窗口同步题6(3)接收方发送ACK报文0123456789……n-1n……345678发送窗口=min[cwnd,rwnd]=6*MSS可用窗口左边沿发送但未被确认指针右边沿能够继续发送不能够发送直至窗口移动已发送并被确认3450123456789……n-1n……56789……n-1发送窗口=min[cwnd,rwnd]=7*MSS可用窗口左边沿发送但未被确认指针右边沿能够继续发送不能够发送直至窗口移动已发送并被确认5ACK报文到达发送方前ACK报文到达发送方后,并与接收方窗口同步窗口同步问题小结窗口的左边沿是由接收方发送ACK报文驱动变化的;接收方发送ACK报文后其接收窗口左边沿向右滑动;发送方在收到ACK报文后其发送窗口左边沿也随之向右滑动。窗口的指针是由发送方发送DATA报文驱动变化的;发送方发送DATA报文后其发送窗口指针向右滑动;接收方在收到DATA报文后其接收窗口指针也随之向右滑动。接收窗口的右边沿与接收缓存、接收方确认数据都有关系;在接收缓存足够的情况下,接收方确认数据,其接收窗口左边沿向右滑动,接收窗口右边沿也向右滑动,满足接收窗口的最大值65535;在接收缓存不够的情况下,无法满足接收窗口的最大值65535,则接收方确认数据,其接收窗口左边沿向右滑动,而接收窗口右边沿停滞不动,对外表现为接收方向发送方发送ACK报文时其通告的接收窗口越来越小。发送窗口的右边沿与发送方的拥塞窗口cwnd、接收方通告的接收窗口rwnd有关在任何时候,其值=发送窗口左边沿+min[cwnd,rwnd]。题6(2)要点主要是接收方窗口与缓存的关系题6(2)图例演示1/2-接收方0123456789……n-1n……接收窗口rwnd=65535可用窗口左边沿已接收但未被确认指针右边沿能够继续接收不能够发送直至窗口移动已接收并被确认未被应用进程读走缓存大小0123456789……n-10123456789……n-1n……接收窗口rwnd=65535可用窗口左边沿已接收但未被确认指针右边沿能够继续接收已接收并被确认未被应用进程读走缓存大小0123456789……n-1n……题6(2)图例演示2/2-接收方0123456789……n-1n……接收窗口rwnd=5000可用窗口左边沿已接收但未被确认指针右边沿能够继续接收已接收并被确认未被应用进程读走缓存大小0123456789……n-1n……0123456789……n-1n……接收窗口rwnd=0左边沿指针右边沿已接收并被确认未被应用进程读走缓存大小题6(2)参考答案如果接收缓存大于65535,在接收窗口值持续减少前接收端已开始休眠。如果接收缓存小于等于65535,在接收窗口值持续减少时接收端开始休眠。能够明显看出接收端开始休眠是X1号报文因为其后通告的接收窗口越来越小,(左边沿在不断向右移动,而右边沿不再移动),接收方在窗口范围外的可用缓存已被使用完,表明接收方在窗口范围外的可用缓存被已确认的数据占据着,应用程序进程没有再从缓存中读取这些已确认的数据,即表明其已开始休眠。题6(4)要点窗口收缩定义:右边沿向左移动窗口合拢定义:左边沿向右边沿靠近窗口张开定义:右边沿向右移动接6(2)图例演示,继续nn+1n+2n+3n+4n+5n+6n+7n+8n+9……2n-12n……nn+1n+2n+3接收窗口rwnd=5840可用窗口左边沿指针右边沿能够继续接收已接收并被确认未被应用进程读走缓存大小题6(4)参考答案窗口收缩一般不发生窗口合拢发生在接收窗口持续减小期间窗口张开发生在休眠结束后通告大窗口时0123456789……n-1n……012345678接收窗口rwnd=65535可用窗口左边沿指针右边沿能够继续接收不能够发送直至窗口移动缓存大小题7要点与答案窗口侦查报文指的是Keep-Alive报文每相邻两条窗口侦查报文Keep-Alive报文时间差组成的数据序列的规律:成倍增加规律m1m2m3m4m5m6m7……m2-m1m3-m2m4-m3m5-m4m6-m5m7-m6……窗口侦查报文发送或接收时间相邻两条窗口侦查报文的时间差题11(1)参考答案启用Nagle算法的传输过程数据长度一般都以MSS长度发送;而禁用Nagle算法的传输过程数据长度一般都以“每次写入套接字的字节数”长度发送;Nagle算法的原理和作用:发送方在连接建立开始发送数据时,立即按序发送缓存中的数据(必须=1*MSS),后续数据的发送由数据是否足以填满发送缓存的一半或一个MSS长度决定。而不启用Nagle算法时发送方则是有数据就发。题11(2)参考答案通告的第一个窗口大小是X(=1*MSS);接收端的推迟确认技术:对收到的报文段进行确认和通告窗口的前提条件是:接收缓存的可用空间至少得到总空间的一半或者达到最大报文长度之后。如果条件不满足,则推迟发送确认和窗口通告。以下PPT不为要求内容,仅作选作参考题8(1)答案慢启动初始值sthread=65535,snd_cwnd=2;RFC2581慢启动初始值的规定。snd_cwnd*1460ssthread,慢启动阶段。发送窗口计算snd_wnd=min[cwnd,rwnd]rcv_wnd=65535,snd_cwnd*1460=2920;所以snd_wnd=min[snd_cwnd,rcv_wnd]=snd_cwnd*1460=2920;snd_wnd_right