实验四:TCP协议探索和连接管理分析
【实验目的】
1、掌握TCP协议数据格式;
2、掌握TCP首部各字段含义;
3、掌握TCP建立连接和释放连接的过程;
4、熟悉Linux下truncate命令的使用方法;
5、了解Linux中利用nc命令开启远程shell的方法。
【实验步骤与结果记录】
要求:根据实验指导书中的实验内容和步骤,认真完成实验。采取截图、拍照等形式记录自己的实验步骤和结果。(可根据需要加页)
步骤1:创建虚拟网络拓扑。
1.使用script3.1.sh 脚本,创建如图所示的网络拓扑结构。
在Linux中,该虚拟网络拓扑的实现如图所示。
运行脚本,创建虚拟网络拓扑。
2.执行Linux命令,ip netns list 查询已经建立的NS列表,在所有NS内执行ifconfig -a 命令查看NS内的网络接口配置,执行Linux命令 brctl show 查看交换机桥接状态,验证网络拓扑。
步骤2:为虚拟网络拓扑中的各路由器配置静态路由。
1. 使用script3.2.sh 脚本,为各路由器配置静态路由。
步骤3:关闭网卡offload功能,将运输层封装时需要的计算还给CPU
1. 使用script3.3.sh 脚本,关闭网卡offload功能。
步骤4:打开两个终端窗口,分别模拟主机ns56A和主机ns57C
1.打开一个终端窗口,利用Linux命令bash将本窗口模拟成主机ns56A的终端 执行以下命令
ip netns exec ns56A bash
执行上述命令后,Linux将在网络命名空间ns56A中开启bash交互,之后输入的Linux命令均在ns56A中执行,相当于模拟了主机ns56A的终端。
2.然后输入 ifconfig -a ,确认是否成功模拟成主机ns56A。
为了避免混淆,可以改变终端窗口名字。
3. 再打开一个终端窗口,利用Linux命令bash将本窗口模拟成主机ns57C的终端 执行以下命令
ip netns exec ns57C bash
模拟主机ns57C的终端。
4.然后输入ifconfig -a ,确认是否成功模拟成主机ns57C,并修改终端名。
步骤5:在主机ns57C上创建一个3500字节长度的文件备用。
1.在主机ns57C的模拟终端中,执行如下命令,创建一个3500字节长度的文件,命名为3500.0。
truncate -s 3500 3500.0
步骤6:在主机ns57C上启动Wireshark,在接口tap57C上启动抓包。
1.新开一个终端窗口,执行以下命令,在主机ns57C后台上启动Wireshark。
ip netns exec ns57C wireshark &
2.在Wireshark窗口中选择接口tap57C,启动抓包。
步骤7:在主机ns57C上打开TCP服务程序。在主机ns56A上打开TCP客户程序,然后通过网络将主机ns57C上的3500.0文件读取到主机ns56A
1.在主机ns57C的模拟终端中,执行如下命令,在4499端口打开TCP服务,并开启shell服务。
nc -e /bin/sh -lv 4499
执行上述命令后,通过TCP连接收到的字符将被发送到主机ns57C的shell中执行。
2.在主机ns56A的模拟终端中,执行如下命令,打开TCP客户程序,并指定TCP服务程序的IP地址和端口。
nc 192.168.57.254 4499
3.在主机ns56A的模拟终端中,输入如下命令,将该命令被发送到主机ns57C的shell中,读取文件3500.0,命令执行结果通过TCP连接发送回主机ns56A。
cat 3500.0
4.文件传输完毕后,在主机ns57C和ns56A上,先后用 Ctrl+C 终止TCP通信。
步骤8:在Wireshark中停止抓包,保存抓包结果文件并分析本次TCP通信,理解TCP报文段格式,理解TCP建立连接和释放连接的过程
1.停止抓包后保存抓包数据,便于后续进行分析。
【问题与分析】
1.在步骤7中,操作系统为主机ns56A上的TCP客户程序分配的端口号是多少?截图说明你的分析过程。
如图所示,操作系统为主机ns56A上的TCP客户程序分配的端口号是59502。
2.在步骤7中,你一共截获了几个TCP报文段?分析连接建立后,第一个TCP客户发给TCP服务器的报文段,以及第一个TCP服务器发给TCP客户的报文段的首部,截图并填写表4.1和表4.2。
如图所示,共有25个报文段,有10个是ARP,有15个是TCP报文段。
第一个TCP客户发给TCP服务器的报文段是8号报文,按照报文内容填写即可。
按照如图所示将相对序号关闭即可获得真实序号。
表4.1 TCP客户发给TCP服务器的报文段首部 | |
字段名 | 值 |
源端口 | 59502 |
目的端口 | 4499 |
序号(真实序号) | 2046422412 |
确认号(真实确认号) | 851582143 |
数据偏移 | 32bytes |
窗口 | 229 |
校验和 | 0xd213 |
包含什么选项 | No-Operation (NOP), Timestamps |
第一个TCP服务器发给TCP客户的报文段是9号报文,按照报文内容填写即可。
表4.2 TCP服务器发给TCP客户的报文段首部 | |
字段名 | 值 |
源端口 | 4499 |
目的端口 | 59502 |
序号(真实序号) | 851582143 |
确认号(真实确认号) | 2046422423 |
数据偏移 | 32bytes |
窗口 | 227 |
校验和 | 0x2b94 |
包含什么选项 | No-Operation (NOP), Timestamps |
3.在你的实验结果中,TCP建立连接时,双方是否使用了MSS选项,主机ns56A和主机ns57C发送给对方的MSS选项值时多少?ns57C将3500字节数据发送给ns56A用了几个报文段?每个报文段中包含多少字节的数据?请计算ns57C的有效最大报文段长度,并验证是否与实验结果一致?截图说明你的分析过程。
双方都使用了MSS选项。
如图所示,双方发给对方的MSS值都为1460bytes。
将数据值应用到列,便于查看数据长度。
改变标题,避免混淆。
由数据可知,共用了3个报文段,数据长度分别为1448,1448,604。
EMSS=min(RMTU,SMTU)-TCP首部长度-IP首部长度
SMTU=1500
RMSS=RMTU-40=1460
RMTU=1460+40=1500
EMSS=min(1500,1500)-TCP首部长度-IP首部长度
IP首部长度为20。
TCP首部长度为32
EMSS=1500-20-32=1448
与计算的一致。
4.在你的实验结果中,通信双方使用窗口扩大选项了么?双方的窗口移位值时各是多少?双方的窗口各扩大了多少倍?截图说明你的分析过程。
由图可知客户使用了窗口扩大选项,窗口移位值为7,窗口扩大了128倍。
由图可知服务器使用了窗口扩大选项,窗口移位值为7,窗口扩大了128倍。
5.在步骤7中,你截获TCP建立连接和释放连接的报文段了么?分析建立连接和释放连接的几个报文段,截图并填写表4.3和表4.4。
建立连接使用了3个报文段。
通过查询报文段的Flags的内容即可知道SYN位与ACK位的值,按照数据填写表格即可。
表4.3 TCP建立连接的分析 | ||||
报文段序号 | SYN位 | ACK位 | 序号(真实序号) | 确认号 (真实确认号) |
3 | 1 | 0 | 2046422411 | 0 |
4 | 1 | 1 | 851582142 | 2046422412 |
5 | 0 | 1 | 2046422412 | 851582143 |
释放连接共使用了4个报文段。
通过查询报文段的Flags的内容即可知道FIN位与ACK位的值,按照数据填写表格即可。
表4.4 TCP释放连接的分析 | ||||
报文段序号 | FIN位 | ACK位 | 序号(真实序号) | 确认号 (真实确认号) |
18 | 1 | 1 | 851585643 | 2046422423 |
19 | 0 | 1 | 2046422423 | 851585644 |
22 | 1 | 1 | 2046422423 | 851585644 |
23 | 0 | 1 | 851585644 | 2046422424 |