OpenVswitch的安装
https://blog.csdn.net/dandanfengyun/article/details/107976035

安装完成并启动后如下 版本2.5.10

大致命令有

[root@ovs-singlenic ~]# ovs
ovs-appctl          ovsdb-server        ovs-dpctl           ovs-pki             ovs-vswitchd
ovs-bugtool         ovsdb-tool          ovs-dpctl-top       ovs-testcontroller
ovsdb-client        ovs-docker          ovs-ofctl           ovs-vsctl

比较常用 ovs-vsctl 和 ovs-vswitchd

基本概念

交换机(英文:Switch,意为“开关”)是一种用于电信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。
最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交换机等。

最通俗易懂的解释就是可以让一根网线变成多根去使用,还不会让这根线上的数据产生冲突

VLAN (Virtual LAN)虚拟局域网,不合适的类比方法是网段,如
10.10.10.1/24
10.10.20.1/24
相互之间隔离。。。

  • Bridge: Bridge 代表一个以太网交换机(Switch),一个主机中可以创建一个或者多个 Bridge 设备。

  • Port: 端口与物理交换机的端口概念类似,每个 Port 都隶属于一个 Bridge。

  • Interface: 连接到 Port 的网络接口设备。在通常情况下,Port 和 Interface 是一对一的关系, 只有在配置 Port 为 bond 模式后,Port 和 Interface 是一对多的关系。

ovs中port有四种类型

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

一般来说 Internal 类型的端口 可以设置 IP。。。Normal类型就是网络接口设置 port无法设置IP

端口的VLAN_MODE几种模式

模式 说明
默认 在默认模式下(VLAN_mode没被设置),如果指定了端口的tag属性,那么这个端口就工作在access模式,并且其trunk属性的值应该保持为空。否则,这个port就工作在trunk模式下,如果trunk被指定,则使用指定的trunk值。
trunk trunk模式的端口允许传输所有在其trunk属性中指定的那些VLAN对应的数据包。其他VLAN的数据包就会被丢弃。从trunk模式的端口中进入的数据包其VLAN ID不会发生变化。如果进入的数据包不含有VLAN ID,则该数据包进入交换机后的VLAN为0。从trunk模式的端口出去的数据包,如果VLAN ID不为空,则依然保持该VLAN ID,如果VLAN ID为空,则出去后不再包含802.1Q头部
access access模式的端口只允许不带VLAN的数据包进入,不管数据包的VLAN ID是否与其tag相同,只要含有VLAN ID,这个数据包都会被端口drop。数据包进入access端口后会被打上和端口tag相同的VLAN,而再从access端口出去时,数据包的VLAN会被删除,也就是说从access的端口出去的数据包和进来时一样是不带VLAN的
native-tagged native-tagged端口类似于trunk端口,它们之间的区别是如果进入native-tagged端口的数据包不含有802.1Q头部,即没有指定VLAN,那么该数据包会被当作native VLAN,其VLAN ID由端口的tag指定。
native-untagged native-untagged端口类似于native-tagged端口,不同点是native VLAN中的数据包从native-untagged端口出去时,会被去掉802.1Q头部。

通常来讲,只使用 trunk port 连接两个交换机,而不是用来连接机器和交换机,因为机器不想看到它们收到的数据包带有 VLAN Header。

VLAN TAG是一个数字 0-4096

首先学习 一下 ovs-vsctl 命令

  1. 展示OVS的状态。print overview of database contents
    ovs-vsctl show

  2. 桥 bridge相关

  add-br BRIDGE               create a new bridge named BRIDGEadd-br BRIDGE PARENT VLAN   create new fake BRIDGE in PARENT on VLANdel-br BRIDGE               delete BRIDGE and all of its portslist-br                     print the names of all the bridges
  • 创建桥
ovs-vsctl [--may-exist] add-br bridge

创建一个 名为 bridge的桥。。。如果加上–may-exist 参数,在该桥已存在时不会进行任何操作。当不加该参数时,桥已存在时报错提示。

ovs-vsctl add-br cloudbr
  • 创建 fake bridge (假桥,也可看做 VLAN Bridge),暂时不知有何作用。
ovs-vsctl [--may-exist] add-br bridge parent vlan

创建一个假桥,假桥的VLAN TAG 是 vlan。–may-exist参数作用同上。 创建一个 fake bridge是,需要指定 父桥 和 VLAN TAG,父桥必须存在且不能也是一个fake bridge。

ovs-vsctl add-br cloudbr0 cloudbr 0
  • 查看桥
ovs-vsctl [--real|--fake] list-br

查看当前存在的桥。 可选参数–real表示,查看真桥 --fake表示查看 fake bridge 。不加参数则是展示 所有 bridge。

ovs-vsctl --real list-br
ovs-vsctl --fake list-br
ovs-vsctl list-br


可以看到一个真桥一个假桥。假桥附属于真桥。。。且设置了VLAN TAG
据说VLAN 有效值是1-4096。。。这里设置0 只是 示例

  • 删除桥
ovs-vsctl [--if-exists] del-br bridge

删除一个桥。如果该桥是一个 real bridge 那么附属在上面的fake bridge 也会被删除。–if-exists参数,如果加上该参数,桥不存在时不会进行任何操作,如果不加该参数,桥不存在时 报错。

3. 端口相关

  • 查看桥的端口
ovs-vsctl list-ports bridge

展示桥bridge 的端口。注,在创建一个桥时,会自动创建一个同名的 Port,但是该Port不会在此展示,另 fake bridge 在ovs-vsctl show 命令中显示也是一个Port,同样不会被当做 Port端口展示。

  • 创建端口
ovs-vsctl [--may-exist] add-port bridge port [column[:key]=value]...

一般来说,创建端口就是将 将网络接口设备加入OVS,–may-exist参数作用同上。可以在设置端口是 同时设置 端口VLAN MODE类型。桥是一个real bridge 而不是 fake bridge

ovs-vsctl [--may-exist] add-port bridge port

示例: ens33 是网卡名

ovs-vsctl add-port cloudbr ens33

注,当网卡加入网桥之后,网卡就是交换机上的一个端口,交换机作为二层设备,其端口是不可能有IP地址的,所以本机的IP地址失效。所以ssh连接什么的都会失效。
网桥创建成功后会默认带一个与网桥同名的port,并且这个port的类型是比较特殊的Internal。
可以将原网卡IP 设置到此处。顺便可以添加一个默认路由,原默认路由失效了,会导致无法访问外网。

Internal 类型可以看做每个OVS交换机有个可以用来处理数据报的本地端口,可以为这个网络设备配置 IP 地址。当创建ovs网桥时会自带一个同名的端口,该端口就是类型为Internal 端口。解决的思路就是Internal类型的port会生成一个虚拟网卡,将绑定到网桥的网卡的IP地址转移到该虚拟网卡上,然后配置路由即可。

ifconfig ens33 0
ifconfig cloudbr 192.168.199.81
route add default gw 192.168.199.1 cloudbr

添加端口时设置了VLAN_MODE
暂时只学习两种模式设置 assess 和 trunks

  • 设置access 模式,即设置端口属于单独的VLAN TAG
ovs-vsctl add-port cloudbr ens33 tag=33


设置后 会发现 该端口VLAN TAG为33,这时ssh连接什么失效后即使按上面的设置cloudbr IP 也无法恢复。因为这个接口只允许 TAG为33 的包通过。

  • 设置tunnk模式。
ovs-vsctl add-port cloudbr ens33 trunks=33,0,100,200


trunk模式,允许 trunks包内的TAG 通过。但是 ssh什么的暂时是无法连接了。除非带着相符合的VLAN TAG。

  • 删除端口
ovs-vsctl [--if-exists] del-port [bridge] port

删除端口,不可以通过该命令删除随桥生成的端口和fake bridge。由于端口基本上是网络接口设备,名称唯一,所以bridge参数可以不加。–if-exists参数作用同上。

ovs-vsctl del-port cloudbr ens33

端口的VLAN MODE模式不止在创建时可添加创建完成后也可以设置

  • 设置端口模式为 assess
ovs-vsctl set port ens33 tag=33
  • 设置端口模式为 trunks
ovs-vsctl set port ens33 trunks=33,0,100,200


个人理解 将端口的VLAN 设置回默认

ovs-vsctl set port ens33 trunks=[]
ovs-vsctl set port ens33 tag=[]
  • 查看 端口属于哪个桥
ovs-vsctl port-to-br port

这里的port 只能是 正常的端口,不能是随桥创建的 port也不能是 fake bridge

ovs-vsctl port-to-br ens33
  1. 查看网络设备
    网络接口设备(一般是网卡) 和Port是连接到一起的,一般是一对一的关系,当配置Port为 bond 模式时,可能是一对多关系。
  • 查看一个桥上的 网络接口设备。
ovs-vsctl list-ifaces bridge

ovs-vsctl list-ifaces cloudbr
  • 查看网络接口设备属于哪一座桥。
ovs-vsctl iface-to-br iface

ovs-vsctl iface-to-br ens33

基本试用。

一.设置将网卡加入OVS并设置网桥IP

  1. 创建名为cloudbr 的网桥
ovs-vsctl add-br cloudbr
  1. 添加端口,将ens33网卡 连接到端口。
ovs-vsctl add-port cloudbr ens33

  1. 绑定原网卡IP 到 cloudbr端口

  2. 重设 route

route add default gw 192.168.199.1 cloudbr

2.测试 设置为TAG或trunks模式的端口访问。

使用VMwareWorkStations 创建的两个虚拟机,每个都是双网卡

主机名 IP1 IP2
doublenic1 192.168.199.81 192.168.100.81
doublenic1 192.168.199.82 192.168.100.82

为求测试简单,两个主机将ens34 网卡加入OVS测试,查看是否可以互相访问。

  1. 两主机相同设置,设置OVS,端口 ens34 模式为access
ovs-vsctl add-br cloudbr
ovs-vsctl add-port cloudbr ens34
ovs-vsctl set port cloudbr tag=34

  1. 两主机为cloudbr设置不同的 IP,由于有ens33,所以不重设路由了
ifconfig ens34 0
ifconfig cloudbr 192.168.100.81
ifconfig ens34 0
ifconfig cloudbr 192.168.100.81

  1. 测试是否可互相访问
    宿主机 尝试 ping 两主机 IP


    可以看到加入OVS的 IP192.168.100.81/82 宿主机是没法ping 通的。原因就是,设置了 TAG。但是两个OVS cloudbr 桥的TAG是一致的,因此可以互相访问。

  2. 设置主机TAG不一致,是否可互相访问。
    现在将doublenic2 主机的cloudbr 的TAG改为234,测试是否可互相访问。

trunks设置和tag设置。补充一

目前对 其的理解不够,再学习后补充。

局域网交换机的基本功能与网桥一样,具有帧转发、帧过滤和生成树算法功能。虽然 有不一样的地方,但是模糊来看,网桥和交换机是相似的。

一个OVS 可以创建 多个bridge,每个bridge可以有多个端口,端口是可以设置 VLAN MODE的。如果学习创建虚拟机,使用OVS作为网桥。那么每个bridge 会有许多 虚拟网卡 用于虚拟机的,每个虚拟网卡就是一个port,可以设置TAG 实现 VLAN 隔离。而bridge同名的 port 就可以设置trunks,这样就会有桥(交换机之间的)VLAN 隔离。
因此,通常来讲,只使用 trunk port 连接两个交换机 这句话也可以理解。。。

按自己浅薄的理解,OVS 的Bridge可以看做一个 交换机。。。

下面的VLAN ID 等同于 TAG

一个不带VLAN ID数据包 从进入一个 assess模式的端口,会被打上相应的TAG,然后 如果数据出口是 同交换机(Bridge桥)内 另一个相同 TAG的端口,从这个端口出去后会去掉TAG,无法从其它assess模式的端口出去,因为TAG 不同。 如果数据出口 是 trunks 模式的端口,trunks 包含TAG,则这个数据会带着 VLAN ID 出去,然后只能从另一个交换机的trunks端口进入,这个端口trunks还要包含TAG才行,另无法从assess端口进入,因为assess模式 端口只允许不带VLAN的数据包进入,数据进入另一个交换机后,会从相同VLAN ID的assess 端口出去 同时去掉TAG。当然,也有可能还是从trunks模式的端口出去 再找其他的交换机,其实还是重复上一步。

暂时只简单理解 assess和trunk 模式。勉强够用了。。。
如下例

两个主机各有一个 OVS Bridge ,看做交换机。
端口1 交换机同名端口 cloudbr
端口2 其实是设置 的 fake bridge ccloudbr0(依据桥cloudbr)
端口3 用于 连接 网络接口设备 的端口 ens34

这里 不明白 网络包是一个怎样的流程,经过没经过 cloudbr桥同名端口,另这个端口设置 trunks 后似乎对 两主机互通无影响,暂时也不明白这个cloudbr 端口作用

两个主机 设置相同
ens34 端口设置成 trunk 端口, trunks=34,100,200
cloudbr0 设置成 assess 端口,tag为100。

于是主机一 访问 主机二 时,网络包流通大概是(将发起的ping 命令看做一个包,忽略掉 ens34 端口 网卡流程)
注: 网络具体流程 不太懂, 猜测并简化后如下。只是希望借此 理解一下 access 端口和 trunks 端口的 使用与区别。

  1. 包 从cloudbr0 进入到主机一的 交换机,由cloudbr0 端口打上了100 的VLAN ID,
  2. 包 在交换机内部 找到 ens34 端口,是一个trunks 端口,该端口 允许通过VLAN ID 为 34,100,200或为空的包。且该端口连接网卡,通过该端口将网络包发出。 网络包从ens34 端口出去 仍然会保留 VLAN ID,值为100。
  3. 网络包到达 主机二 的交换机, 从ens34 端口进入到主机二的交换机。因为该端口也是trunks 端口,允许通过VLAN ID 为 34,100,200或为空的包。
  4. 在主机二的交换机中 网络包最终 到达 cloudbr0 端口,该端口是assess类型 tag为100。正好网络包的 VLAN ID就是100,于是网络包 从该接口出去,并取消VLAN ID。 真正到达主机二,获取了返回结果。
  5. 然后按原路返回。加 TAG 过trunks 端口,最后出去取消VLAN ID将结果展示在 主机一。

如此,以下几个设置都会导致 网络包 无法到达。
一 。 主机一的 cloudbr0 tag 设置为100,主机二 的cloudbr0 tag 设置为200

因为 TAG 不同。导致网络包到达对方主机候没有端口出去。。。

二。本机 cloudbr0 端口 TAG=100, ens34 端口 trunks=34,200

网络包进入交换机后 没有 端口可以出去。。。

三。 本机cloudbr0 端口tag=100, 访问主机的ens34 端口 trunks=34,200

同样无法访问。。。因为网络包这次可以从自己的交换机出去了,但却无法进入 要访问主机的 交换机。

OpenVSwitch的端口Port学习使用相关推荐

  1. IP地址、端口Port

    IP地址.端口Port 源代码: package cn.ecut.tcp;import java.net.InetAddress; import java.net.UnknownHostExcepti ...

  2. Linux12:(2.1k)网络管理,端口port和插口socket的区别,API接口

    Linux12:网络管理 文章目录 一.网络接口名称规则 1.认识网卡 2.修改网卡配置文件 3.主机名 4.端口(port)和插口(socket)的区别 API接口: 一.网络接口名称规则 计算机与 ...

  3. 网络编程,概述,网络通信要素,ip地址,端口Port

    网络编程 1.1概述 信件 计算机网络: 计算机网络是指将地理位置不同的具有独立功能的多台计算机计算机/140338)及其外部设备,通过通信线路连接起来,在网络操作系统网络操作系统/3997),网络管 ...

  4. 完成端口(Completion Port)学习

    文章转载自完成端口(Completion Port)详解 看了文章中的解说,大体看得明白. 但是当时有个不解之处:就是投递WSARecv请求的时候,没有明显传入该操作对应的自己定义的操作类型(就是Ge ...

  5. day31 网络通信udp,ip地址,端口port

    网络通信概述 1. 什么是网络 说明 网络就是一种辅助双方或者多方能够连接在一起的工具 如果没有网络可想单机的世界是多么的孤单 单机游戏(不能和远在他乡的朋友一起玩) 2. 使用网络的目的 就是为了联 ...

  6. dubbo admin默认端口_Dubbo学习(四) Dubbo 从下载到编译成功

    DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广 ...

  7. oracle 静态监听 端口,侦听动态注册静态注册local_listener参数端口PORT

    之前都是网上看过整理的,今天看到local_listener竟然一点印象都没有,太恐怖,索性再好好整理一下,避免再次忘记. 一.什么是注册 注册就是将数据库作为一个服务注册到监听程序.客户端不需要知道 ...

  8. 【笔记】DNS、IP地址、端口(Port)

    文章目录 笔记 笔记 写的不对的地方请通知我改正 QQ 群:587897780 递归式学习 不积跬步,无以至千里:不积小流,无以成江海. 懂得感恩和分享 DNS:域名系统(英文:Domain Name ...

  9. Matlab Serial Port学习

    目录 官方教程 学习记录 帮助 函数 关于串口 虚拟串口工具 其他 官方教程 Matlab官网有关于Serial Port Interface的详细说明.写的挺全的,就是访问速度太慢了. 链接: [h ...

  10. 端口---汇编学习笔记

    端口 在PC机系统中,和CPU通过总线相连的芯片除各种存储器外,还有以下3种芯片. 各种接口卡(比如,网卡.显卡)上的接口芯片,它们控制接口卡进行工作 主板上的接口芯片,CPU通过它们对部分外设进行访 ...

最新文章

  1. 水泵怎么做_不是说鱼缸里放置三合一水泵都会起到反作用,也得看什么缸什么鱼...
  2. session的使用
  3. 每日一皮:自己运行正常,测试一测就有bug
  4. Python-OpenCV 处理图像(一):基本操作 cv2
  5. 把类成员改成指针_如果类中存在管理其他类对象的指针,通过析构函数释放它们...
  6. 使用属性升级MyBank >> 掌握自定义方法的定义及调用 1214
  7. python中的代码块用啥表示_python代码里出现是啥意思
  8. 华为融合位置服务器,融合服务器
  9. idea导入Javaweb项目
  10. 给已有表添加字段sql
  11. 5G牌照都发完了,那些传说中的5G手机Ready了吗?
  12. 【Windows7】win7启动 报错 AutoIt错误,不能打开脚本文件
  13. 西游记中牛魔王的雄厚实力和家业地盘
  14. html里面<i>和<em>标签的区别
  15. numpy中的协方差,方差相关计算
  16. ExecuteNonQuery方法和ExecuteScalar方法的区别
  17. Echarts配置项-2
  18. Qt_Opencv安装
  19. EV2200 使用方法
  20. Java 数据结构与算法

热门文章

  1. PS—制作 抖音 图标
  2. JAVA、Linux部署运维常用命令
  3. 局域网常见攻击方式原理
  4. 硬件工程师为什么远不如软件工程师?
  5. 加法器php,全加器原理是什么
  6. 【通信原理】第四章 -- 信道
  7. 如何申请注册微信公众号
  8. 「快闪群」批量成交攻略
  9. 计算机类的竞赛一般多会报,2017自主招生报考条件建议65问,涵盖所有问题!...
  10. 教育部重磅文件:2020年起取消自主招生,推出强基计划