目录

1.写在前面

2.安装工作

2.1.mininet安装

2.2 cmake安装

2.3 xterm安装

2.4 wireshark安装

3.作业要求:(交换机转发实验)

4.C语言完成函数编写工作

附件展示:

4.1  iface_info_t *lookup_port(u8 mac[ETH_ALEN]);

4.2 void insert_mac_port(u8 mac[ETH_ALEN], iface_info_t *iface);

4.3  int sweep_aged_mac_port_entry();

4.4 void broadcast_packet(iface_info_t *iface, const char *packet, int len);

4.5 void handle_packet(iface_info_t *iface, char *packet, int len);

5.验证函数,检验实验结果

5.1 在当前目录下执行命令make,会生成一些必要的文件包括最重要的switch文件

5.2 打开mininet

5.3  利用xterm打开s1终端,并且在s1终端中执行switch(上面生成的那个)

5.4 wireshark分别监听h2和h3两个主机(&表示后台运行)

5.5 用h1 分别ping h2和h3 如果在wireshark监听中只看到了自己节点和h1节点发送的数据,表明我们实验成功了


1.写在前面

这个是我们的一个课程大作业,需要组队完成,但是奈何没找到队友,只有自己solo了,这个作业时间大概给了五周还是六周,但是实际上没有太多工作量,这个是好几个实验选择做的,我就多做了几个,写博客记录一下自己的实验过程。mininet这个工具我以前没有用过,所以也出了不少问题。也算是调试的一个心理路程。

github:https://github.com/Suyebiubiu/Switch-based-Mininet

2.安装工作

这个实验主要是需要在linux中运行的,我的系统用的Ubuntu,mininet应该是必须要在linux中运行,可以快速搭建模拟网络的平台,推荐使用Ubuntu系统,版本号从14.04到最新的都可以,64位或者32位都行。如果物理机是windows系统的话,可以使用虚拟机方式安装 Linux系统,推荐使用VirtualBox虚拟机运行Mininet环境时需要root权限,Mininet脚本只能使用 Python2来解释运行

2.1.mininet安装

2.2 cmake安装

sudo apt install cmake

2.3 xterm安装

sudo apt install xterm

2.4 wireshark安装

sudo apt install wireshark

3.作业要求:(交换机转发实验)

4.C语言完成函数编写工作

附件展示:

4.1  iface_info_t *lookup_port(u8 mac[ETH_ALEN]);

mac.c中的方法

// lookup the mac address in mac_port table
// FDB中寻找目的地址+port是否存在?
iface_info_t *lookup_port(u8 mac[ETH_ALEN])
{// iface_info_t *iface = NULL;// fprintf(stdout, "TODO: implement this function please.\n");// return iface;iface_info_t *iface = NULL;mac_port_entry_t *entry,*q;for (int i = 0; i < HASH_8BITS; i++) {list_for_each_entry_safe(entry, q, &mac_port_map.hash_table[i], list) {int cmp = memcmp((void*)entry->mac,(void*)mac,sizeof(u8)*ETH_ALEN);   //ETH_ALEN==6if(cmp==0) return entry->iface;}}return iface;
}

4.2 void insert_mac_port(u8 mac[ETH_ALEN], iface_info_t *iface);

mac.c中的方法

// insert the mac -> iface mapping into mac_port table
//FDB插入packet源地址+port
void insert_mac_port(u8 mac[ETH_ALEN], iface_info_t *iface)
{// fprintf(stdout, "TODO: implement this function please.\n");'mac_port_entry_t *entry = malloc(sizeof(mac_port_entry_t));bzero(entry, sizeof(mac_port_entry_t));time_t now = time(NULL);entry->visited = now;memcpy(entry->mac,mac,sizeof(u8)*ETH_ALEN);// memcpy(entry->iface,iface,sizeof(iface_info_t));entry->iface=iface;list_add_tail(&entry->list,&mac_port_map.hash_table[0]);           //我加在第一张hash table可以?   为什么hash_table存储了所有的entry?}

4.3  int sweep_aged_mac_port_entry();

mac.c中的方法

// sweeping mac_port table, remove the entry which has not been visited in the
// last 30 seconds.
int sweep_aged_mac_port_entry()
{// int n = 0;// fprintf(stdout, "TODO: implement this function please.\n");// return n;int n=0;mac_port_entry_t *entry, *q;time_t now = time(NULL);for (int i = 0; i < HASH_8BITS; i++) {list_for_each_entry_safe(entry,q, &mac_port_map.hash_table[i],list) {if((int)(now - entry->visited) >= MAC_PORT_TIMEOUT){n = entry->iface->index;list_delete_entry(&entry->list);free(entry);return n;}}}return n;
}

4.4 void broadcast_packet(iface_info_t *iface, const char *packet, int len);

packet.c中的方法

// broadcast the packet among all the interfaces except the one receiving the
// packet, and free memory of the packet
//在所有的接口中广播(不包含当前接口)
void broadcast_packet(iface_info_t *iface, char *packet, int len)
{iface_info_t *tx_iface = NULL;list_for_each_entry(tx_iface, &instance->iface_list, list) {if (tx_iface->index == iface->index)continue;iface_send_packet(tx_iface, packet, len);}
}

4.5 void handle_packet(iface_info_t *iface, char *packet, int len);

main.c中的方法

// handle packet
// 1. if the dest mac address is found in mac_port table, forward it; otherwise,
// broadcast it.
// 2. put the src mac -> iface mapping into mac hash table.
void handle_packet(iface_info_t *iface, char *packet, int len)
{//得到头部信息struct ether_header *eh = (struct ether_header *)packet;//fdb中寻找目的地址maciface_info_t *tx_iface = lookup_port(eh->ether_dhost);if (tx_iface) {iface_send_packet(tx_iface, packet, len);}else {broadcast_packet(iface, packet, len);}//存入源mac+portif (!lookup_port(eh->ether_shost)) {insert_mac_port(eh->ether_shost, iface);}
}

5.验证函数,检验实验结果

5.1 在当前目录下执行命令make,会生成一些必要的文件包括最重要的switch文件

5.2 打开mininet

5.3  利用xterm打开s1终端,并且在s1终端中执行switch(上面生成的那个)

5.4 wireshark分别监听h2和h3两个主机(&表示后台运行)

5.5 用h1 分别ping h2和h3 如果在wireshark监听中只看到了自己节点和h1节点发送的数据,表明我们实验成功了

大功告成!撒花✿✿ヽ(°▽°)ノ✿!!!!!!!!!!!!!!!!!

利用Mininet环境-交换机转发实验整个过程相关推荐

  1. 交换机转发实验(回顾哈希表实现)

    交换机转发实验(回顾哈希表实现) 哈希表的C语言实现 哈希函数为对哈希表长取余 哈希表算法实现 # include <stdio.h> # include <stdlib.h> ...

  2. 利用Mininet进行VxLAN验证实验

    1.什么是VXLAN? 具体而言,就是基于IPV4实现跨节点的二层网络,有点类似于IPSec的作用,只不过UDP包裹着的是二层报文,与VLAN相比,VXLAN具有以下几个优势: 支持更多的二层网段 V ...

  3. Mininet系列实验(六):Mininet动态改变转发规则实验

    Mininet系列实验(六):Mininet动态改变转发规则实验 一. 实验目的 熟悉Mininet自定义拓扑脚本的编写: 熟悉编写POX脚本动态改变转发规则 二.实验原理 在SDN环境中,控制器可以 ...

  4. 混合IP-SDN环境的仿真实验

    混合IP-SDN环境的仿真实验 混合IP-SDN环境的仿真实验 实验室名称 实验名称 实验原理 实验目的 实验设备 实验步骤 1.在mininet中搭建如下拓扑图 3.配置Controller如图: ...

  5. 论文阅读八:SDN 交换机转发规则 TCAM 存储优化综述

    摘要:SDN将传统网络的控制平面和数据平面解耦,通过控制平面的控制器灵活地对网络进行管理,目前应用最广泛的控制协议是OpenFlow.三态内容寻址存储器(TCAM)查找速度快.支持三态掩码存储,在SD ...

  6. 计算机交换机配置实验心得,交换机系统配置实验心得5

    你还在为交换机基本配置实验报告而烦恼么?不用担心,下面就是小编带来的交换机系统配置实验心得,希望能帮助大家! 交换机系统配置实验心得1 单交换机的VLAN配置 [基本原理] VLAN(Virtual ...

  7. 计算机网络交换机配实验报告,交换机基本配置实验报告

    你还在为交换机基本配置实验报告而烦恼么?不用担心,接下来是学习啦小编为大家收集的交换机基本配置实验报告,欢迎大家阅读: 交换机基本配置实验报告: <网络通讯基础>实验报告书 班级: 姓名: ...

  8. Mininet环境搭建

    Mininet环境搭建 配置环境 文件准备 工具下载 Mininet镜像下载 配置实验环境 导入VirtualBox 配置VirtualBox中的Host-Only(仅主机)网络 配置Mininet实 ...

  9. mininet构建双路由器实验

    利用mininet构建下面的拓扑,并测试能否ping通: 路由器会自动生成本路由器激活端口所在网段的路由条目,即直接路由,因此要让两主机之间能ping通,只要造A, B中分别添加静态路由即可 (当然还 ...

最新文章

  1. 主流Kubernetes发行版梳理,看完就会选了
  2. Xcode 9 快速跳转到定义新姿势(Jump to Definition)
  3. 【Python】json
  4. appium-在页面点击一下处理(一般处理提示蒙层)
  5. linux删除git账号密码忘记了,linux清除git账号密码
  6. Ural_1353. Milliard Vasya's Function(DP)
  7. Kotlin 1.2 新特性
  8. python中int什么意思_python3中int(整型)的使用教程
  9. 初中计算机ps教程,初中信息技术《认识Photoshop CS2的工作界面》教案
  10. 三星android驱动程序错误,android系统的三星手机插入电脑无法识别
  11. QTreeView实现圆角样式
  12. 比较流行的日志分析软件
  13. 嵌入式学习——使用STM32F103基于HAL库移植uCOS-III
  14. 线性代数(九) : 矩阵的行简化阶梯型和标准型
  15. Java JavaScript BOM和正则表达式
  16. pandas 分类数据处理大全
  17. sm2262en怎么量产?sm2262en量产工具,sm2263en开卡软件,sm2263en、sm2262en使用量产工具成功开卡的方法指引
  18. 安全性剖析:对比 LayerZero、Wormhole 等跨链桥优劣
  19. Java 中 String 字符串可以有多长?65535?
  20. android listview替代,Android笔记——RecyclerView替代ListView

热门文章

  1. php一句话木马调用cmd命令,一句话木马(webshell)是如何执行命令的
  2. 玩转电机驱动——A4950闭环驱动直流减速电机(Arduino)
  3. 开源代码01:眼力大挑战
  4. cf反恐穿越前线java,穿越前线反恐使命
  5. android 模拟手指点击,『Android Tip』-- 模拟手势操作
  6. ffmpeg学习笔记
  7. 人常见的思维盲区有哪些?看懂这个你会少犯一半错误
  8. ctf题库--这是什么鬼东西
  9. 27计算机表演赛命题,(历史2)27届计算机表演赛命题搜索赛答案
  10. 爱奇艺逗芽表情搜索分析与实践