本地主机A的一个应用程序使用TCP协议与同一局域网内的另一台主机B通信。用Sniffer工具捕获本机A以太网发送和接收的所有通信流量,目前已经得到8个IP数据报。下表以16进制格式逐字节列出了这些IP数据报的全部内容,其中,编号2、3、6为主机A收到的IP数据报,其余为主机A发出的IP数据报。假定所有数据报的IP和TCP校验和均是正确的。注:IP分组头结构和TCP段头结构分别如下图所示。协议域为1、6、17、89分别对应ICMP、TCP、UDP、OSPF协议。
问答题 表1的IP分组中,哪几个完成了TCP连接建立过程中的三次握手?根据三次握手报文提供的信息,连接建立后,如果B发数据给A,那么首字节的编号是多少?
【正确答案】正确答案:编号2、3、6包为主机A收到的IP数据报,其他均为主机A发送的数据报,由主机A发送的数据报中的源IP地址可知主机A的IP地址为c0 a8 00 15。对比编号2、3、6包,可知2号数据报是来自一个发送方,3、6号是来自同一个发送方,由2号帧的源IP地址和目的IP地址以及其协议字段(ICMP协议)可知该数据报来自于不知名的一方(可能是网络中某个节点),而3、6号来自于主机B,则主机B的IP地址为c0 a8 O00 c0,所以三次握手应该是编号为1、3、4的三个数据报。 连接建立后,由主机A最后的4号确认报文段以及之后发送的5号报文段可知seq字段为2268 b9 91,ack号为5b 9f f7 1d,可知主机A期望收到对方的下一个报文段的数据中的第一个字节的序号为5b 9f f7 1d,也就是说如果B发送数据给A,首字节的编号就应该是5b 9f f7 1d。
【答案解析】
问答题 根据表1中的IP分组,A上的应用程序已经请求TCP发送的应用层数据的总字节是多少?
【正确答案】正确答案:主机A从4号报文段才可以携带应用层数据,所以只需要将4、5、7、8报文中的数据部分加起来即可,观察4、5、7、8号报文的头部长度字段,均为5,表示TCP头部长度均为5*4B=20B,由图表可知,从第三行开始的内容均为要传输的数据,其和为:0+16+16+32=64B。
【答案解析】
问答题 如果8号IP分组之后,B正确收到了A已发出的所有IP分组,B发给A的TCP报文段中ack号应当是多少(十六进制)?在8号IP分组之后,A上的应用程序请求TcP发送新的65495字节的应用层数据,那么,按TCP协议,在A未能得到B的任何确认报文之前,TCP可以发送到网络中的应用层数据最多是多少字节?
【正确答案】正确答案:主机B接收到主机A的IP分组后,会在8号报文段的序号字段的基础之上,加上其发送的数据字节数,即为:(22 68 b9 a1) 16 +32=(22 68 b9 c1) 16 。 B在6号报文段中指出自己的窗口字段为(20 00)=8192B,说明此时B还能接收到这么多数据。而之后A发送了两个报文段。由7号和8号报文段的序号和确认号可知8号是7号的重复发送数据,所以B只需要接收8号的数据部分,也就是32B,所以之后A还可以发送的字节数为8192—32B=8160B。
【答案解析】