5—01 试着说明运输层在协议栈中的地位和作用。运输层的通信和网络层的通信有什么重要区别?为什么运输层至关重要? 答:运输层位于通信部分的最高层,也是用户功能的最低层,为其上述应用层提供服务 运输层为应用进程之间提供端到端的逻辑通信,但网络层是为主机之间提供逻辑通信(面向主机,承担路由功能,即主机寻址及有效的分组交换)。 通信需要可靠或尽可能的两种服务质量,运输层必须以重用和分用的形式加载到网络层。 5—02 网络层提供数据报告或虚拟电路服务对上述运输层有什么影响? 答:网络层提供数据报告或虚拟电路服务,不影响上述运输层的运行机制。 但提供不同的服务质量。 5—03 当应用程序面向连接时TCP和无连接的IP这种传输是面向连接还是面向无连接? 答:都是。这应该在不同层次上连接到运输层,而不是在网络层。 5—04 试图解释运输层的重复使用。图表显示,许多运输用户重复使用一个运输连接,这个运输连接重复使用IP数据报上。 5—05 例子表明,一些应用程序愿意使用不可靠的应用程序UDP,不使用可靠的TCP。答:VOIP:由于语音信息有一定的冗余,人耳对VOIP数据报告损失具有一定的承受能力,但对传输延迟的变化更为敏感。 有差错的UDP数据报在接收端被直接抛弃,TCP如果数据报告出错,可能会导致重传 带来较大的时延扰动。 因此VOIP宁可使用不可靠的UDP,不愿意使用可靠的TCP。 5—06 接收方收到错误UDP如何处理用户数据报告?答:丢弃 5—07 如果应用程序愿意使用UDP可以完成可靠的传输吗?请解释答案的原因:是的,但必须在应用程序中提供额外的和TCP功能相同。 5—08 为什么说UDP面向报文,而TCP是字节流吗? 答:发送方 UDP 添加第一部后,向下交付应用程序交付的报纸 IP 层。UDP 应用层提交的报纸既不合并也不拆分,而是保留了这些报纸的边界。 UDP 对 IP 层交上来的 UDP 用户数据报告,在除第一部电影后,原封不动地交付上层应用程序,一次交付完整的报纸。 发送方TCP应用程序提交的报纸数据块被视为无结构字节流(无边界约束,课程分拆/合并),但每个字节都保持不变 5—09 端口的作用是什么?为什么端口分为三种? 答:端口是对的TCP/IP统一标记系统的应用过程,使操作不同操作系统的计算机的应用过程相互通信。熟悉端口,值一般为01023.标记常规服务流程;注册端口号,值102449151,非常规熟悉端口号的非常规服务流程; 5—10 试着说明运输层伪首部的作用。 答:用于计算运输层数据报校验和。 5—11 使用运输层的用户数据报告某个应用程序的用户数据UDP,然而,继续向下交付IP层后,再包装成IP数据报告。既然都是数据报告,能跳过吗?UDP而直接交给IP层?什么功能?UDP提供了但IP没提提供? 答:不要跳过UDP而直接交给IP层IP数据报IP承担主机查址,提供报头检错;只能找到目的主机,找不到目的过程。UDP提供应用程序的复用和分用功能,以及数据差异的错误检测。 5—12 一个应用程序UDP,到IP该层将数据报告分为四个数据报告发送,前两个数据报告丢失,后两个到达目的站。过了一段时间,应用程序重传UDP,而IP层仍分为四个数据报片传输。结果前两个到达目的站,后两个丢失了。在目的站,这两次传输的四个数据报片能否组装成完整的数据报纸?假设目的站第一次收到的最后两个数据报告仍然保存在目的站的缓存中。答:不行 重传时,IP数据报的标识字段会有另一个标识符。 只要标识符相同IP数据报片只能组装成IP数据报。前两个IP数据报片的标识符和后两个IP数据报片的标识符不同,不能组装成一个IP数据报。 5—13 一个UDP8192季节是用户数据的数据字段。以太网应用于数据链路层的传输。试问应分为几个部分IP数据报片?说明每一个IP数据报告字段长度和片偏移字段值。答:6个 前五个字节是1480字节,最后一个字节是800字节。片偏移字段的值分别为0、1480、2960、4440、5920和7400. 5—14 一UDP用户数据报告的第一部16进制表示:06 32 00 45 00 1C E2 17.尝试源端口、目的端口、用户数据报告的总长度和数据部分长度。用户数据报告是从客户发送给服务器的?UDP这个服务器程序是什么? 解:1586源端口,69目的端口,UDP总长度为28字节,部分长度为20字节。 此UDP用户数据报告从客户发送到服务器(因为目的端口号)<1023,熟悉端口),服务器程序TFFTP。 5—15 使用TCP传输实时话音数据有问题吗?UDP传输数据文件有什么问题? 答:如果语音数据没有实时播放(边接受边播放)TCP,因为TCP可靠的传输。使用接收端TCP演讲数据接受后,可以随时播放。但如果是实时传输,则必须使用UDP。 UDP但是UCP比TCP成本要小得多。因此,只要应用程序接受这种情况 可以使用服务质量UDP。 5—16 停止等待协议不使用编号可行吗?为什么? 答:分组和确认分组必须编号,以确定确认哪个分组。 5—17 在停止等待协议中,如果收到重复的报文段时不予理睬(即悄悄地丢弃它而其他什么也没做)是否可行?试举出具体的例子说明理由。 答: 收到重复帧的不确认相当于确认丢失 5—18 假设在运输层停止等待协议。发送在发送报文段M0后设定的时间内未确认,重传M0,但M0无法到达接收方。不久,发送方收到了迟到的对M0的确认,然后发送下一个报纸段M一、很快就收到了对的M1的确认。然后发送方发送新的报纸段M但是这个新的M0在传输过程中丢失。碰巧一开始就留在网络里了M0现在到 达接收方。接收方无法分辨M0是旧的。所以收下M0.并发送确认。显然,接收方后来收到了M0是重复的,协议失败了。试图绘制双方交换报文段的过程,如图5-9所示。 旧的M0被当成新的M0。 5—19 试验证明:当使用n比特进行分组号时,如果接收到窗口等于1(即只能按顺序接收分组),则仅在发送窗口时不超过2n-1时,连接ARQ协议可以正确运行。窗口单元分组。解决方案:课后见答案。 5—20 在连续ARQ在协议中,如果发送窗口等于7,发送端可以在开始时连续发送7个分组。因此,在每个分组发送后,都应该设置一个加时器。现在电脑里只有一个硬时钟。设置这七个分组的时间是t0,t1…t6,且tout都一样大。如何实现这7个超时计时器(这叫软件时钟法)? 解决方案答案。 5—21 假设连续使用ARQ在协议中,发送窗口大小事件3,序列范围[0,15],传输媒体确保接收方能够按顺序收到分组。在某个时刻,接收方,下一个接收序列号是5。 (1) 发送方发送窗口可能有哪些序号组合? (2) 接收方已发送,但网络中可能有哪些确认分组(即未到达发送方)?解释这些确认分组用于确认哪些序列号。 5—22 主机A向主机B发送长度为L字节的长文件。TCP使用的MSS有1460字节。 (1) 在TCP在不重复使用复使用,L最大值是多少? (2) 假设文件长度计算在上面,运输层、网络层和数据链路层使用的第一个费用为66字节,链路的数据率为10Mb/s,测试本文件所需的最短发送时间。 解:(1)L_max的最大值是232=4GB,G=230. (2) 满载分片数Q={L_max/MSS}取整=2941758发送的总报文数 N=Q*(MSS 66) {(L_max-QMSS) 66}=4489122708 682=4489123390 总字节数是N=448912390字节发送448912390字节需要时间:N8/(1010^6) =3591.3秒,即59.85分,约1小时。 5—23 主机A连续向主机B发送两个主机TCP报文段,序号分别为70和100。 (1) 第一个报文段携带多少字节数据? (2) 主机B收到第一个报文段后发回的确认号应该是多少? (3) 如果主机B在收到第二个报文段后发回的确认号为180,A发送的第二个报文段中的数据字节是多少? (4) 如果a发送的第一个报文段丢失,但第二个报文段到达B。B第二个报文段到达后,向A发送确认号。这个确认号应该是多少? 解:(1)第一篇报文段的数据序号为70至99,共30字节。 (2)确认号应为1000.(3)80字节。 (4)70 5—24 一个TCP以下连接256kb/s端到端延迟为128ms。发现吞吐量只有120kb/s。发送窗口W是多少?(提示:根据接收等确认时间,可以有两个答案。 解决方案:来回行程的延迟等于256ms(=128ms×2).设窗口值为X(注:以字节为单位)假设最大发送量等于窗口值,发射时间等于256ms,然后,为了获得新的发送许可期待下一个窗口的再次确认,以获得新的发送许可证.这样,发射时间等于停止等待响应的时间结果,平均吞吐量等于发送速率的一半,即8X÷(256×1000)=256×0.001X=8192所以窗口值是8192. 5—25 为什么在TCP首部中要把TCP端口号放入前四个字节? 答:在ICMP包括错误报文IP第一部后面有八个字节,里面有TCP第一部电影源端口和目的端口。TCP收到ICMP这两个端口需要用来确定哪个连接错误。 5—26 为什么在TCP第一部有第一部长度字段,UDP第一部没有这个字段? 答:TCP除了固定长度,第一部分还有选项,所以TCP第一部长度是可变的。UDP首部长度是固定的。 5—27 一个TCP报文段的数据部分最多有多少个字节?为什么?如果用户想要传输数字 超过字节长度TCP报纸字段中的序号字段可能编写最大序号,询问是否可以使用TCP来传送? 答:65495字节,加上这个数据部分TCP第一部的20字节,加上IP第一部的20字节正好是IP最大长度为65535.(当然,若IP第一部包含选择,然后IP超过首部长度 20字节,这时TCP数据部分的长度将小于65495字节。) 字节长度超过数据TCP报文段中的序号字段可能编制的最大序号仍然可以通过循环使用CP来传送。 5—28 主机A向主机B发送TCP报文段,首部中的源端口是m而目的端口是n。当B向A发送回信时,其TCP报文段的首部中源端口和目的端口分别是什么?答:分别是n和m。 5—29 在使用TCP传送数据时,如果有一个确认报文段丢失了,也不一定会引起与该确认报文段对应的数据的重传。试说明理由。 答:还未重传就收到了对更高序号的确认。 5—30 设TCP使用的最大窗口为65535字节,而传输信道不产生差错,带宽也不受限制。若报文段的平均往返时延为20ms,问所能得到的最大吞吐量是多少? 答:在发送时延可忽略的情况下,最大数据率=最大窗口8/平均往返时间=26.2Mb/s。 5—31 通信信道带宽为1Gb/s,端到端时延为10ms。TCP的发送窗口为65535字节。试问:可能达到的最大吞吐量是多少?信道的利用率是多少? 答: L=65536×8+40×8=524600 C=109b/s L/C=0.0005246s Td=10×10-3s 0.02104864 Throughput=L/(L/C+2×Td)=524600/0.0205246=25.5Mb/s Efficiency=(L/C)//(L/C+2×D)=0.0255 最大吞吐量为25.5Mb/s。信道利用率为25.5/1000=2.55% 5—32 什么是Karn算法?在TCP的重传机制中,若不采用Karn算法,而是在收到确认时都认为是对重传报文段的确认,那么由此得出的往返时延样本和重传时间都会偏小。试 问:重传时间最后会减小到什么程度? 答:Karn算法:在计算平均往返时延RTT时,只要报文段重传了,就不采用其往返时延样本。 设新往返时延样本Ti RTT(1)=aRTT(i-1)+(1-a)T(i); RTT^(i)=a RTT(i-1)+(1-a)T(i)/2; RTT(1)=a0+(1-a)T(1)= (1-a)T(1); RTT^(1)=a0+(1-a)T(1)/2= RTT(1)/2 RTT(2)= aRTT(1)+(1-a)T(2); RTT^(2)= aRTT(1)+(1-a)T(2)/2; = aRTT(1)/2+(1-a)T(2)/2= RTT(2)/2 RTO=betaRTT,在统计意义上,重传时间最后会减小到使用karn算法的1/2. 5—33 假定TCP在开始建立连接时,发送方设定超时重传时间是RTO=6s。 (1)当发送方接到对方的连接确认报文段时,测量出RTT样本值为1.5s。试计算现在的RTO值。 (2)当发送方发送数据报文段并接收到确认时,测量出RTT样本值为2.5s。试计算现在的RTO值。答: (1)据RFC2988建议,RTO=RTTs+4RTTd。其中RTTd是RTTs的偏差加权均值。 初次测量时,RTTd(1)= RTT(1)/2; 后续测量中,RTTd(i)=(1-Beta) RTTd(i-1)+Beta*{ RTTs- RTT(i)}; Beta=1/4 依题意,RTT(1)样本值为1.5秒,则 RTTs(1)=RTT(1)=1.5s RTTd(1)=RTT(1)/2=0.75s RTO(1)=RTTs(1)+4RTTd(1)=1.5+40.75=4.5(s) (2)RTT(2)=2.5 RTTs(1)=1.5s RTTd(1)=0.75s RTTd(2)=(1-Beta) RTTd(1)+Beta*{ RTTs(1)- RT (2)}=0.753/4+{1.5-2.5}/4=13/16 RTO(2)=RTTs(1)+4RTTd(2)=1.5+413/16=4.75s 5—34 已知第一次测得TCP的往返时延的当前值是30 ms。现在收到了三个接连的确认报文段,它们比相应的数据报文段的发送时间分别滞后的时间是:26ms,32ms和24ms。设α=0.9。试计算每一次的新的加权平均往返时间值RTTs。讨论所得出的结果。 答:a=0.1, RTTO=30 RTT1=RTTO*(1-a) +26a=29.6 RTT2=RTT1a+32(1-a)=29.84 RTT3=RTT2a+24(1-a)=29.256 三次算出加权平均往返时间分别为29.6,29.84和29.256ms。 可以看出,RTT的样本值变化多达20%时,加权平均往返 5—35 试计算一个包括5段链路的运输连接的单程端到端时延。5段链路程中有2段是卫星链路,有3段是广域网链路。每条卫星链路又由上行链路和下行链路两部分组成。可以取这两部分的传播时延之和为250ms。每一个广域网的范围为1500km,其传播时延可按150000km/s来计算。各数据链路速率为48kb/s,帧长为960位。 答:5段链路的传播时延=2502+(1500/150000)31000=530ms 5段链路的发送时延=960/(48*1000)51000=100ms 所以5段链路单程端到端时延=530+100=630ms 5—36 重复5-35题,但假定其中的一个陆地上的广域网的传输时延为150ms。答:760ms 5—37 在TCP的拥塞控制中,什么是慢开始、拥塞避免、快重传和快恢复算法?这里每一种算法各起什么作用? “乘法减小”和“加法增大”各用在什么情况下?答:慢开始: 在主机刚刚开始发送报文段时可先将拥塞窗口cwnd设置为一个最大报文段 MSS的数值。在每收到一个对新的报文段的确认后,将拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送端的拥塞窗口cwnd,可以分组注入到网络的速率更加合理。 拥塞避免: 当拥塞窗口值大于慢开始门限时,停止使用慢开始算法而改用拥塞避免算法。拥塞避免算法使发送的拥塞窗口每经过一个往返时延RTT就增加一个MSS的大小。快重传算法规定:发送端只要一连收到三个重复的ACK即可断定有分组丢失了,就应该立即重传丢手的报文段而不必继续等待为该报文段设置的重传计时器的超时。快恢复算法:当发送端收到连续三个重复的ACK时,就重新设置慢开始门限 ssthresh与慢开始不同之处是拥塞窗口 cwnd 不是设置为 1,而是设置为ssthresh若收到的重复的AVK为n个(n>3),则将cwnd设置为ssthresh若发送窗口值还容许发送报文段,就按拥塞避免算法继续发送报文段。若收到了确认新的报文段的ACK,就将cwnd缩小到ssthresh 乘法减小:是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 ssthresh 设置为当前的拥塞窗口值乘以 0.5。当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注入到网络中的分组数。加法增大:是指执行拥塞避免算法后,在收到对所有报文段的确认后(即经过一个往返时间),就把拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞
。 5—38 设TCP的ssthresh的初始值为8(单位为报文段)。当拥塞窗口上升到12时网络发生了超时,TCP使用慢开始和拥塞避免。试分别求出第1次到第15次传输的各拥塞窗口大小。你能说明拥塞控制窗口每一次变化的原因吗? 答:拥塞窗口大小分别为:1,2,4,8,9,10,11,12,1,2,4,6,7,8,9. 5—39 TCP的拥塞窗口cwnd大小与传输轮次n的关系如下所示: cwnd n 1 1 2 2 4 3 8 4 16 5 32 6 33 7 34 8 35 9 36 10 37 11 38 12 39 13 cwnd n 40 14 41 15 42 16 21 17 22 18 23 19 24 20 25 21 26 22 1 23 2 24 4 25 8 26 (1)试画出如图5-25所示的拥塞窗口与传输轮次的关系曲线。 (2)指明TCP工作在慢开始阶段的时间间隔。 (3)指明TCP工作在拥塞避免阶段的时间间隔。 (4)在第16轮次和第22轮次之后发送方是通过收到三个重复的确认还是通过超市检测到丢失了报文段? (5)在第1轮次,第18轮次和第24轮次发送时,门限ssthresh分别被设置为多大? (6)在第几轮次发送出第70个报文段? (7)假定在第26轮次之后收到了三个重复的确认,因而检测出了报文段的丢失,那么拥塞窗口cwnd和门限ssthresh应设置为多大? 答:(1)拥塞窗口与传输轮次的关系曲线如图所示(课本后答案): (2) 慢开始时间间隔:【1,6】和【23,26】 (3) 拥塞避免时间间隔:【6,16】和【17,22】 (4) 在第16轮次之后发送方通过收到三个重复的确认检测到丢失的报文段。在第22轮次之后发送方是通过超时检测到丢失的报文段。 (5) 在第1轮次发送时,门限ssthresh被设置为32 在第18轮次发送时,门限ssthresh被设置为发生拥塞时的一半,即21. 在第24轮次发送时,门限ssthresh是第18轮次发送时设置的21(6) 第70报文段在第7轮次发送出。(7) 拥塞窗口cwnd和门限ssthresh应设置为8的一半,即4. 5—40 TCP在进行流量控制时是以分组的丢失作为产生拥塞的标志。有没有不是因拥塞而引起的分组丢失的情况?如有,请举出三种情况。 答:当Ip数据报在传输过程中需要分片,但其中的一个数据报未能及时到达终点,而终点组装IP数据报已超时,因而只能丢失该数据报;IP数据报已经到达终点,但终点的缓存没有足够的空间存放此数据报;数据报在转发过程中经过一个局域网的网桥,但网桥在转发该数据报的帧没有足够的差错空间而只好丢弃。 5—41 用TCP传送512字节的数据。设窗口为100字节,而TCP报文段每次也是传送100字节的数据。再设发送端和接收端的起始序号分别选为100和200,试画出类似于图5-31的工作示意图。从连接建立阶段到连接释放都要画上。 5—42 在图5-32中所示的连接释放过程中,主机B能否先不发送ACK=x+1的确认? (因为后面要发送的连接释放报文段中仍有ACK=x+1这一信息) 答:如果B不再发送数据了,是可以把两个报文段合并成为一个,即只发送FIN+ACK报文段。但如果B还有数据报要发送,而且要发送一段时间,那就不行,因为A迟迟收不到确认,就会以为刚才发送的FIN报文段丢失了,就超时重传这个FIN报文段,浪费网络资源。 5—43 在图(5-33)中,在什么情况下会发生从状态LISTEN到状态SYN_SENT,以及从状 态SYN_ENT到状态SYN_RCVD的变迁? 答:当A和B都作为客户,即同时主动打开TCP连接。这时的每一方的状态变迁都是: CLOSED----àSYN-SENT—àSYN-RCVD–àESTABLISHED 5—44 试以具体例子说明为什么一个运输连接可以有多种方式释放。可以设两个互相通信的用户分别连接在网络的两结点上。 答:设A,B建立了运输连接。协议应考虑一下实际可能性: A或B故障,应设计超时机制,使对方退出,不至于死锁; A主动退出,B被动退出 B主动退出,A被动退出 5—45 解释为什么突然释放运输连接就可能会丢失用户数据,而使用TCP的连接释放方法就可保证不丢失数据。答:当主机1和主机2之间连接建立后,主机1发送了一个TCP数据段并正确抵达主机2,接着 主机1发送另一个TCP数据段,这次很不幸,主机2在收到第二个TCP数据段之前发出了释放连接请求,如果就这样突然释放连接,显然主机1发送的第二个TCP报文段会丢失。而使用TCP的连接释放方法,主机2发出了释放连接的请求,那么即使收到主机1的确认后,只会释放主机2到主机1方向的连接,即主机2不再向主机1发送数据,而仍然可接受主机1发来的数据,所以可保证不丢失数据。 5—46 试用具体例子说明为什么在运输连接建立时要使用三次握手。说明如不这样做可能会出现什么情况。答: 3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已 准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。 假定B给A发送一个连接请求分组,A收到了这个分组,并发送了确认应答分组。按照两
次握手的协定,A认为连接已经成功地建立了,可以开始发送数据分组。可是,B在A的应答分组在传输中被丢失的情况下,将不知道A是否已准备好,不知道A建议什么样的序列号,B甚至怀疑A是否收到自己的连接请求分组,在这种情况下,B认为连接还未建立成功,将忽略A发来的任何数据分组,只等待连接确认应答分组。 而A发出的分组超时后,重复发送同样的分组。这样就形成了死锁。 5—47 一个客户向服务器请求建立TCP连接。客户在TCP连接建立的三次握手中的最后一个报文段中捎带上一些数据,请求服务器发送一个长度为L字节的文件。假定:(1)客户和服务器之间的数据传输速率是R字节/秒,客户与服务器之间的往返时间是RTT(固定值)。 (2)服务器发送的TCP报文段的长度都是M字节,而发送窗口大小是nM字节。(3)所有传送的报文段都不会出错(无重传),客户收到服务器发来的报文段后就及时发送确认。(4)所有的协议首部开销都可忽略,所有确认报文段和连接建立阶段的报文段的长度都可忽略(即忽略这些报文段的发送时间)。试证明,从客户开始发起连接建立到接收服务器发送的整个文件多需的时间T是: T=2RTT+L/R 当nM>R(RTT)+M 或 T=2RTT+L/R+(K-1)[M/R+RTT-nM/R] 当nM<R(RTT)+M 其中,K=[L/nM],符号[x]表示若x不是整数,则把x的整数部分加1。 解:发送窗口较小的情况,发送一组nM个字节后必须停顿下来,等收到确认后继续发送。共需K=[L/nM]个周期:其中 前K-1个周期每周期耗时M/R+RTT,共耗时(K-1)(M/R+RTT) 第K周期剩余字节数Q=L-(K-1)nM,需耗时Q/R 总耗时=2RTT+(K-1)M/(R+RTT)+Q/R=2*RTT+L/R+(K-1)[( M/R+RTT)-nM/R]