Docker单机网络上

网卡

网卡是一块计算机硬件。其特点是每一个网卡都有独立的MAC地址,用户可以通过电缆进行相互之间的连接。其主要功能是将数据封装成以太网中的帧,通过链路管理进行传输,接受数据后,对数据进行编码和译码。其优点是提高了CPU的利用率通过链路管理进行传输,提升了CPU的性能。 再用通俗一点的话解释,网卡其实就是七层或者四层网络模型的门户,复制接收和转发数据如下图:

Docker单机网络上

Network Namespace介绍

Network Namespace在逻辑上是网络堆栈的一个副本,它有自己的路由、防火墙规则和网络设备。默认情况下,子进程继承其父进程的Network Namespace。如果不显式创建新的Network Namespace,所有进程都从 init 进程继承相同的默认Network Namespace。

每个新创建的Network Namespace默认有一个本地回环接口 lo,除此之外,所有的其他网络设备(物理/虚拟网络接口,网桥等)只能属于一个Network Namespace。每个Socket也只能和一个Network Namespace通信。

Docker单机网络上

创建Network Namespace

备注:采用的环境为阿里云CentOS 8.2

检查默认的Network Namespace 的 ID;

readlink /proc/$$/ns/net

创建名为networknamespacetest的Network Namespace;

 #创建名为networknamespacetest的Network Namespace
 ip netns add networknamespacetest
 #检查netns是否创建成功
 ls /var/run/netns

Docker单机网络上

在networknamespacetest中创建一个bash进程并且查看Network Namespace的ID;

  #创建bash进程
  ip netns exec networknamespacetest bash
  #查看Network Namespace的ID
  readlink /proc/$$/ns/net

Docker单机网络上

经过上面可以得出每个Network Namespace都是相互隔离的,接下来我们看下networknamespacetest有什么构成;

 ip addr

Docker单机网络上

Network Namespace由本地回环接口 lo构成,并且这个接口是处于关闭状态的,接下来我们启动这个回环接口;

ip link set lo up

测试lo的连通性;

Docker单机网络上

两个Network Namespace之间如何通信 Veth-Pair 什么是Veth-Pair

Veth是Linux中一种虚拟出来的网络设备,Veth设备总是成对出现,所以一般也叫Veth-Pair。Veth-Pair特点就是无法单独存在,删除其中一个,另一个也会自动消失。Veth的两头都直接连着网络协议栈,所以你创建一个Veth对,主机上就会多2个网卡。

Docker单机网络上

Veth-Pair作用

Veth-Pair作用就是反向流转数据,从一头发数据,就会从另一头收到数据。Veth-Pair常常充当着一个桥梁,连接着各种虚拟网络设备。常见用途是连接两个Netwok Namespace,或者连接Linux-Bridge、OVS 之类的。

Docker单机网络上

实战

Docker单机网络上

创建两个Network Namespace network01和network02;

 ip netns add network01
 ip netns add network02

创建一对Veth设备,默认情况下会自动为Veth-Pair生成名称,这里为了方便我们测试,我们在创建时指定 Veth-Pair的名称;

 #创建Veth-Pair
 ip link add veth01 type veth peer name veth02
 #查看主机中Veth-Pair
 ip link ls   

Docker单机网络上

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjzgd.html