原标题:理解linux虚拟网络设备veth

前面介绍了linux network namespace,接着介绍一下如何让一个独立的网络命名空间和主机的网络互通,这里我们需要用到linux虚拟网络设备veth。

veth设备

veth是linux的一种虚拟网络设备,它有点类似于两张网卡中间用一条网线连着,veth设备总是成对出现,通常用来连接不同网络命名空间(下面开始简称NS),一端连着NS1的内核协议栈,另一端连着NS2的内核协议栈,一端发送的数据会立刻被另一端接收。

接下来我们通过一些示例来理解veth设备,我们创建一个新的NS,然后跟主机的NS连接起来

通过下面的命令可以创建一对veth设备:

然后创建一个名为ns1的network namespace :

然后把刚创建的veth1网卡的其中一端转到ns1,这就好像一端插到ns1上,另一端插在主机的ns上:

给veth的两端都配置个IP,设置veth0时,要用ip netns exec ns1,因为veth0此时在ns1中:

此时的状态如下:

这时候主机和ns1已经可以相互ping通了:

如果我们进到ns1中发现ping localhost不通的话,有可能只是因为lo网卡没有启动起来

如果我们进到ns1中发现ping localhost不通的话,有可能只是因为lo网卡没有启动起来

这条路由指示以后凡是往192.168.10.0/24这个网段的地址都给veth1,这显然不是我们想要的结果,因为其它的ns并没有连在veth1上。在k8s的节点上,相同主机的pod通常会在同一个子网段里,前面那条路由就相当于把这个主机的全部pod的通信都引到了veth1上,这就有问题了。

其实,我们是可以不在veth1上配置IP的,上面的示例只是为了让大家可以对veth连接的效果有个认识,因为veth1连的是主机的内核协议栈,主机上已经有很多个IP了,只是因为当前ns1中没有默认路由,去主机的IP的话是不通的(当然如果你的主机的网段本来就是192.168.10.0/24网段,那又是能通的),所以如果不配置veth1端的IP的话,只要加上默认路由就可以了,下面我们演示一个更实用的场景。

另一种方法

直接上命令,跟上面的差不多,也是建一对veth网卡,一端转到新的ns上,在这就不一句句解释了:

打开主机这一端veth3的arp代答:

给ns2加上默认路由:

在主机上添加去往ns2路由:

为什么ns2的默认路由是个这么奇怪的IP?后面会解释。

此时整个状态如下图:

这时候ping一下ns2,发现通了:

那ns1和ns2能不能相互ping通呢?行的,不过要先打开veth1的arp代答,并给ns1配个默认网关

如无意外,在ns1上ping ns2应该是通了,记得要打开主机的路由转发功能:

简单解释一下为什么给ns2设置的默认网关是169.2.2.2,其实默认网关的IP在整个通信的过程中都不会用到,想一下数据包发送流程,当ns2的要发一个包去主机时,封完IP头后,到了链路层,协议栈的路由判决已经决定了下一跳为默认网关,这时候邻居子系统会从ns1的邻居表(也就是ARP表)查找下一跳IP的MAC地址,找不到就会发送ARP请求,这时候ARP请求到了对端veth3,因为veth3开启了arp代答,所以会直接把自己的MAC地址返回去,这样ns2的邻居子系统会以为自己得到了网关的MAC地址,于是完成MAC头的封装,把数据包发送到veth1,所以其实在这里的默认网关的IP可以随便写一个非当前网段的地址。

总结

上面介绍了在主机与容器相互连接的两种方法,还有第三种方法就是用linux bridge,下一章介绍linux bridge。

欢迎关注滴普科技官网 http://datasink-sensors.deepexi.top/t/4a返回搜狐,查看更多

责任编辑:

网络设备中的linux,理解linux虚拟网络设备veth相关推荐

  1. 云计算底层技术--linux上的虚拟网络设备

    Linux 用户想要使用网络功能,不能通过直接操作硬件完成,而需要直接或间接的操作一个 Linux 为我们抽象出来的虚拟网络设备来完成. 一个常见的情况是,系统里装有一个硬件网卡,Linux 会在系统 ...

  2. 寻址——网络设备中寻找网络接口所对应的网络设备的方法(不知道接口所对应的设备)

    目录 一.产生问题: 二.解决办法: (1)情况一: (2)情况二: (3)特殊情况: --解决: (1)使用物理设备寻线器: (2)通过在其他设备上 查看arp表和mac地址表--寻址 !!!!! ...

  3. linux虚拟网络设备之tun/tap(一)

    在现在的云时代,到处都是虚拟机和容器,它们背后的网络管理都离不开虚拟网络设备,所以了解虚拟网络设备有利于我们更好的理解云时代的网络结构.从本篇开始,将介绍Linux下的虚拟网络设备. 虚拟设备和物理设 ...

  4. Linux虚拟网络设备之tun/tap

    Table of Contents 虚拟设备和物理设备的区别 tun/tap的另一端是什么? tun/tap设备有什么用? tun和tap的区别 示例 示例程序 演示 结束语 参考 在现在的云时代,到 ...

  5. Linux 虚拟网络设备 tun/tap veth pair

    Linux 虚拟网络设备 tun/tap veth pair 本篇主要介绍一下 linux 下面的 虚拟网络设备 tun/tap veth pair 随着容器逐步取代虚拟机,成为云基础架构的标准,然而 ...

  6. 云计算底层技术-虚拟网络设备(Bridge,VLAN)

    openstack底层技术-各种虚拟网络设备一(Bridge,VLAN)  openstack底层技术-各种虚拟网络设备二(tun/tap,veth) Linux Bridge Bridge与netf ...

  7. linux虚拟网络设备--内核网桥的实现分析(六)

    一.Linux内核网桥的实现分析 Linux 内核分别在2.2 和 2.4内核中实现了网桥.但是2.2 内核和 2.4内核的实现有很大的区别,2.4中的实现几乎是全部重写了所有的实现代码.本文以2.4 ...

  8. linux虚拟网络设备之bridge(桥)(三)

    继前两篇介绍了tun/tap和veth之后,本篇将介绍Linux下常用的一种虚拟网络设备,那就是bridge(桥). 本篇将通过实际的例子来一步一步解释bridge是如何工作的. 什么是bridge? ...

  9. Linux - 虚拟网络设备 - bridge,veth,namespace

    引用 轻松理解 Docker 网络虚拟化基础之网络 namespace! 轻松理解 Docker 网络虚拟化基础之 veth 设备! 深入理解 Linux 上软件实现的"交换机" ...

最新文章

  1. “BitPico称BCH98%的节点或位于同一服务器机架中”?
  2. Linux怎么查询全部容器时间,docker容器与Linux主机环境获取时间不一致
  3. Selenium2Lib库之输入常用关键字实战
  4. Azure PowerShell (1) PowerShell整理
  5. [文摘]标准的软件开发过程
  6. scada系统集成_MES/MOM与WMS系统集成应用案例-系统接口、交互数据分析
  7. Rxjs操作符决策树-思维导图
  8. 人机工程学产品设计案例_专业解读——产品设计
  9. julia语言 python解释器_新一代科学计算语言Julia以及开发环境搭建教程
  10. C++封装Detours库挂钩函数
  11. 基于HI600R的差分GPS设搭建过程介绍
  12. 区块链技术DIY--xmz
  13. leetcode【困难】460、LFU 缓存
  14. 首发于 monitor 写文章 重修微积分2——收敛 精选 zy han zy han 重修微积分2——收敛 精选 已有 12780 次阅读 2015-3-30 07:58 |个人分类:科普|
  15. 喜报!中国工商银行长春分行荣获吉林省“巾帼建功”先进集体称号
  16. git命令出现fatal: Unable to create 'xxx/.git/index:File exists.问题
  17. java中switch语句用法详解
  18. 计算机设置任务栏的大小要先,教你win7系统电脑调整任务栏预览窗口大小的方法...
  19. linux配置yum源
  20. python双重for循环怎么理解_理解 Python 的 for 循环

热门文章

  1. CUDA support is required (OpenCV CMake parameter ‘WITH_CUDA‘ must be true).
  2. opencv中的push_back()函数
  3. Python基础班每日整理(三)
  4. rsync源目录写法的一点小细节
  5. Ubuntu架设FTP
  6. linux系统启动流程详解
  7. springmvc 将post转换为delete,put
  8. 使用ansible部署安装corosync+pacemaker
  9. 打造属于自己的图文符号库
  10. ASP.NET常见几种安全问题