本文最后更新于:2020年11月14日 下午

网络传输节点:

当一个数据包进入一台设备的时候,会经历一下5个节点:

1)prerouting:路由判断前;2)input:IP与本地匹配,数据包传入传输层;3)forward:IP不匹配,转发数据包;4)output:传输层(上层)处理后返回处理结果;5)postrouting:路由判断后的节点(forward,output节点之后)
Netfilter:在上述节点插入hook函数,干预数据包传输(接收、丢弃、发送给用户态进程处理);linux内核模块ip_tables就是依赖该框架实现;
iptables:客户端程序,使用命令行干预内核ip_tables规则;具备表和链的概念;
iptables表:raw-mangle-nat-filter
filter表:处理过滤功能,主要包含三个链:1)input链:过滤所有目标地址是本机的数据包;2)forward链:过滤所有经过本机的数据包;3)output链:过滤所有本机产生的数据包;
nat表:主要是处理网络地址(源、目)转换,包含三个链:1)prerouting链:在数据包到达防火墙时改变目标地址;2)output链:改变本机产生的数据包的目标地址;3)postrouting链:在数据包离开防火墙时更改数据包源地址;
mangle表:主要是修改数据包,包含prerouting链、input链、forward链、output链、postrouting链;

QoS(服务质量)控制:

Linux可通过TC控制网络的QoS,主要通过队列方式

#无类别排队规则:

1.1、pfifo_fast技术,分为三个队列(Band),具备优先级,根据网络包里的TOS,判断进入的队列,处于优先级高的队列优先发送;
1.2、随机公平队列:建立很多的 FIFO 的队列,TCP Session 会计算 hash 值,通过 hash 值分配到某个队列。在队列的另一端,网络包会通过轮询策略从各个队列中取出发送。这样不会有一个 Session 占据所有的流量
1.3、令牌桶规则(TBF):所有的网络包排成队列,拿到令牌才能发送。令牌根据设定的速度生成,即便队列很长,也是按照一定的速度进行发送的,令牌也不无限生成,令牌桶放满即不再生成,防止令牌大量积累,出现流量激增。

基于类别的队列规则:

2.1、分层令牌桶规则(HTB):TC 可以为某个网卡 eth0 创建一个 HTB 的队列规则,然后对该root创建分支,每个分支有固定的两个发送速度;同一个 root 下的子类(分支)可以相互借流量,不浪费带宽;
云中网络 Openvswitch 中,主要使用的是分层令牌桶规则(HTB),将总的带宽在一棵树上按照配置的比例进行分配,并且在一个分支不用的时候,可以借给另外的分支,从而增强带宽利用率

云中的网络隔离:

Underlay网络:底层的物理网络设备组成的网络;
Overlay网络:基于物理网络的虚拟化网络实现;

Overlay技术一:GRE( Generic Routing Encapsulation):

将IP包封装在GRE包里,外部再加上IP头,形成一个虚拟的点对点的连接隧道,由具备路由功能的设备如路由器进行封装、解封数据包;
GRE缺点:1)GRE是点对点隧道,每个虚拟网络间需要建立一个隧道,隧道数目随网络数呈指数增长;2)GRE不支持组播,GRE会将广播帧广播到所有与该节点有隧道连接的节点;3)很多防火墙和三层网络设备无法解析GRE;

Overlay技术二:VXLAN:

VXLAN封装的是二层数据帧,在二层外封装一个VXLAN头,包含24位VXLAN ID,在VXLAN头部外还封装了UDP、IP、MAC头部;
VTEP(VXLAN Tunnel Endpoint):实现封装和解封VXLAN数据包的节点称为VTEP;VTEP通过组播定位目标机器,不是点对点;
OpenvSwitch 支持三类隧道:GRE、VXLAN、IPsec_GRE。在使用 OpenvSwitch 的时候,虚拟交换机就相当于 GRE 和 VXLAN 封装的端点。