需改虚拟机的网络适配器,将其改为host-only

尝试ping宿主机ip地址,此时能够ping同与虚拟机相连的虚拟网卡ip地址,无法ping同其他网卡ip地址

在虚拟机和宿主机中创建网络topo

在虚拟机运行以下指令创建topo

sudo  mn

此时,在虚拟机中含以下网络节点

hosts:  h1 h2
switches: s1
links: (h1, s1) (h2, s1)
controller:c0

其中h1和h2的ip分别为10.0.0.110.0.0.2

在宿主机中创建topo网络

新建topo-2sw-2host.py

from mininet.topo import Topo

class MyTopo( Topo ):
"Simple topology example." def build( self ):
"Create custom topo." # Add hosts and switches
h3 = self.addHost( 'h3',ip='10.0.0.3' )
h4 = self.addHost( 'h4',ip='10.0.0.4' )
leftSwitch = self.addSwitch( 's3' )
# Add links
self.addLink( h3, leftSwitch )
self.addLink( leftSwitch,h4)
topos = { 'mytopo': ( lambda: MyTopo() ) }

通过命令sudo mn --custom topo-2sw-2host.py --topo mytopo创建网络topo

其中h1和h2的ip分别为10.0.0.310.0.0.4

关闭控制器

控制器能够帮助switch建立流表,如果要手动建立nodes链接关系,需要先关闭控制器。

注意:也可以在mn命令的最后添加 --controller remote关闭controller,以省略以下步骤

在关闭控制器前测试h1与h2之间互ping,因为controller的存在,彼此能够ping通。

在宿主机和虚拟机中分别输入sudo killall controller关闭控制器,这时候再尝试ping,发现无法ping通。因为switch中流表为空。

执行sh ovs-ofctl dump-flows s1,可以看到流表为空,其信息如下

mininet> sh ovs-ofctl dump-flows s1
NXST_FLOW reply (xid=0x4):

创建vxlan

运行sh ovs-vsctl add-port s1 vxlan 添加vxlan端口。

在虚拟机中,端口可以成功成功创建,但在宿主机中创建失败,提示错误信息:

mininet> sh ovs-vsctl add-port s13vxlan
ovs-vsctl: Error detected while setting up 'vxlan': could not open network device vxlan (No such device). See ovs-vswitchd log for details.
ovs-vsctl: The default log directory is "/var/log/openvswitch".

解决方案如下

The port‘s name should be a exist interface use ifconfig to see, such as eth0. If you just want to use a virtual port name to make a test you should
specify the port's type like ovs-vsctl add-port br0 port0 -- set Interface port0 type=internal or ovs-vsctl set Interface port0 type=internal

将指令改为

 sh ovs-vsctl add-port s3 vxlan   -- set Interface vxlan type=internal

在虚拟机中输入以下指令

sh ovs-vsctl set interface vxlan type=vxlan option:remote_ip=10.0.0.7 option:key=100 ofport_request=10

其中 ip地址是宿主机的ip,key是vxlan的标签,opport_request是端口名称

在宿主机中需要将以上命令的ip改为虚拟机的ip地址。

总结

以上建立的网络形式如下



其中R为路由器,s1和s2为交换机,h1-h4为主机

同一交换机下的主机通信

  1. h1尝试ping h2时,拥有h2的ip地址但没有h2的mac地址。因此h1首先尝试通过arp获取h2 mac地址。
  2. h1 发送 arp给 s1,s1收到arp后进行广播,同时记录h1的mac地址和端口的映射。h2收到广播后发现与自己的ip一致,根据广播给定的ip地址向s1发送响应,s1将响应发送给h1,同时s1记录h2的mac地址和端口的映射。
  3. h1获取h2的mac地址后,在包里面加入h2的ip地址和mac地址并发送给s1.
  4. s1收到包后,检查mac地址,找出对应的h2端口映射,将包发送到h2对应的端口
  5. h2收到包后,匹配包的ip地址,ip地址一致则对包做进一步处理

跨路由器主机通信

mininet:使用vxlan连接两台虚拟机的网络topo的更多相关文章

  1. vmware中两台虚拟机互相访问

    hosts文件   简单说,就是本来访问某个机器是通过其ip,在hosts文件中给ip对应一个名字,那么就可以通过名字来替代ip去访问该机器了(名字显然比ip好记) 环境:宿主机win10系统,安装了 ...

  2. 问题解决:两台虚拟机不能互相ping通的原因

    要是两台虚拟机能够PING通下列要求缺一不可:1.你所设置的虚拟网络的网络号不能跟外面你正在使用的真实的网络号一样2.防火墙必须关闭3.你设置的那俩台虚拟机必须在同一网段内4.两台虚拟机的主机名不能相 ...

  3. OpenStack之Neutron分配VIP提供给两台虚拟机做高可用

    一. 简单介绍 在openstack私有云平台的应用场景中,涉及多台虚拟机实例进行高可用的绑定,这里我们需要在云平台中提供一个IP给高可用场景切换,这里介绍keepalived + allow_add ...

  4. 解决两台虚拟机互ping可通,但connect失败

    问题描述: 在UNP一书中实例中,采用两台不同的虚拟机.即一台虚拟机作为服务端,另外一台虚拟机作为客户端. 现象: 两台电脑各自互ping可通 客户端访问local可行 客户机访问服务端报错:No r ...

  5. 局域网内使用ssh连接两台计算机总结

    因为家里有两台电脑,一个centos7 系统,一个Mac,都是笔记本,感觉两个拿来拿去的用太麻烦了,所以就想用ssh连接cenots7 的电脑,这样就没那么麻烦了.欢迎大家指正 配置静态ip cent ...

  6. 通过两根RS232连接两台电脑

    把RS232的有5脚那边放下面,最左边是GND,第二三是TXD和RXD,两个RS232反接,然后两个usb连接电脑就可以通信了

  7. linux克隆多台虚拟机后网络无法识别更无法连接上网的解决方法

    本人近期学习LINUX,想克隆多台CENTOS来练习在LINUX下安装软件,配置环境.因为对系统不是很熟悉,就想保持一个纯净版本,如果系统玩坏了就删除再重新克隆一个继续配置,以节省时间.后来发现,克隆 ...

  8. 苹果电脑thunderbolt连接两台电脑启动方法

    thunderbolt:首先连接连台电脑 然后开启可以启动的电脑, 关闭无法启动的电脑. 接着 按一下法启动的电脑电源—> 然后按t键 会在另外一台可以启动的电脑上出现,无法启动电脑的磁盘. 就 ...

  9. VMware两台虚拟机之间文件共享

    虚拟机A的文件拷贝到虚拟机B scp[参数][原路径][目标路径] eg: scp -r root@192.168.0.172:/home/rookie/下载/ /home/rooookie/下载/ ...

随机推荐

  1. 项目启动时警告 Establishing SSL connection without server's identity verification is not recommended

    项目启动时控制台提示警告: Tue May 14 23:16:10 CST 2019 WARN: Establishing SSL connection without server's identi ...

  2. SQLite与MySQL区别

    原文链接:https://blog.csdn.net/zbw1185/article/details/47975965简单来说,SQLITE功能简约,小型化,追求最大磁盘效率:MYSQL功能全面,综合 ...

  3. Flutter -------- 新手 WanAndroid 项目练习

    一个简单Flutter项目wanandroid,先前用Kotlin来开发过,适合新手练习. 用到的库 包含功能: http+数据解析 网络请求数据列表展示 Banner轮播 WebView跳转详情 D ...

  4. Amazon aws s3 加速

    aws s3加速 - 工长山的专栏 - CSDN博客https://blog.csdn.net/xuanwu_yan/article/details/79160034 [实测有效]“解决国内访问s3. ...

  5. ubuntu安装IntelliJ Idea及图标创建

    一.下载并解压安装 二.创建桌面程序 1. cd /usr/local/applications/ 2. vi idea.desktop 3. 内容如下 [Desktop Entry] Name=In ...

  6. AndoridSQLite数据库开发基础教程(7)

    AndoridSQLite数据库开发基础教程(7) 为空表添加数据 开发者可以单击Data按钮,看到Students表中是没有数据的,创建好的Students表是一个空表.如图1.15所示.如果开发者 ...

  7. Docs-.NET-C#-指南-语言参考-关键字-值类型:enum

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:enum 1.返回顶部 1. enum(C# 参考) 2015/07/20 enum 关键字用于声明枚举,一种包含一组被称为枚 ...

  8. jsoup爬取某网站安全数据

    jsoup爬取某网站安全数据 package com.vfsd.net; import java.io.IOException; import java.sql.SQLException; impor ...

  9. QDateTime获取当前时间的时间戳

    QdateTime获取当前时间的时间戳作为图片名 QDateTime qdt1 = QDateTime::currentDateTime();QString timeStr = qdt1.toStri ...

  10. 001——Typescript 介绍 、Typescript 安 装、Typescript 开发工具

    一. Typescript 介绍 1. TypeScript 是由微软开发的一款开源的编程语言. 4. TypeScript 是 Javascript 的超级,遵循最新的 ES6.Es5 规范.Typ ...