Skip to content

南京大学本科生实验报告

课程名称: 计算机网络 任课教师:田臣

学院 工程管理学院 专业(方向) 计算机金融
学号 211275022 姓名 田昊东
Email 1040880153@qq.com 开始/完成日期 2023/3/10~2023/3/19

实验名称

  • 计算机网络Lab1: Switchyard & Mininet

实验目的

  • 下载虚拟机,配置实验环境
  • 了解mininet、wireshark、switchyard的基本使用、熟悉实验环境
  • 完成实验任务,体会并熟悉之后实验中将要使用的工具的用法和功能

实验内容

Modify the Mininet topology

  • 选取任务1:

Delete server2 in the topology

  • 对nodes部分进行修改,删除server2部分

  • python nodes = { "server1": { "mac": "10:00:00:00:00:{:02x}", "ip": "192.168.100.1/24" }, "client": { "mac": "30:00:00:00:00:{:02x}", "ip": "192.168.100.3/24" }, "hub": { "mac": "40:00:00:00:00:{:02x}", } }

  • mininet中测试检验

  • Snipaste_2023-03-19_20-30-50

  • 可以看到sever2已经被成功移除

Modify the logic of a device

  • 添加全局变量进行计数,统计in和out的数目
  • package_in = 0 package_out = 0

  • 如果包正常没有发生问题就对in计数加一,当包不指向hub、hub将包转发时对out计数加一

  • python global package_in ,package_out# 声明使用全局变量 package_in += 1# in计数 if eth is None: log_info("Received a non-Ethernet packet?!") return if eth.dst in mymacs: log_info("Received a packet intended for me") else: for intf in my_interfaces:# 泛洪,向非发送端口的所有接口发送数据包 if fromIface!= intf.name: package_out += 1# out计数 log_info (f"Flooding packet {packet} to {intf.name}") net.send_packet(intf, packet)

  • 使用pingall进行测试

  • Snipaste_2023-03-19_21-27-34

Modify the test scenario of a device

  • 选择任务一:

Create one test case by using the given function new_packet with different arguments

  • 添加测试4:帧的发送地址于hub的一个端口相同,hub接受到包后不做任何事情

  • python # test case 4: 帧的源地址与其中一个接口的MAC地址相同,不做任何事情 reqpkt = new_packet( "10:00:00:00:00:01", "10:00:00:00:00:02", '192.168.1.100', '172.16.42.2' ) s.expect( PacketInputEvent("eth2", reqpkt, display=Ethernet), ("An Ethernet frame should arrive on eth2 with destination address " "the same as eth2's MAC address") ) s.expect( PacketInputTimeoutEvent(1.0), ("The hub should not do anything in response to a frame arriving with" "same src as one of the hub's eth's MAC address") )

Run your device in Mininet

  • 操作流程如下
  • 生成mininet网络$ sudo python start_mininet.py
  • 对交换机单独打开一个界面mininet> xterm hub
  • 在xterm中激活虚拟环境source ./syenv/bin/activate后给hub写入switchyard固件swyard myhub.py
  • 使用py文件设计测试案例进行测试swyard -t testcases/myhub_testscenario.py myhub.py
  • 测试结果
  • Snipaste_2023-03-19_22-20-07

Capture using Wireshark

  • 先开启wireshark进行监听
  • mininet> hub wireshark &
  • 发送数据进行测试
  • mininet> server1 ping -c 1 client
  • 捕获结果
  • image-20230320000925002
  • 可以看到,这一次ping一共产生了两个数据
    • 第一个从192.168.100.1发向192.168.100.3发送了一个长度为98,ICMP协议的请求包
    • 第二个从192.168.100.3发向192.168.100.1发送了一个长度为98,ICMP协议的答复包

实验总结

收获

  • 经过本次实验,对mininet、wireshark、seitchyard有了一个初步的认识,虽然还是不能独立完成my_hub、test_case等python的独立设计,但是能大致读懂写好的代码的意思,并在此基础上进行修改。
  • 对计算机网络实验的流程以及要使用的工具有了一个初步的认识

反思

  • 刚开始看到mininet、wireshark、seitchyard时很迷茫,尤其是英文的操作手册更是头疼,不理解每部分的功能。在不断“研读”下才分清了他们的关系和区别(我的总结也可能存在一些问题,只是我浅显的理解):
  • Mininet是一个模拟软件定义网络(SDN)的工具,它可以在一台计算机上创建一个虚拟的网络拓扑,包括主机、交换机、控制器等组件。(类似于自定义创建一个物理网络结构)
  • Wireshark是一个网络协议分析器,它可以捕获和显示网络上的数据包,以及分析各种协议的细节。
  • Switchyard是一个教学用的框架,它可以实现自己的网络设备和协议,并在Mininet中测试它们。(编写网络系统的软件以及进行测试,相当于给网络设备写固件)
  • 总的来说这一次实验收获很多,学到了很多新知识,也体会到了实际上手操作的快乐。