Linux-容器网络基础知识

网络命名空间

通过对网络资源的隔离,就能在一个宿主机上虚拟多个不同的网络环境。Docker正是利用了网络的命名空间特性,实现了不同容器之间的网络隔离。
命名空间的元素有:进程套接字网络设备

  • 网络设备:它的特征决定它是否可以在命名空间移动

网络命名空间的实现

建立了新的网络命名空间,并将某个进程关联到这个网络命名空 间后,就出现了类似于如图7.1所示的内核数据结构,所有网站栈变量 都被放入了网络命名空间的数据结构中。这个网络命名空间是其进程组 私有的,和其他进程组不冲突。
在这里插入图片描述
所有的网络设备(物理的或虚拟接口、桥等在内核里都叫作Net Device)都只能属于一个命名空间。当然,物理设备(连接实际硬件的 设备)通常只能关联到root这个命名空间中。虚拟的网络设备(虚拟的 以太网接口或者虚拟网口对)则可以被创建并关联到一个给定的命名空 间中,而且可以在这些命名空间之间移动。

网络命名空间的操作

  • 创建一个命名空间:
ip netns add <name>
  • 在命名空间中执行命令:
ip netns exec <name> <command>
  • 也可以先通过bash命令进入内部的shell界面,然后执行各种命令:
ip netns exec <name> bash

网络命名空间的使用技巧

在不同的网络命名空间之间转移设备,例如下面会提到的Veth设备对的转移。因为一个设备只能属于一个命名空间,所以转移后在这个命名空间中就看不到这个设备了。具体哪些设备能被转移到不同的命名空间呢?在设备里面有一个重要的属性:NETIF_F_ ETNS_LOCAL,如果这个属性为on,就不能被转移到其他命名空间中。

Veth设备对

Veth设备对是为了在不同的网络命名空间之间通信,利用它可以直接将两个网络命名空间连接起来。由于要连接两个网络命名空间,所以Veth设备都是成对出现的,很像一对以太网卡,并且中间有一根直连的网线。既然是一对网卡,那么我们将其中一端称为另一端的peer。在Veth设备的一端发送数据时,它会将数据直接发送到另一端,并触发另一端的接收操作。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9hoRQ7x3-1650447830848)(evernotecid://A1E553FF-ED0D-4E10-BFBE-5381F2C17039/appyinxiangcom/10992066/ENResource/p636)]

Veth设备对的操作命令

Veth设备对如何查看对端

网桥

Linux网桥的实现

Linux可以支持多个不同的网络,它们之间能够相互通信,如何将这些网络连接起来并实现各网络中主机的相互通信呢?可以用网桥。网桥是一个二层的虚拟网络设备,把若干个网络接口“连接”起来,以使得网络接口之间的报文能够互相转发。网桥能够解析收发的报文,读取目标MAC地址的信息,和自己记录的MAC表结合,来决策报文的转发目标网络接口。为了实现这些功能,网桥会学习源MAC地址(二层网桥转发的依据就是MAC地址)。在转发报文时,网桥只需要向特定的网口进行转发,来避免不必要的网络交互。如果它遇到一个自己从未学习到的地址,就无法知道这个报文应该向哪个网络接口转发,就将报文广播给所有的网络接口(报文来源的网络接口除外)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ueegCb27-1650447830848)(evernotecid://A1E553FF-ED0D-4E10-BFBE-5381F2C17039/appyinxiangcom/10992066/ENResource/p637)]

网桥的常用操作命令

iptables和Netfilter

在Linux网络协议栈中有一组回调函数挂接点,通过这些挂接点挂 接的钩子函数可以在Linux网络栈处理数据包的过程中对数据包进行一 些操作,例如过滤、修改、丢弃等。整个挂接点技术叫作Netfilter和 iptables。

  • Netfilter负责在内核中执行各种挂接的规则,运行在内核模式中
  • iptables是在用户模式下运行的进程,负责协助和维护内核中Netfilter 的各种规则表。二者互相配合来实现整个Linux网络协议栈中灵活的数 据包处理机制。

处理规则

挂节点

INPUT、PREOUTING、FORWARD、OUTPUT、POSTROUTING
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ypRC5sq-1650447830848)(evernotecid://A1E553FF-ED0D-4E10-BFBE-5381F2C17039/appyinxiangcom/10992066/ENResource/p638)]

表类型

RAW、MANGLE、NAT和FILTER。优先级从高到低。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MYgUuZlO-1650447830848)(evernotecid://A1E553FF-ED0D-4E10-BFBE-5381F2C17039/appyinxiangcom/10992066/ENResource/p639)]

匹配参数

匹配的参数用于对数据包或者TCP数据连接的状态进行匹配。当有多个条件存在时,它们一起发挥作用,来达到只针对某部分数据进行修
改的目的。常见的匹配参数如下。

  • 流入、流出的网络接口。
  • 来源、目的地址。
  • 协议类型。
  • 来源、目的端口。

匹配动作

一旦有数据匹配,就会执行相应的动作。动作类型既可以是标准的
预定义的几个动作,也可以是自定义的模块注册的动作,或者是一个新
的规则链,以便更好地组织一组动作。

路由

路由功能由IP层维护的一张路由表来实现。当主机收到数据报文 时,它用此表来决策接下来应该做什么操作。当从网络侧接收到数据报 文时,IP层首先会检查报文的IP地址是否与主机自身的地址相同。如果 数据报文中的IP地址是主机自身的地址,那么报文将被发送到传输层相 应的协议中。如果报文中的IP地址不是主机自身的地址,并且主机配置 了路由功能,那么报文将被转发,否则,报文将被丢弃。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nNjTiDs2-1650447830848)(evernotecid://A1E553FF-ED0D-4E10-BFBE-5381F2C17039/appyinxiangcom/10992066/ENResource/p640)]

  1. 目的IP地址:此字段表示目标的IP地址。这个IP地址可以是某 主机的地址,也可以是一个网络地址。如果这个条目包含的是一个主机 地址,那么它的主机ID将被标记为非零;如果这个条目包含的是一个网 络地址,那么它的主机ID将被标记为零。
  2. 下一个路由器的IP地址:这里采用“下一个”的说法,是因为 下一个路由器并不总是最终的目的路由器,它很可能是一个中间路由 器。条目给出的下一个路由器的地址用来转发在相应接口接收到的IP数 据报文。
  3. 标志:这个字段提供了另一组重要信息,例如,目的IP地址 是一个主机地址还是一个网络地址。此外,从标志中可以得知下一个路 由器是一个真实路由器还是一个直接相连的接口。
  4. 网络接口规范:为一些数据报文的网络接口规范,该规范将 与报文一起被转发。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值