• mininet and ovs 总结


    ryu控制器安装在arch linux的什么目录?

    /usr/lib/python3.6/site-packages/ryu/

    1、如何显示mininetCLI的帮助命令?

    mininet> help

    2、如何显示mininet的结点?

    mininet> nodes

    3、如何显示mininet的连接?

    mininet> net
    
    mininet>links

    4、如何在某一个虚拟中段中建立一个简单的HTTP服务器,并且从另外一个终端中对它进行访问?

    mininet> h1 python -m SimpleHTTPServer 80 &
    
    mininet> h2 wget -O -h1
    
    ...
    
    mininet> h1 kill %python

     4、如何运行一个递归的测试?

    sudo mn --test pingpair (测试)
    
    sudo mn --test iperf (测试带宽)

    5、如何梗概网络的拓扑和类型?

    sudo mn --test pingall --topo single,3
    sudo mn --test pingall --topo linear,4

    6、如何设置连接的属性,包括贷款和延迟?

    sudo mn --link tc,bw=10,delay=10ms

    7、如何设置调试模式?

    sudo mn -v debug

    8、如何自定义一个拓扑,请附上相关的python文件写法?

    应用的语句如下:

    sudo mn --custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo --test pingall

    相应的脚本如下:

    topo-2sw-2host.py:

    """Custom topology example
    
    Two directly connected switches plus a host for each switch:
    
    host --- switch --- switch --- host
    
    Adding the 'topos' dict with a key/value pair to generate our newly defined
    topology enables one to pass in '--topo=mytopo' from the command line.
    """
    
    from mininet.topo import Topo
    
    class MyTopo( Topo ):
    "Simple topology example."
    
    def __init__( self ):
    "Create custom topo."
    
    # Initialize topology
    Topo.__init__( self )
    
    # Add hosts and switches
    leftHost = self.addHost( 'h1' )
    rightHost = self.addHost( 'h2' )
    leftSwitch = self.addSwitch( 's3' )
    rightSwitch = self.addSwitch( 's4' )
    
    # Add links
    self.addLink( leftHost, leftSwitch )
    self.addLink( leftSwitch, rightSwitch )
    self.addLink( rightSwitch, rightHost )
    
    
    topos = { 'mytopo': ( lambda: MyTopo() ) }

    9、如何改变相应的mac地址?

    sudo mn --mac

    10、如何直接打开终端?

    sudo mn -x

     11、如何使用dpctl来查看某个交换机的流表?(这个还没尝试出来)

    dpctl dump-flows的格式如下:
    
    [-m | --more] dump-flows [dp] [filter=filter]
    
    mininet?

    12、如何使用其他类型的交换机?

    sudo mn --switch ovsk --test iperf

      

    13、如何设置所有东西都有它各自的命名空间?

    sudo mn --innamespace --switch user

    14、如何设置链接的属性?比如说打开和关闭。

    mininet> link s1 h1 down
    mininet> link s1 h1 up

    15、如何显示某个网络内的主机?

    mininet> xterm h1 h2

     16、如何设置远程的控制器?

    $ sudo mn --controller=remote,ip=[controller IP],port=[controller listening port]
    sudo mn --controller=remote,ip=192.168.1.150,port=6633

    17、如何使用其他的OpenFlow协议?

    --switch ovsk,protocols=OpenFlow13

    参考网页:

    http://fishcried.com/2016-02-09/openvswitch-ops-guide/

    要想很好理解OVS的操作,必须要理解基本的概念:

    Packet

    网络转发的最小数据单元,每个包都来自某个端口,最终会被发往一个或多个目标端口,转发数据包的过程就是网络的唯一功能。

    Bridge

    OpenvSwitch中的网桥对应物理交换机,其功能是根据一定流规则,把从端口收到的数据包转发到另一个或多个端口。

    Port

    端口是收发数据包的单元。OpenvSwitch中,每个端口都属于一个特定的网桥。端口收到的数据包会经过流规则的处理,发往其他端口;也会把其他端口来的数据包发送出去.主要有

    类型说明
    Normal 用户可以把操作系统中的网卡绑定到ovs上,ovs会生成一个普通端口处理这块网卡进出的数据包。
    Internal 端口类型为internal时,ovs会创建一块虚拟网卡,端口收到的所有数据包都会交给该网卡,发出的包会通过该端口交给ovs。当ovs创建一个新网桥时,默认会创建一个与网桥同名的Internal Port.
    Patch 当机器中有多个ovs网桥时,可以使用Patch Port把两个网桥连起来。Patch Port总是成对出现,分别连接在两个网桥上,在两个网桥之间交换数据。
    Tunnel 隧道端口是一种虚拟端口,支持使用gre或vxlan等隧道技术与位于网络上其他位置的远程端口通讯。

    Interface

    接口是ovs与外部交换数据包的组件。一个接口就是操作系统的一块网卡,这块网卡可能是ovs生成的虚拟网卡,也可能是物理网卡挂载在ovs上,也可能是操作系统的虚拟网卡(TUN/TAP)挂载在ovs上。

    FlowTable

    流定义了端口之间数据包的交换规则.下面会对FlowTable做了详细的说明.

    OVS命令的结构:

    ovs-dpctl datapath控制器,可以创建删除DP,控制DP中的FlowTables,最常使用show命令,其他很少手动操作
    ovs-ofctl 流表控制器,控制bridge上的流表,查看端口统计信息等
    ovsdb-tool 专门管理ovsdb的client
    ovs-vsctl 最常用的命令,通过操作ovsdb去管理相关的bridge,ports什么的
    ovs-appctl 这个可以直接与openvswitch daemon进行交互,上图中没有列出来,这么命令较少使用

     对下面这些命令的一个简要记录:

    • ovs-dpctl show -s
    • ovs-ofctl show, dump-ports, dump-flows, add-flow, mod-flows, del-flows
    • ovsdb-tools show-log -m
    • ovs-vsctl
      • show 显示数据库内容
      • 关于桥的操作 add-br, list-br, del-br, br-exists.
      • 关于port的操作 list-ports, add-port, del-port, add-bond, port-to-br.
      • 关于interface的操作 list-ifaces, iface-to-br
      • ovs-vsctl list/set/get/add/remove/clear/destroy table record column [value], 常见的表有bridge, controller,interface,mirror,netflow,open_vswitch,port,qos,queue,ssl,sflow.
    • ovs-appctl list-commands, fdb/show, qos/show

    1、如何显示bridge,显示它与Port等概念的关系?

    # ovs-vsctl show

    2、如何查看有哪些Bridge,哪些ports,哪些interface?

    root@l-network-1:~# ovs-vsctl list-br
    br-ex
    br-int
    br-tun
    
    root@l-network-1:~# ovs-vsctl list-ports br-tun
    patch-int
    vxlan-ac1c0509
    vxlan-ac1c050d
    vxlan-ac1c051c
    vxlan-ac1c053f
    
    root@l-network-1:~# ovs-vsctl list-ifaces br-tun
    patch-int
    vxlan-ac1c0509
    vxlan-ac1c050d
    vxlan-ac1c051c
    vxlan-ac1c053f
    # iface与ports同名.

    3、如何查看哪个port,interface属于哪个bridge?

    root@l-network-1:~# ovs-vsctl port-to-br vxlan-ac1c0509
    br-tun
    root@l-network-1:~# ovs-vsctl iface-to-br vxlan-ac1c0509
    br-tun

    4、如何查看某个Bridge的流表,如果不是默认的of协议,那么如何显示?

    root@l-network-1:# ovs-ofctl dump-flows br-ex
    sudo ovs-ofctl -O Openflow13 dump-flows <switch>

    5、如何显示某个Bridge的流表?

    # ovs-ofctl show br-ex

    6、如何显示隐藏流表规则?

    # ovs-appctl bridge/dump-flows br-ex

    7、如何查看datapath的统计规则?

    # ovs-dpctl show
    # ovs-dpctl show -s
    ## 查看某个端口的统计信息ovs-ofctl dump-ports br [port]
    # ovs-ofctl dump-ports br-ex 1

    8、如何查看转发表?

    # ovs-appctl fdb/show br-ex

    9、设置sFlow,相关网页:

    http://docs.openvswitch.org/en/latest/howto/sflow/

    http://www.sdnlab.com/3760.html

    sudo ovs-vsctl -- --id=@sflow_1 create sflow agent=s4 target="10.0.0.2:6343"  
    header=128 sampling=64 polling=10 -- set bridge s4 sflow=@sflow_1

    10、如何设置qos?

    参考网页:

    http://docs.openvswitch.org/en/latest/howto/qos/

    http://fishcried.com/2016-02-09/openvswitch-ops-guide/

    ovs-vsctl set Interface tap0 ingress_policing_rate=100000
    ovs-vsctl set Intervace tap ingress_policing_burst=10000
    ovs-appctl qos/show <iface>

     11、如何查看流规则的匹配?

    watch -d -n 1 "sudo ovs-ofctl dump-flows <bridge>"

    12、如何使用tcpdump抓包?

    13、需要设置端口的镜像。

    ip link add name snooper0 type dummy
    ip link set dev snooper0 up
    ovs-vsctl add-port br-int snooper0
    
    # ovs-vsctl -- set Bridge br-int mirrors=@m  -- --id=@snooper0 
      get Port snooper0  -- --id=@patch-tun get Port patch-tun 
      -- --id=@m create Mirror name=mymirror select-dst-port=@patch-tun 
      select-src-port=@patch-tun output-port=@snooper0 select_all=1
    
    tcpdump -i snooper0
    
    ovs-vsctl clear Bridge br-int mirrors
    ovs-vsctl del-port br-int snooper0
    ip link delete dev snooper0

    14、如何查看OVS的日志?

    # cat /var/log/openvswitch/*.log
    
    # ovsdb-tool show-log -m

    15、如何发送某个包去测试匹配?

    # ovs-appctl ofproto/trace br-ex in_port=10,dl_src=66:4e:cc:ae:4d:20,dl_dst=46:54:8a:95:dd:f8 -generate
    Bridge: br-ex

    16、如何添加一个Ethernet port到已经创建的bridge? 

    参考:http://docs.openvswitch.org/en/latest/faq/issues/ 之中的问题1 

    问题中,有人尝试使用以下命令去添加一个端口到bridge当中,但是一添加,就会失去连接到哪个网卡eth0.

    $ ovs-vsctl add-br br0
    $ ovs-vsctl add-port br0 eth0

    回答是这样回答的:

    一个将要加入到Open vSwitch bridge的物理网卡设备是不应该有IP地址的。 如果这样的设备是含有地址的,那么这个IP地址是不会被完全工作的。

    所以,要怎么恢复功能呢?通过将OVS的"internal"设备的IP地址设置给原来网络设备的地址。

    比如说这个网络设备是和bridge 是同名的。eth0的IP地址是192.168.128.5, 你可以通过下面的命令来恢复功能。

    $ ifconfig eth0 0.0.0.0
    $ ifconfig br0 192.168.128.5

     如果连接到运行OVS的机器仅仅是那个有问题的IP地址,那么你想要去运行所有的这些命令在单个命令行当中。

    如果有任何额外的路由分配给eth0,那么你同样需要使用命令来调整这些路由到br0.

    如果你使用DHCP来获得一个IP地址,那么你应该先kill掉监听在这个端口的DHCP client,然后开始监听br0的进程。你可能仍然需要手动的清除IP地址eth0的地址(e.g. with “ifconfig eth0 0.0.0.0”)

    没有一个能让人信服的理由来让觉得OVS是必须这样工作的。然后,这就是Linux 内核 bridge mokuai的工作方式。这是一个模型,这种模型已经适应了Linux bridging过去的做法。

    17、在这个帖子的第二个问题:

    问题是什么就不太用管了,我在这里知道了两个名字,bond接口和dpdk

    bond接口:可以用这种接口来进行提高更高的带宽和更加高的可靠性。使用命令如下:

    $ ovs-vsctl add-br br0
    $ ovs-vsctl add-bond br0 bond0 eth0 eth1

    dpdk:是一套库,用户快速的数据包处理。

    18、如何打开端口的STP?到我写的时候,OVS的STP并没有仍然很好测试(2017-05-12)

    $ ovs-vsctl add-br br0
    $ ovs-vsctl set bridge br0 stp_enable=true
    $ ovs-vsctl add-port br0 eth0
    $ ovs-vsctl add-port br0 eth1

     另外一篇有价值的教程是:http://www.sdnlab.com/sdn-guide/14747.html

    这篇文章组合起来,大概有五个小实验,摘自于:SDN QQ群#兰大-小学生,文章来源他个人SDN技术博客:http://lamoop.com/post/2013-11-18/40060149263

    我看完后,觉得还是直接把它分为五个小如何的方式写出来。

    19、如何使用OVS添加物理网卡,组成虚拟网络?

    基本情况是:在安装open vswitch的主机上有两块网卡,分别为eth0、eth1,把这两块网卡挂接到open vswitch的网桥上,然后有两台物理机host1、host2分别连接到eth0和eth1上,实现这两台物理机的通信。构建结果图如下:

    #ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
    #ovs-vsctl add-port br0 eth0 //把eth0挂接到br0中
    #ovs-vsctl add-port br0 eth1 //把eth1挂接到br0中

    20、如何把虚拟机添加到我们创建的OVS当中?

    在安装open vswitch的主机上安装两个虚拟机,把两个虚拟机的网卡都挂接在open vswitch的网桥上,实现两台虚拟机的通信,构建结果图如下:

    在上面,已经添加了br0了,取决于你使用什么样的虚拟机,然后我们需要将虚拟机,挂载到我们所创建的网桥上

    vbox上,可以直接上network上选择

    kvm可能需要以下的脚本(这里指示列出来,我没有完全尝试,不过和我之前成功尝试的差不多这个样子):两个文件分别是/etc/ovs-ifup, /etc/ovs-ifdown

    #!/bin/sh
    
    switch='br0'
    /sbin/ifconfig $1 0.0.0.0 up
    ovs-vsctl add-port ${switch} $1
    #!/bin/sh
    
    switch='br0'
    /sbin/ifconfig $1 0.0.0.0 down
    ovs-vsctl del-port ${switch} $1

    创建虚拟机的命令大概如下:

    kvm -m 512 -net nic,macaddr=00:11:22:33:44:55-net 
    
    tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive
    
    file=/path/to/disk-image,boot=on
    
    kvm -m 512 -net nic,macaddr=11:22:33:44:55:66-net 
    
    tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive
    
    file=/path/to/disk-image,boot=on

    在启动虚拟机之后,我们需要做的,在装有open vswitch的主机上有一个物理网卡eth0,一台主机通过网线和eth0相连,在open vswitch的主机上还装有一台虚拟机,把此虚拟机和连接到eth0的主机挂接到同一个网桥上,实现两者之间的通信,构建结果图如下:

    原文给除的配置就是

    # ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
    # ovs-vsctl add-port br0 eth0 //把eth0挂接到br0中
    # kvm -m 512 -net nic,macaddr=00:11:22:33:44:55-net 
    tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive
    file=/path/to/disk-image,boot=on //ovs-ifup和ovs-ifdown和上一节中相同

    其实在执行了前面两步之后,应该就可以直接和里面的VM进行通信了。

    21、如何连接两个已经创建号的网桥?

    ovs-vsctl add-br br 添加一个名为br0的网桥
    ovs-vsctl add-br br1 //添加一个名为br0的网桥
    
    ovs-vsctl add-port br0 patch-to-br1 //为br0添加一个虚拟端口
    
    ovs-vsctl set interface patch-to-br1type=patch //把patch-to-br1的类型设置为patch
    ovs-vsctl set interface patch-to-br1 options:peer=patch-to-br0 把对端网桥和此网桥连接的端口名称设置为patch-to-br0
    
    ovs-vsctl add-port br1 patch-to-br0 //为br0添加一个虚拟端口
    ovs-vsctl set interface patch-to-br0type=patch //把patch-to-br0的类型设置为patch
    
    ovs-vsctl set interface patch-to-br0options:peer=patch-to-br1 //把对端网桥和此网桥连接的端口名称设置为patch-to-br1
    
    ovs-vsctl set interface patch-to-br0type=patch 和ovs-vsctl set interface patch-to-br0 options:peer=patch-to-br1是对ovs-database的操作,有有兴趣的同学可以参考ovs-vswitchd.conf.db.5

    22、如何实现两个网桥通过网线来进行连接

    host1:

    #ovs-vsctl add-br br0 //添加名为br0的网桥
    #ovs-vsctl add-port br0 eth0 //把eth0挂接到br0上

    host2:

    #ovs-vsctl add-br br0 //添加名为br0的网桥
    #ovs-vsctl add-port br0 eth0 //把eth0挂接到br0上

    然后就可以通过网络进行通信 

    23、如何设置端口的镜像流量?

    上面13中,虽然有镜像流量的一条命令,但是还是很不清楚,所以我再详细一点写在这里。

    参考网页:

    http://openvswitch.org/support/dist-docs/ovs-vsctl.8.txt

    http://www.rendoumi.com/chun-shou-dong-she-zhi-open-vswitchde-mirror-port/

    Mirror:一个端口镜像的配置是附在Bridge上的。Records是使用 id 来进行记录了。

    假设有如下的配置场景:有一个 br0 的 Bridge, 在上面有端口 eth0, eth1, eth2. 

    把eth0和eth1上面发送和接收的流量都发送到eth2.

    # 创建一条镜像规则 (我是依照我自己的理解,命令没错,解释不一定)
    ovs-vsctl -- set Bridge br0 mirrors=@m  
     -- --id=@eth0 get Port eth0    
      -- --id=@eth1 get Port eth1   
      -- --id=@eth2 get Port eth2 
     --    --id=@m    create    Mirror    name=mymirror select-dst-port=@eth0,@eth1 select-src-port=@eth0,@eth1 output-port=@eth2   
    # -- 表示一个命令的开头
    # 前面有 -- 是开始另外一条命令的开始
    # 创建一个名字@eth0,在后面用。
    # --id=@m 代表上面的设置开始对那条镜像进行设置
    # select-src-port 是选择数据包的来源端口
    # select-dst-port 是选择数据包的目标端口
    # output-port 是符合上面的流量,就镜像到哪里的目标端口
    
    # 删除一条流量镜像
    ovs-vsctl -- --id=@rec get Mirror mymirror 
     -- remove Bridge br0 mirrors @rec
    # @rec就是这条记录的名字。
    # -- remove 后面是要删除的信息。
    
    # 删除所有的镜像
    ovs-vsctl clear Bridge br0 mirrors

    24、如何删除某个OVS上的流?

    sudo ovs-ofctl del-flows <OVS-name>

    变更记录:

    变更说明变更人时间
    整理mininet笔记和部分OVS记录 andrew 2016-04-18
    整理fishcired的笔记的OVS部分,添加到我自己的OVS部分 andrew 2016-05-12
         
  • 相关阅读:
    签字文件的保存逻辑
    POJ-1273 Drainage Ditches
    POJ-2513 Colored Sticks
    HDU-1251 统计难题
    POJ-1300 Door Man
    POJ-3159 Candies
    POJ-3169 Layout
    POJ-2983 Is the Information Reliable?
    POJ-1716 Integer Intervals
    HDU-3666 THE MATRIX PROBLEM
  • 原文地址:https://www.cnblogs.com/hwy89289709/p/6844738.html
Copyright © 2020-2023  润新知