Lab 5:网络层数据平面观察实验

前言:计算机网络课程的网络层数据平面的实验主要分为两个部分,第一部分为网络层数据平面IP数据报观察,第二部分为Mininet

Lab5 Part 1 : 网络层数据平面IP数据报观察

一、Traceroute 原理

首先,我们回顾一下课堂上所讲的Traceroute:

Traceroute 示意图

源主机向目的主机发送一组UDP段,其中第一个集合数据包的TTL =1, 第二个集合数据包的TTL=2, 按照上述规律发送数据包。

第n组中的数据报到达第n跳路由器: 路由器丢弃数据报,向源主机发送ICMP报文(type 11, code 0)。ICMP报文可能包括路由器的名称和IP地址

有以下的停止判则: (1)UDP段最终到达目的主机 (2)目的主机返回ICMP“端口不可达”报文(type 3, code 3) (3)源主机获得这个报文时,停止。

Traceroute有两种具体的实现方式:(1)UDP (2)ICMP

基于UDP的Traceroute实现如下所示:

TTL 递增的UDP段

基于UDP的Traceroute实现

基于ICMP的Traceroute实现:

TTL 递增的ICMP ECHO Request (Ping)

基于ICMP的Traceroute实现

注意:使用 UDP 的 traceroute,失败还是比较常见的。这常常是由于,在运营商的路由器上,UDP 与 ICMP 的待遇大不相同。为了利于 troubleshooting,ICMP ECHO Request/Reply 是不会被封禁的,而 UDP 则不同。UDP 常被用来做网络攻击,因为 UDP 无需连接,因而没有任何状态约束它,比较方便攻击者伪造源 IP、伪造目的端口发送任意多的 UDP 包,长度自定义。所以运营商为安全考虑,对于 UDP 端口常常采用白名单 ACL,就是只有 ACL 允许的端口才可以通过,没有明确允许的则统统丢弃。比如允许DNS/DHCP/SNMP 等。

二、实验任务

实验环境

  1. Linux/MacOS (Traceroute, wireshark) (建议安装Ubuntu虚拟机用于下一部分实验,使用vmware/virtualbox/WSL均可)

  2. Windows (PingPlotter,wireshark)(不可以使用windows自带的tracert, 原因是tracert不支持自定义包长度)

执行以下操作,回答下列问题并附必要截图:

用traceroute发送大小为56 bytes的UDP包,比如traceroute fudan.edu.cn 56 ;并使用wireshark抓包

注意在校园网内部可能会遇到IPv6的情况,可以使用traceroute的命令行参数强制使用IPv4协议

任务1:选择第一个发送的UDP包,观察:

  1. 发送端的IP地址?

  2. 在IP header中,上层协议的数值是多少?

  3. IP header有多少bytes? IP数据报数据载荷有多少bytes?

  4. 该IP数据报是否分片?

任务2:观察连续的UDP包(穿插其他包),观察:

  1. IP数据报中哪些字段不断变化,哪些保持不变 ?

  2. 为什么有些字段不断变化,为什么有些不变 ?

  3. 列出连续IP数据报中的标识序列。

任务3:观察收到的第一个TTL-exceeded replies,观察:

  1. 标识字段与TTL字段分别是多少?

  2. 收到的所有TTL-exceeded replies中,这两个字段是否不变?为什么?

Lab5 Part 2 :Mininet

一、Mininet基本介绍

Mininet是基于Linux Container架构开发的一个进程虚拟化网络模拟器。它可以模拟网络中的各种设备,包括 end-hosts、switches、routers 和 links。其中:(1)各种设备的行为与真实网络中行为一致;(2)用户可以使用SSH登录虚拟host中操作;(3)switch支持OpenFlow。

Mininet具有以下功能:

  1. 网络测试平台:为OpenFlow应用程序提供一个简单,便宜的网络测试平台

  2. 复杂拓扑测试:启用复杂的拓扑测试,无需连接物理网络

  3. CLI工具:具备拓扑感知和OpenFlow感知的CLI,用于调试或运行网络范围的测试

  4. 自定义拓扑:支持任意自定义拓扑,并包括一组基本的参数化拓扑

  5. Python API:提供用户网络创建和实验的可拓展Python API

二、Mininet安装部署

  1. 环境:

1)虚拟机

Windows: VMware Workstation, VirtualBox,WSL

Mac: VirtualBox, VMware Fusion

2)系统 Ubuntu (建议Ubuntu20.04,安装其他Ubuntu版本也可以)

  1. 安装:

参考:http://mininet.org/download/

三、Mininet命令操作

Mininet命令类型

  1. 网络构建启动参数:--topo, --custom, --mac等

  2. 外部运行参数:-c (清除配置信息), -h等

  3. CLI (Command-Line Interface) 命令:dump, net, iperf等

命令使用方式

  1. CLI外:sudo mn [options]

  2. CLI内:详见help

常用命令操作介绍:

创建拓扑

sudo mn --topo=TOPO linear|minimal|reversed|single|tree[,param=value...]

e.g. sudo mn --topo=single,2

创建拓扑

Tips:

如遇到:“Exception: Could not find a default OpenFlow controller”,可尝试如下指令:

创建拓扑(自定义)

安装python的mininet支持:pip install mininet

sudo mn --custom path/python file --topo mytopo

e.g. sudo mn --custom ./topo-2sw-2host.py --topo mytopo

在addHost方法中可定义IP地址、mac地址等

在addLink方法中可定义带宽、时延、丢包率等

from mininet.link import TCLink

--link tc

下面的示例代码是一个简单的自定义拓扑的例子:

CLI命令

查看网络节点: nodes

查看物理拓扑: net

查看节点信息: dump

CLI命令

<host> ping <host> : ping from one host to another

xterm <host> : Open up a terminal of a host; sudo apt-get install xterm

<host> ifconfig : Check the interface configuration of a host

iperf <host> <host> : test the bandwidth between hosts

iperf命令

宽测量与流量生成工具 (建议打开xterm使用)

默认生成TCP

iperf -s (run in server mode)

iperf -c server_ip (run in client mode)

更多详细用法参见 iperf --help

Mininet命令操作-lab with Python

参考:https://github.com/mininet/mininet/wiki/Introduction-to-Mininetarrow-up-right

下面是mininet代码仓库中examples文件夹下的一份示例代码,examples文件夹下提供了许多示例python代码供同学们学习:

四、实验任务

任务1:定制化拓扑

定制化拓扑

要求:

(1)定制化上述拓扑,并将脚本文件命名为customized_topo.py,提交文件中需包含该python文件

(2)利用iperf验证端到端带宽,并截图,下面提供了各主机间端到端带宽的参考范围:

  • H1 – H2: 10Mbps with ~12ms latency

  • H2 – H4: <<16Mbps with ~22ms latency

  • H3 – H4: 10Mbps with ~12ms latency

(3)通过sudo mn --custom ./customized_topo.py --topo mytopo --test pingall --link tc指令检验,并截图。描述一下出现的现象,并阐述一下原因。

任务2:在虚拟终端上执行任务

在虚拟终端上执行任务

利用iperf生成TCP流

  • TCP Flow 1: 由h1按最大速率发向h3,持续时间为T=0sec~20sec

  • TCP Flow 2: 由h2按最大速率发向h4,持续时间为T=10sec~30sec

要求:

(1) 利用python实现上述功能,并将脚本文件命名为host_iperf.py ,提交文件需包含该python文件。

(2)提交 Flow 1 和 Flow 2 带宽测试截图或文本文件,要求每0.5s测量一次。

(3)请描述一下出现的现象,并尝试解释一下原因。

(4)尝试修改 Switch S1 和 Switch S2 之间链路的丢包率,重复任务二,观察并描述在不同丢包率下出现的现象,尝试利用所学的知识解释一下原因。

截图参考

Last updated