问答题
主机A向主机B连续发送了两个TCP报文段,其序号分别为70和100。试问:
问答题
第一个报文段携带了多少字节的数据?
【正确答案】第二个报文段的开始序号是100,说明第一个报文段的序号是70~99,所以第一个报文段携带了30B的信息。
【答案解析】
问答题
主机B收到第一个报文段后发回的确认中的确认号应当是多少?
【正确答案】由于主机已经收到第一个报文段,即最后一个字节的序号应该是99,因此下一次应当期望收到第100号字节,故确认中的确认号是100。
【答案解析】
问答题
如果主机B收到第二个报文段后发回的确认中的确认号是180,试问A发送的第二个报文段中的数据有多少字节?
【正确答案】由于主机B收到第二个报文段后发回的确认中的确认号是180,说明已经收到了第179号字节,也就说明第二个报文段的序号是从100~179,因此第二个报文段有80B。
【答案解析】
问答题
如果A发送的第一个报文段丢失了,但第二个报文段到达了B。B在第二个报文段到达后向A发送确认。试问这个确认号应为多少?
【正确答案】确认的概念就是前面的序号全部收到了,只要有一个没收到,就不能发送更高字节的确认,所以主机B应该发送第一个报文段的开始序号,即70。
【答案解析】
问答题
一个TCP报文段的数据部分最多为多少字节?为什么?如果用户要传送的数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号,问还能否用TCP来传送?
【正确答案】一个TCP报文段的数据部分最多为65495B,此数据部分加上TCP首部的20B,再加上IP首部的20B,正好是IP数据报的最大长度(216-1=65535B)。当然,若IP首部包含了选项,则IP首部长度超过20B,这时TCP报文段的数据部分的长度将小于65495B。
即使用户要传送的数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号,也还可以用TCP来传送。当今的因特网用户速率还不是很高,且分组的生命期受限。TCP的序号字段有32位,可以循环使用序列号,这样就可保证当序号重复使用时,旧序号的数据早已通过网络到达终点了。
【答案解析】
问答题
有一个TCP连接,当它的拥塞窗口大小为64个分组大小时超时,假设该线路往返时间RTT是固定的即为3s,不考虑其他开销,即分组不丢失,该TCP连接在超时后处于慢开始阶段的时间是多少秒?
【正确答案】根据题意,当超时的时候,慢开始门限值ssthresh变为拥塞窗口大小的一半,即ssthresh=64/2=32个分组。此后,拥塞窗口重置为1,重新启用慢开始算法。根据慢开始算法的指数增长规律,经过5个RTT,拥塞窗口大小变为25=32,达到ssthresh。此后便改用拥塞避免算法。
因此,该TCP连接在超时后重新处于慢开始阶段的时间是5×RTT=15s。
【答案解析】
问答题
如果收到的报文段无差错,只是未按序号,则TCP对此未作明确规定,而是让TCP的实现者自行确定。试讨论两种可能的方法的优劣。
1)将不按序的报文段丢弃。
2)先将不按序的报文段暂存于接收缓存内,待所缺序号的报文段收齐后再一起上交应用层。
【正确答案】第一种方法其实就是后退N帧协议所使用的处理方式,这种方法将不按序的报文段丢弃,会引起被丢弃报文段的重复传送,增加对网络带宽的消耗,但由于用不着将该报文段暂存,可避免对接收方缓冲区的占用。第二种方法就是选择重传协议所使用的处理方式,该方法将不按序的报文段暂存于接收缓存内,待所缺序号的报文段收齐后再一起上交应用层,这样有可能避免发送方对已经被接收方收到的不按序的报文段的重传,减少了对网络带宽的消耗,但增加了接收方缓冲区的开销。
【答案解析】
问答题
一个UDP用户数据报的首部的十六进制表示为07 21 00 45 00 2C E8 27。试求源端口、目的端口、用户数据报总长度、数据部分长度。这个用户数据报是从客户发送给服务器还是服务器发送给客户?使用UDP的这个服务器程序是什么?
【正确答案】UDP的数据报格式如下图所示。
[*]
UDP的数据报格式
第1、2个字节表示源端口,将07 21转化为二进制是0000011100100001,所以十进制为1825,得到源端口为1825。第3、4个字节为目标端口,将45转换为十进制得到目的端口为69。第5、6字节为2C,转换为十进制的数据总长度为44B,那么数据部分的长度应该等于总长度减去UDP首部8B,即得到数据部分长度为36B。
进一步分析,发现该UDP数据报是发送到69端口,是熟知的TFTP的端口。由此可以推出,该数据报是由客户端发送给服务器的,使用这个服务的程序是TFTP。
【答案解析】
问答题
为什么在TCP首部有一个表示首部长度的偏移段,而UDP的首部就没有这个段?
【正确答案】TCP首部除固定长度部分外,还有选项,因此TCP首部长是可变的(在20B~60B),在其首部需要有一个偏移段来说明首部的总长度。而UDP首部长度是固定的(永远都是8B),所以在其首部中就没有必要设置这个段。
【答案解析】