南京大学本科生实验报告¶
课程名称: 计算机网络 任课教师:田臣
学院 | 工程管理学院 | 专业(方向) | 计算机金融 |
---|---|---|---|
学号 | 211275022 | 姓名 | 田昊东 |
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中测试检验
- 可以看到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
进行测试
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
- 测试结果
Capture using Wireshark¶
- 先开启wireshark进行监听
mininet> hub wireshark &
- 发送数据进行测试
mininet> server1 ping -c 1 client
- 捕获结果
- 可以看到,这一次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中测试它们。(编写网络系统的软件以及进行测试,相当于给网络设备写固件)
- 总的来说这一次实验收获很多,学到了很多新知识,也体会到了实际上手操作的快乐。