- TCP基础实验
- TCP滑动窗口机制和窗口探查机制分析
- TCP慢启动、拥塞避免算法及拥塞处理实验
- UDP实验
tips:TCP 实验约 Linux 系统,UDP 实验约 winxp 系统
0 Linux 相关 & mooc & 实验报告
0.1 Linux 相关
1 Linux 用户名&密码
用户名:root
密码:network
2 Linux 配 IP
以PCB为例,配置接收端IP地址:
- 右键点击如图的网络连接图标,选择
Edit Connection;
- 先查看是否有可用的配置好的ip地址,
如果没有,则点击add,如下图配置(选择IPv4 Settings,Method为Manual, 点击Add,输入 IP 地址、掩码、网管),点击apply,关闭编辑网络连接。
注意:配网关和子网掩码的之前或之后,要在旁边空白的地方点一下,看看是否配置成功了。或者配完敲一下回车。不要急于点确定。否则,容易出现配的网关等总是变成0.0.0.0
- 鼠标左键点击网络连接图标,先点击
disconnect断开网络连接,再用鼠标选择receiver eth0(你刚刚给那个 IP 的命名),出现下面界面即可。还可以ipconfig验证 ip 是否生效
3 Linux配路由器或交换机
打开命令行窗口,输入minicom,敲回车,等待几秒钟即可
0.2 mooc
0.3 实验报告
本次实验报告共 11 题
- TCP 基础实验:T1-T5
- TCP 滑动窗口机制和窗口探查机制分析:T6-T7
- TCP 慢启动、拥塞避免算法及拥塞处理实验:T8-T10
- UDP 实验:T11
T1
根据2.6中步骤3回答:TCP的连接和建立采用的是:三次握手方式,PCA是主动打开,PCB是被动打开。先点击发送再点击接收,会出现什么问题?为什么?
如果先点击发送再点击连接,则会失败,提示 IO错误。因为这类似于C/S模式,如果被动连接server没有启动,不接受连接,则主动连接的client不能连接上。必须先打开被动连接一方。
T2 参考
发送方初始序号:209418378
T3
TCP连接建立时,其报文首部与其它TCP报文不同,有一个“Option”字段,它的作用是什么,值为多少?结合IEEE802.3协议规定的以太网最大帧长度分析此数据是怎样得出的。
它的作用是给出最大报文段长度MSS,大小是发送方和接收方的MSS的较小值。这个值将在数据传输时被使用到,在本实验中,该值为1460字节。
IEEE802.3协议规定的以太网最大帧长度为1500字节,减去20字节的IP首部和20字节的TCP首部,结果即为1460字节。
包含Option字段的报文见下:
T4 参考
T5 参考
T6
T7
T8 参考
(1)
ssthresh = 2147483647,cwnd = 3。ssthresh的初始值很大,而cwnd的初始值很小,这样,TCP可以在开始时快速增加发送窗口,直到达到ssthresh,然后进入拥塞避免阶段,逐渐增加发送窗口。
RFC5681慢启动初始值的规定如下:
If SMSS > 2190 bytes:
IW = 2 SMSS bytes and MUST NOT be more than 2 segments
If (SMSS > 1095 bytes) and (SMSS <= 2190 bytes) :
IW = 3 SMSS bytes and MUST NOT be more than 3 segments
If (SMSS <= 1095 bytes)
IW = 4 * SMSS bytes and MUST NOT be more than 4 segments
计算过程如下表:
| rcv_wnd | snd_wnd_left | snd_wnd_pointer | snd_wnd_left+cwnd和 snd_wnd_left+rcv_wnd |
snd_wnd_point- left | |
|---|---|---|---|---|---|
| 发送方发出报文 | 5840 | 978938082 | 978939482 | 978942462 978943922 | 1400 |
| 发送窗口右边沿 | Min(snd_wnd_left+cwnd, snd_wnd_left+rcv_wnd) = 978942462 |
(2)
ssthresh保持不变,cwnd每收到一个确认报文就加1.
因为snd_cwnd*1460< ssthresh,处于慢启动阶段,每收到一个ACK,snd_cwnd至多增加1个MSS的数值。
发送的报文相关信息截图如下,可以发现符合这一规律。
(3)
第60号报文时ssthresh变化为10和cwnd变化为1,因为路由器上的端口被关闭。
之后ssthresh不变,而cwnd依次加1.依次处于慢启动、拥塞避免阶段直到发送完毕。根据截图可见符合这一规律。
在发送文件为100k大小的实验中,截获的报文信息如下:
T9
(1)
参考 1:
| 第一个重传时间差 | 第二个重传时间差 | 第三个重传时间差 | |
|---|---|---|---|
| 10Mbps | 0.275358 | 0.537274 | 0.123423 |
| 80Kbps | 4.235234 | 9.257412 | 21.26568 |
计算超时重传时间时,采用了修正的Karn算法,同种速率下,重传时间满足:新的重传时间=2×旧的重传时间,表现为重传时间差成倍增长;转发速率越大,重传时间越短。
示例截图如下:
参考 2
| 第一个重传时间差 | 第二个重传时间差 | 第三个重传时间差 | |
|---|---|---|---|
| 10Mbps | 0.2053s | 0.4128s | 0.8243s |
| 80Kbps | 3.2225s | 6.4449s | 12.8898s |
T10
[R1]interface g0/0
[R1-GigabitEthernet0/0]undo qos lr outbound
[R1-GigabitEthernet0/0]interface g0/1
[R1-GigabitEthernet0/1]undo qos lr outbound
1 TCP 基础实验
步骤 1 组网,配置 IP、路由器、交换机
- 组网
- 配置 IP
- PCA:点击“网络连接图标” -> 点击 TCP_send -> 检查
ipconfig192.168.1.2 - PCB:点击“网络连接图标” -> 点击 TCP_Receiver -> 检查
ipconfig192.168.2.2 ->ping 192.168.1.2
- PCA:点击“网络连接图标” -> 点击 TCP_send -> 检查
- 配置路由器:PCC上
minicom
sys
sysn R1
interface e 0/0
ip add 192.168.1.1 24
quit
interface e 0/1
ip add 192.168.2.1 24
quit
- 配置交换机:PCA 上
minicom
sys
sysn S1
vlan 2
port e 1/0/1 e 1/0/2
quit
vlan 3
port e 1/0/23 e 1/0/24
quit
步骤 2、步骤 3
-
PCB 打开 Wireshark,选择
eth0进行抓包,过滤 tcp 报文 -
PCB 上双击运行桌面的
tcptest程序,Run, 选择“作为接收端”,休眠时间为 0,计数器阈值为 0,点击接收 -
PCA 打开 Wireshark,选择
eth0进行抓包,过滤 tcp 报文 -
PCA 上双击运行桌面的
tcplog_init程序进行初始化,Run -
PCA 上双击运行桌面的
tcptest程序,Run,选择“作为发送端”,要发送的文件为???300k.txt,点击发送 -
保存 PCA、PCB报文,截图
Note看到 TCP seq number 是 0 或者 1 的,这些都是 wireshark 软件处理过的 relative sequence number。而不是初始的 32 位随机产生的 sequence number。可以通过设置 wireshark 来解决:如图,设置一下 wireshark,edit—>preference 选 tcp,将 relative sequence number 勾选掉。
-
下面两个方法二选一,看哪个能行得通走哪个
- PCA 上双击运行桌面的
tcplog_read程序,Run。双击桌面network文件夹,root,TCPLog,根据文件属性的日期找到我们的数据,右键,点击最上面的那一个选项来打开文件,截图 - 终端命令行中运行脚本来读取“TCPConnection 实时监控模块”已记录的此 TCP 连接期间的相关参数数据
- PCA 上双击运行桌面的
root@qjl-desktop:~# cd /root/TCPLog
root@qjl-desktop:~/TCPLog# ./read.sh
此脚本将读取的 TCP 连接相关参数数据保存在本地磁盘/root/TCPLog/目录下的“tcpsnd-wnddata.txt"和“tcprtodata.txt”文件中,将其复制到/root/DATA/目录下并改名为“send1-学号-tcpsndwnddata.txt"和“send1-学号-tcprtodata. txt”。
步骤 4 5 6
分析报文,填写报告(参考本博客第 0.3 节)
2 TCP 滑动窗口机制和窗口探查机制分析
3 TCP 慢启动、拥塞避免算法及拥塞处理实验
步骤 1
路由器 R1 上配置端口转发速率为 10Mbps
interface e0/0
qos lr outbound cir 10000 #存疑,参见下面note
interface e0/1
qos lr outbound cir 10000
如图所示,设置接口转发速率10Mbps 需使用?在线帮助。
注意按照设备上的提示做,注意一下转发速率的单位,不同设备单位可能不同。
步骤 2
- PCB 打开 Wireshark,选择
eth0进行抓包,过滤 tcp 报文 - PCA 打开 Wireshark,选择
eth0进行抓包,过滤 tcp 报文
步骤 3
- PCB 上双击运行桌面的
tcptest程序,Run, 选择“作为接收端”,休眠时间为 0,计数器阈值为 0,点击接收 - (不清楚用不用做)PCA 上双击运行桌面的
tcplog_init程序进行初始化,Run - PCA 上双击运行桌面的
tcptest程序,Run,选择“作为发送端”,要发送的文件为/root/snd6m.txt,点击发送 - PCA 点击
发送后立即在 minicom 内shutdown路由器的一个端口。
[R1-GigabitEthernet0/0]shutdown
由于文件发送时间较快,务必与现在 minicom 上输入命令 shutdown,PCA 发送后立即回车,一定要保证 shutdown 一个路由器端口后,程序还在传输数据(或许可以在 TCP 协议测试软件内看到“系统 IO 错误”)。如果 shutdown 一个路由器端口前程序已经传输完数据,重做此步骤!!! - 10s 后,将此端口 undo shutdown
[R1-GigabitEthernet0/0]undo shutdown - 存报文
send3-学号,receive3-学号
步骤 4
- 下面两个方法二选一,看哪个能行得通走哪个
- PCA 上双击运行桌面的
tcplog_read程序,Run。双击桌面network文件夹,root,TCPLog,根据文件属性的日期找到我们的数据,右键,点击最上面的那一个选项来打开文件,截图 - 终端命令行中运行脚本来读取“TCPConnection 实时监控模块”已记录的此 TCP 连接期间的相关参数数据
- PCA 上双击运行桌面的
root@qjl-desktop:~# cd /root/TCPLog
root@qjl-desktop:~/TCPLog# ./read.sh
此脚本将读取的 TCP 连接相关参数数据保存在本地磁盘/root/TCPLog/目录下的“tcpsnd-wnddata.txt"和“tcprtodata.txt”文件中,将其复制到/root/DATA/目录下并改名为“send3-学号-tcpsndwnddata.txt"和“send3-学号-tcprtodata.txt”。
步骤 5
更改路由器上的端口转发速率为 80Kbps
interface e0/0
qos lr outbound cir 80
interface e0/1
qos lr outbound cir 80
如图所示,设置接口转发速率 10Mbps 需使用?在线帮助。
注意按照设备上的提示做,注意一下转发速率的单位,不同设备单位可能不同。
步骤 6
- PCB 打开 Wireshark,选择
eth0进行抓包,过滤 tcp 报文 - PCA 打开 Wireshark,选择
eth0进行抓包,过滤 tcp 报文
步骤 7
- PCB 上双击运行桌面的
tcptest程序,Run, 选择“作为接收端”,休眠时间为 0,计数器阈值为 0,点击接收 - (不清楚用不用做)PCA 上双击运行桌面的
tcplog_init程序进行初始化,Run - PCA 上双击运行桌面的
tcptest程序,Run,选择“作为发送端”,要发送的文件为/root/snd100k.txt,点击发送 - PCA 点击
发送后立即在 minicom 内shutdown路由器的一个端口。
[R1-GigabitEthernet0/0]shutdown
此文件发送较慢,可从容配置,但依旧要 shutdown 后仍在传输局 - 40s 后,将此端口 undo shutdown
[R1-GigabitEthernet0/0]undo shutdown - 存报文
send4-学号,receive4-学号
步骤 8
- 下面两个方法二选一,看哪个能行得通走哪个
- PCA 上双击运行桌面的
tcplog_read程序,Run。双击桌面network文件夹,root,TCPLog,根据文件属性的日期找到我们的数据,右键,点击最上面的那一个选项来打开文件,截图 - 终端命令行中运行脚本来读取“TCPConnection 实时监控模块”已记录的此 TCP 连接期间的相关参数数据
- PCA 上双击运行桌面的
root@qjl-desktop:~# cd /root/TCPLog
root@qjl-desktop:~/TCPLog# ./read.sh
此脚本将读取的 TCP 连接相关参数数据保存在本地磁盘/root/TCPLog/目录下的“tcpsnd-wnddata.txt"和“tcprtodata.txt”文件中,将其复制到/root/DATA/目录下并改名为“send4-学号-tcpsndwnddata.txt"和“send4-学号-tcprtodata.txt”。
步骤 9
分析文件“send3-学号”(或“receive3-学号”)和“send3-学号-tepsndwnddata.txt”(或send4-学号"和“send4-学号-tcpsndwnddata.txt”),体会慢启动、拥塞避免及拥塞处理机制,填报告
步骤 10
分析文件“send3-学号”“send3-学号-teprtodata.txt”和“send4-学号”号-teprtodata.txt”,体会超时与重传机制。
































