郑州大学计算机网络实验05 TCP可靠传输和重传分析

实验五:TCP可靠传输和重传分析

【实验目的】

1、掌握TCP可靠传输原理;

2、掌握TCP的超时重传和快重传机制;

3、了解Linux下iptables命令的使用方法。

【实验步骤与结果记录】

要求:根据实验指导书中的实验内容和步骤,认真完成实验。采取截图、拍照等形式记录自己的实验步骤和结果。(可根据需要加页)

步骤1:修改Linux系统参数

1.在Linux中,执行如下命令,修改TCP连接的接收缓存参数,减少Linux 分配的接收缓存,降低接收窗口值。

sysctl -w net.ipv4.tcp_rmem='4096 65536 65536'

2.在Linux中,执行如下命令,关闭SACK选项,避免执行基于SACK的重传算法。

sysctl -w net.ipv4.tcp_sack=0

步骤2:创建虚拟网络拓扑。

1.使用script3.1.sh 脚本,创建如图所示的网络拓扑结构。

在Linux中,该虚拟网络拓扑的实现如图所示。

运行脚本,创建虚拟网络拓扑。

2.执行Linux命令,ip netns list 查询已经建立的NS列表,在所有NS内执行 ifconfig -a 命令查看NS内的网络接口配置,执行Linux命令 brctl show 查看交换机桥接状态,验证网络拓扑。

步骤3:为虚拟网络拓扑中的各路由器配置静态路由。

1. 使用script3.2.sh 脚本,为各路由器配置静态路由。

步骤4:关闭网卡offload功能,将运输层封装时需要的计算还给CPU

1. 使用script3.3.sh 脚本,关闭网卡offload功能。

步骤5:在路由器RA上,用iptables设置规则,模拟丢包

1.执行如下Linux命令,在路由器RA中,用iptables 设置规则,以10%的概率丢弃目标地址为192.168.57.254(ns57C)的IP数据报。

ip netns exec RA iptables -I FORWARD -d 192.168.57.254 -m statistic --mode random --probability 0.1 -j DROP

步骤6:打开两个终端窗口,分别模拟主机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,并修改终端名。

步骤7:在主机ns56A上创建一个100K字节长度的文件备用

1.在主机ns56A的模拟终端中,执行如下命令,创建一个100K字节长度的文件,命名为100K.0。

truncate -s 100K 100K.0

步骤8:在主机ns56A上启动Wireshark,在接口tap56A上启动抓包

1.新开一个终端窗口,执行如下命令,在主机ns56A上后台启动Wireshark。

ip netns exec ns56A wireshark &

2.在Wireshark窗口中选择接口tap56A,启动抓包。

步骤9:在主机ns57C上打开TCP服务程序。在主机ns56A上打开TCP客户程序,然后通过网络将主机ns56A上的100K.0文件发送到主机ns57C

1.在主机ns57C的模拟终端中,执行如下命令,在4499端口打开TCP服务,并将输出重定向到文件100K.1

nc -lv 4499 > 100K.1

执行上述命令后,通过TCP连接收到的字符被保存到文件100K.1中。

2.在主机ns56A的模拟终端中,执行如下命令,打开TCP客户程序,指定TCP服务程序的IP地址和端口,并将输入重定向到文件100K.0。

nc 192.168.57.254 4499 < 100K.0

执行上述命令后,TCP连接建立后,会自动读取文件100K.0,并从TCP连接发送出去。

3.文件100K.0发送完成后,ns56A上的nc命令会主动释放TCP连接。

步骤10:在Wireshark中停止抓包,保存抓包结果文件并分析本次TCP通信,理解TCP超时重传机制和快重传机制。

停止抓包,保存抓包结果。

1.如果抓包结果中没有出现快重传,可以重复执行实验步骤8-10,直至抓到理想的结果。

2.如果抓包结果中没有出现超时重传,可以重复执行实验步骤8-10,直至抓到理想的结果。

3.如果抓包结果中没有出现部分ACK,可以重复执行实验步骤8-10,直至抓到理想的结果。

【问题与分析】

1.本实验要求捕获到TCP超时重传事件,快重传事件和部分ACK事件,你在实验中捕获这几种事件时,操作系统为主机ns56A上的TCP客户程序分配的端口号是多少,如果这些事件是分多次捕获的,请分别给出客户进程的端口号。截图说明。

由图可知,在实验中捕获这几种事件时,操作系统为主机ns56A上的TCP客户程序分配的端口号是40674。

2.在你的实验结果中,任意选择一个超时重传的报文段,分析并回答以下问题:

(1) wireshark给这个超时重传报文段的编号是多少?分析超时重传报文段的首部,截图并填写表5.1。

这个超时重传报文段的编号是67。

打开相对序号选项,获取相对序号。

表5.1 超时重传报文段分析

Wireshark分配给重传报文段的编号

67

源端口

40674

目的端口

4499

序号(相对序号)

32769

数据偏移

32bytes

窗口

7300

(2) 这个超时重传报文段重传的原TCP报文段的编号是多少,分析原TCP报文段的首部,截图并填写表5.2。

将序号字段排列到列,便于寻找序号。

由图可知,上一个号码为32769的报文为51号报文。

表5.2原TCP报文段分析

Wireshark分配给原报文段的编号

51

源端口

40674

目的端口

4499

序号(相对序号)

32769

数据偏移

32bytes

窗口

7300

(3) 超时重传报文段发送之前,共收到几次对该报文段的前一个报文段的ACK确认?该超时重传报文段触发过快重传么?该报文段与原报文段的时间间隔是多长?截图说明你的分析过程。

如图所示,共有5次错误确认,应还有1个正确确认,故共收到6次确认。

该超时重传报文段没有触发过快重传。

该报文段时间约为0.2。

原报文段时间约为0.0。

故该报文段与原报文段的时间间隔是0.2-0.0=0.2s。

3.在你的实验结果中,任意选择一个快重传的报文段,分析并回答以下问题:

(1) wireshark给这个快重传报文段的编号是多少?分析超时重传报文段的首部,截图并填写表5.3。

这个快重传的编号是29。

按照内容填写数值即可。

表5.3 快重传报文段分析

Wireshark分配给快重传报文段的编号

29

源端口

40674

目的端口

4499

序号(相对序号)

11089

数据偏移

32bytes

窗口

7300

(2) 这个快重传报文段重传的原TCP报文段的编号是多少,分析原TCP报文段的首部,截图并填写表5.4。

由相对序号可知原TCP报文段的编号是22。

按照报文段内容填写即可。

表5.4原TCP报文段分析

Wireshark分配给原报文段的编号

22

源端口

40674

目的端口

4499

序号(相对序号)

11089

数据偏移

32bytes

窗口

7300

(3) 快重传报文段发送之前,共收到几次对该报文段的前一个报文段的ACK确认?截图说明你的分析过程。

共有3次错误确认,还有1次正确确认,故共有4次对前一个报文段的ACK确认。

4、在你的实验结果中,找到一次主机ns57C发给主机ns56A的部分ACK报文段。分析这次快重传过程中,引起快重传的丢失报文段、快重传报文段、快重传之前ns56A发送的最后一个报文段、部分ACK报文段,截图并填写表5.5。

含有该字段说明发生了部分确认。

丢失报文段是40,快重传报文段是50。

快重传前ns56A发送的最后一个报文段的编号是48。

Wireshark分配给部分ACK报文段的编号是52号。

丢失报文段的序号是24577。

丢失报文段的数据部分长度为1448。

快重传报文段的序号为24577。

快重传之前ns56A发送的最后一个报文段的序号是31817。

快重传之前ns56A发送的最后一个报文段的数据部分长度是952。

最后一字节编号=31817+952-1=32768。

部分ACK报文段的确认号是31817。

表5.5部分ACK分析

Wireshark分配给丢失报文段的编号

40

Wireshark分配给快重传报文段的编号

50

Wireshark分配给快重传前ns56A发送的最后一个报文段的编号

48

Wireshark分配给部分ACK报文段的编号

52

丢失报文段的序号(相对序号)

24577

丢失报文段的数据部分长度

1448(字节)

快重传报文段的序号(相对序号)

24577

快重传之前ns56A发送的最后一个报文段的序号(相对序号)

31817

快重传之前ns56A发送的最后一个报文段的数据部分长度

952(字节)

快重传发生时,ns56A发送的最后一字节的编号

32768

部分ACK报文段的确认号(相对确认号)

31817

ns56A收到部分ACK报文段后,是如何处理的?截图说明你的分析过程。

收到部分ACK立刻重传缺失数据,避免触发超时重传。

  • 49
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值