Skip to content

code-cheers/tcp-test

Repository files navigation

Docker 中的 TCP + Mininet 示例

容器里启动 Mininet,两台主机经 bridge 互联:h1 跑 TCP 服务器,h2 发起连接,h1tcpdump 抓包。每个场景独立脚本,配合 Makefile 直接运行:

  • 正常三次握手,pcap:captures/handshake.pcap
  • SYN 丢弃,pcap:captures/handshake_syn_drop.pcap
  • 第三次 ACK 丢弃,pcap:captures/handshake_ack_drop.pcap
  • 数据阶段定向丢包(握手正常后,丢服务器方向的已建立流量以观察重传),pcap:captures/data_loss.pcap

前置条件

  • 能运行特权容器的 Docker(Mininet/OVS 需要)。

构建/运行(默认 Linux bridge,无需 openvswitch 模块)

# 构建镜像
make build

# 运行各场景(pcap 落在 captures/)
make normal
make syn-drop
make ack-drop
make data-loss   # 握手后在客户端侧丢掉来自 server:5000 的数据,触发重传

容器内流程:

  • run_demo.sh 启动 OVS(若选择 OVS),清理旧的 Mininet 状态,然后根据 SCENARIO 选择脚本。
  • 各脚本创建两台主机(10.0.0.110.0.0.2),在 h1 启动 TCP 服务器,从 h2 发起连接,并在 h1 上抓包。

进入容器手动测试

  • 直接进 shell:docker run --rm -it --privileged -v "$(pwd)"/captures:/captures tcp-mininet-demo bash
  • 先启动 OVS、清理 Mininet 再进 shell:docker run --rm -it --privileged -v "$(pwd)"/captures:/captures -e SHELL_MODE=1 tcp-mininet-demo
    • 在 shell 内可手动跑:python3 /opt/demo/normal_demo.py 等四个脚本,或使用 mn 做其他拓扑试验。

若想使用 OVS

  • 宿主机内核需有 openvswitch 模块,并在运行容器时挂载 /lib/modules
  • 示例:
    docker run --rm -it --privileged \
      -v /lib/modules:/lib/modules:ro \
      -v "$(pwd)"/captures:/captures \
      -e SWITCH_MODE=ovs \
      tcp-mininet-demo
    无法加载 openvswitch 时请保留默认 SWITCH_MODE=linuxbridge

查看抓包

  • 正常场景:tcpdump -r captures/handshake.pcap 可见 SYN/SYN-ACK/ACK 以及简短 payload。
  • SYN 丢弃场景:tcpdump -r captures/handshake_syn_drop.pcap 可见多次 SYN 重传,无 SYN-ACK。
  • ACK 丢弃场景:tcpdump -r captures/handshake_ack_drop.pcap 可见 SYN、SYN-ACK 及其重传,缺少最终 ACK;客户端侧虽认为已 connect,发送/接收会超时失败。
  • 数据丢包场景:tcpdump -r captures/data_loss.pcap 可见握手正常,随后 server->client 方向的包被丢弃,服务器会持续重传直至超时。

主要文件

  • Dockerfile:基于 Ubuntu 22.04 安装 Mininet、OVS、iptables、ethtool 等工具。
  • run_demo.sh:启动 OVS(可选)并根据 SCENARIO 运行对应脚本。
  • common.py:Mininet 拓扑、抓包等公共辅助。
  • normal_demo.py / syn_drop_demo.py / ack_drop_demo.py / data_loss_demo.py:各场景逻辑。
  • Makefile:构建与运行命令。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages