实验6 传输层实验

  1. TCP基础实验
  2. TCP滑动窗口机制和窗口探查机制分析
  3. TCP慢启动、拥塞避免算法及拥塞处理实验
  4. UDP实验

tips:TCP 实验约 Linux 系统,UDP 实验约 winxp 系统

0 Linux 相关 & mooc & 实验报告

0.1 Linux 相关

1 Linux 用户名&密码

用户名:root
密码:network

2 Linux 配 IP

以PCB为例,配置接收端IP地址:

  1. 右键点击如图的网络连接图标,选择 Edit Connection
    Pasted image 20251213221647.png
    Pasted image 20251213221729.png
  2. 先查看是否有可用的配置好的ip地址,
    如果没有,则点击add,如下图配置(选择 IPv4 Settings, MethodManual, 点击 Add,输入 IP 地址、掩码、网管),点击apply,关闭编辑网络连接。
    注意:配网关和子网掩码的之前或之后,要在旁边空白的地方点一下,看看是否配置成功了。或者配完敲一下回车。不要急于点确定。否则,容易出现配的网关等总是变成0.0.0.0
    Pasted image 20251213221800.png
  3. 鼠标左键点击网络连接图标,先点击 disconnect 断开网络连接,再用鼠标选择receiver eth0(你刚刚给那个 IP 的命名),出现下面界面即可。还可以 ipconfig 验证 ip 是否生效
    Pasted image 20251213221810.png
3 Linux配路由器或交换机

打开命令行窗口,输入minicom,敲回车,等待几秒钟即可
Pasted image 20251213221920.png

0.2 mooc

Pasted image 20251213234143.png
Pasted image 20251213234203.png

0.3 实验报告

本次实验报告共 11 题

  1. TCP 基础实验:T1-T5
  2. TCP 滑动窗口机制和窗口探查机制分析:T6-T7
  3. TCP 慢启动、拥塞避免算法及拥塞处理实验:T8-T10
  4. UDP 实验:T11
T1

根据2.6中步骤3回答:TCP的连接和建立采用的是:三次握手方式,PCA是主动打开,PCB是被动打开。先点击发送再点击接收,会出现什么问题?为什么?
如果先点击发送再点击连接,则会失败,提示 IO错误。因为这类似于C/S模式,如果被动连接server没有启动,不接受连接,则主动连接的client不能连接上。必须先打开被动连接一方。

T2 参考

Pasted image 20251213225238.png
发送方初始序号:209418378
Pasted image 20251213225305.png
Pasted image 20251213225318.png
Pasted image 20251213225328.png

T3

TCP连接建立时,其报文首部与其它TCP报文不同,有一个“Option”字段,它的作用是什么,值为多少?结合IEEE802.3协议规定的以太网最大帧长度分析此数据是怎样得出的。
它的作用是给出最大报文段长度MSS,大小是发送方和接收方的MSS的较小值。这个值将在数据传输时被使用到,在本实验中,该值为1460字节。
IEEE802.3协议规定的以太网最大帧长度为1500字节,减去20字节的IP首部和20字节的TCP首部,结果即为1460字节。
包含Option字段的报文见下:
Pasted image 20251213225714.png

T4 参考

Pasted image 20251213225735.png
Pasted image 20251213225758.png

T5 参考

Pasted image 20251213225836.png
Pasted image 20251213225903.png
Pasted image 20251213225908.png
Pasted image 20251213225913.png
Pasted image 20251213225916.png
Pasted image 20251213225921.png
Pasted image 20251213225926.png

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

Pasted image 20251213232748.png

(2)

ssthresh保持不变,cwnd每收到一个确认报文就加1.
因为snd_cwnd*1460< ssthresh,处于慢启动阶段,每收到一个ACK,snd_cwnd至多增加1个MSS的数值。
发送的报文相关信息截图如下,可以发现符合这一规律。
Pasted image 20251213232818.png

(3)

第60号报文时ssthresh变化为10和cwnd变化为1,因为路由器上的端口被关闭。
之后ssthresh不变,而cwnd依次加1.依次处于慢启动、拥塞避免阶段直到发送完毕。根据截图可见符合这一规律。
在发送文件为100k大小的实验中,截获的报文信息如下:
Pasted image 20251213232859.png
Pasted image 20251213232910.png

T9
(1)

参考 1

第一个重传时间差 第二个重传时间差 第三个重传时间差
10Mbps 0.275358 0.537274 0.123423
80Kbps 4.235234 9.257412 21.26568

计算超时重传时间时,采用了修正的Karn算法,同种速率下,重传时间满足:新的重传时间=2×旧的重传时间,表现为重传时间差成倍增长;转发速率越大,重传时间越短。
示例截图如下:
Pasted image 20251213233032.png
Pasted image 20251213233045.png

参考 2

第一个重传时间差 第二个重传时间差 第三个重传时间差
10Mbps 0.2053s 0.4128s 0.8243s
80Kbps 3.2225s 6.4449s 12.8898s

Pasted image 20251213233518.png
Pasted image 20251213233524.png
Pasted image 20251213233530.png

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、路由器、交换机
  1. 组网
    Pasted image 20251213221238.png
  2. 配置 IP
    1. PCA:点击“网络连接图标” -> 点击 TCP_send -> 检查ipconfig 192.168.1.2
    2. PCB:点击“网络连接图标” -> 点击 TCP_Receiver -> 检查 ipconfig 192.168.2.2 -> ping 192.168.1.2
  3. 配置路由器: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
  1. 配置交换机: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
  1. PCB 打开 Wireshark,选择 eth0 进行抓包,过滤 tcp 报文

  2. PCB 上双击运行桌面的 tcptest 程序, Run, 选择“作为接收端”, 休眠时间 为 0, 计数器阈值 为 0,点击 接收

  3. PCA 打开 Wireshark,选择 eth0 进行抓包,过滤 tcp 报文

  4. PCA 上双击运行桌面的 tcplog_init 程序进行初始化, Run

  5. PCA 上双击运行桌面的 tcptest 程序, Run,选择“作为发送端”, 要发送的文件???300k.txt,点击 发送

  6. 保存 PCA、PCB报文,截图

    Note

    看到 TCP seq number 是 0 或者 1 的,这些都是 wireshark 软件处理过的 relative sequence number。而不是初始的 32 位随机产生的 sequence number。可以通过设置 wireshark 来解决:如图,设置一下 wireshark,edit—>preference 选 tcp,将 relative sequence number 勾选掉。
    Pasted image 20251213225514.png

  7. 下面两个方法二选一,看哪个能行得通走哪个

    1. PCA 上双击运行桌面的 tcplog_read 程序, Run。双击桌面 network 文件夹, rootTCPLog,根据文件属性的日期找到我们的数据,右键,点击最上面的那一个选项来打开文件,截图
    2. 终端命令行中运行脚本来读取“TCPConnection 实时监控模块”已记录的此 TCP 连接期间的相关参数数据
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
Note

如图所示,设置接口转发速率10Mbps 需使用?在线帮助。
注意按照设备上的提示做,注意一下转发速率的单位,不同设备单位可能不同。
Pasted image 20251213230520.png

步骤 2
  1. PCB 打开 Wireshark,选择 eth0 进行抓包,过滤 tcp 报文
  2. PCA 打开 Wireshark,选择 eth0 进行抓包,过滤 tcp 报文
步骤 3
  1. PCB 上双击运行桌面的 tcptest 程序, Run, 选择“作为接收端”, 休眠时间 为 0, 计数器阈值 为 0,点击 接收
  2. (不清楚用不用做)PCA 上双击运行桌面的 tcplog_init 程序进行初始化, Run
  3. PCA 上双击运行桌面的 tcptest 程序, Run,选择“作为发送端”, 要发送的文件/root/snd6m.txt,点击 发送
  4. PCA 点击 发送立即在 minicom 内 shutdown 路由器的一个端口。
    [R1-GigabitEthernet0/0]shutdown
    由于文件发送时间较快,务必与现在 minicom 上输入命令 shutdown,PCA 发送后立即回车,一定要保证 shutdown 一个路由器端口后,程序还在传输数据(或许可以在 TCP 协议测试软件内看到“系统 IO 错误”)。如果 shutdown 一个路由器端口前程序已经传输完数据,重做此步骤!!!
  5. 10s 后,将此端口 undo shutdown
    [R1-GigabitEthernet0/0]undo shutdown
  6. 存报文 send3-学号, receive3-学号
步骤 4
  1. 下面两个方法二选一,看哪个能行得通走哪个
    1. PCA 上双击运行桌面的 tcplog_read 程序, Run。双击桌面 network 文件夹, rootTCPLog,根据文件属性的日期找到我们的数据,右键,点击最上面的那一个选项来打开文件,截图
    2. 终端命令行中运行脚本来读取“TCPConnection 实时监控模块”已记录的此 TCP 连接期间的相关参数数据
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
Note

如图所示,设置接口转发速率 10Mbps 需使用?在线帮助。
注意按照设备上的提示做,注意一下转发速率的单位,不同设备单位可能不同。
Pasted image 20251213230520.png

步骤 6
  1. PCB 打开 Wireshark,选择 eth0 进行抓包,过滤 tcp 报文
  2. PCA 打开 Wireshark,选择 eth0 进行抓包,过滤 tcp 报文
步骤 7
  1. PCB 上双击运行桌面的 tcptest 程序, Run, 选择“作为接收端”, 休眠时间 为 0, 计数器阈值 为 0,点击 接收
  2. (不清楚用不用做)PCA 上双击运行桌面的 tcplog_init 程序进行初始化, Run
  3. PCA 上双击运行桌面的 tcptest 程序, Run,选择“作为发送端”, 要发送的文件/root/snd100k.txt,点击 发送
  4. PCA 点击 发送立即在 minicom 内 shutdown 路由器的一个端口。
    [R1-GigabitEthernet0/0]shutdown
    此文件发送较慢,可从容配置,但依旧要 shutdown 后仍在传输局
  5. 40s 后,将此端口 undo shutdown
    [R1-GigabitEthernet0/0]undo shutdown
  6. 存报文 send4-学号, receive4-学号
步骤 8
  1. 下面两个方法二选一,看哪个能行得通走哪个
    1. PCA 上双击运行桌面的 tcplog_read 程序, Run。双击桌面 network 文件夹, rootTCPLog,根据文件属性的日期找到我们的数据,右键,点击最上面的那一个选项来打开文件,截图
    2. 终端命令行中运行脚本来读取“TCPConnection 实时监控模块”已记录的此 TCP 连接期间的相关参数数据
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”,体会超时与重传机制。

4 UDP 实验

Built with MDFriday ❤️