华为云Stack 8.X 流量模型分析(一)

发布时间:2023年12月20日

一、基础知识

1.tap与tun

? tap与tun都是操作系统(Linux)内核中的虚拟网络设备,等同于一个以太网设备,可以收发数据报文包。

? tap与tun的定义相同,两者仅仅是通过一个Flag来区分。但二者所承担的功能差别较大:tap位于网络OSI模型的二层,tun位于网络的三层。

? tap位于数据链路层,可以处理数据链路层的数据包,拥有 MAC 地址,可以与物理网卡做 bridge,支持 MAC 层广播,也可以给它设置 IP 地址。

? tun是一个网络层(IP)的点对点设备,它启用了IP层隧道功能。通过它可以处理来自网络层的数据包,也就是 IP 数据包。由于它只模拟到了 IP 层,所以它无法与物理网卡做 bridge,也没有 MAC 地址,但是可以通过三层交换的方式来与物理网卡相互通信。

2.Namespace

? Namespace提供了一种内核级别隔离系统资源的方法,通过将系统的全局资源放在不同的Namespace中,来实现资源隔离的目的。不同Namespace的程序,可以享有一份独立的系统资源。

目前Linux中提供了六类系统资源的隔离机制,分别是:

  • **Mount:**隔离文件系统挂载点
  • **UTS:**隔离主机名和域名信息
  • **IPC:**隔离进程间通信
  • **PID:**隔离进程的ID
  • **Network:**隔离网络资源
  • **User:**隔离用户和用户组的ID

3.veth pair

? veth pair是一对设备,用于连接两个虚拟以太端口。

? 使用veth pair可以实现两个Namespace的互通,当三个及以上Namespcae之间想要实现互通,由于veth par只有一对tap无法胜任,则需要用到Bridge/Switch。

4.Bridge

? 在Linux的语境里,Bridge(网桥)与Switch(交换机)是一个概念。

? Bridge是用纯软件实现的虚拟交换机,有着和物理交换机相同的功能,例如二层交换,MAC地址学习等。因此我们可以把tun/tap,veth pair等设备绑定到网桥上,就像是把设备连接到物理交换机上一样。

5.iptables

? iptables是一个运行在用户空间的命令行工具,通过iptables相关命令可以实现防火墙、NAT等安全防护功能,但需注意真正实现这些功能的是运行在内核空间的netfilter模块

iptables内置了三张表:filter、nat和mangle。分别对应了防火墙、NAT、流量整形三种功能。

6.Firewall

iptables中的Firewall(防火墙)概念,属于网络防火墙的概念,iptables中的防火墙的规则就是基于TCP/IP协议栈的规则,所以我们称之为网络防火墙。

这些规则有:

  1. in-interface(入网络接口名),数据包从哪个网络接口进入;
  2. out-interface(出网络接口名),数据包从哪个网络接口输出;
  3. protocol(协议类型),数据包的协议,如TCP、UDP和ICMP等;
  4. source(源地址(或子网)),数据包的源IP地址(或子网);
  5. destination(目标地址(或子网)),数据包的目标IP地址(或子网);
  6. sport(源端口号),数据包的源端口号;
  7. dport(目的端口号),数据包的目的端口号。

7.NAT

? NAT(Network Address Translation,网络地址转换),功能是将一个IP地址转换为另一个IP地址。发明NAT根本原因还是IP地址不够用的问题(另一种解决方法是IPv6)。大家使用NAT基本做的还是公网地址与私网地址的互相转换;如果一定要在公网地址之间互相转换,或者私网地址之间互相转换,技术上是支持的,只是这样的场景非常非常少。

NAT从实现技术角度来说,分为:静态NAT、动态NAT、端口多路复用三种方案。

7.1 静态NAT

? 私网IP地址与公网IP地址的转换规则是静态指定的,固定不变,比如10.10.10.1与192.168.10.1互相转换。

私网IP地址与公网IP地址的数量比是1∶1

7.2 动态NAT

? 动态NAT中私网IP与公网IP地址之间不是固定的转换关系,而是在IP报文处理过程中由NAT模块进行动态匹配。虽然,公网IP比私网IP地址少,但是,同时在线的私网IP需求小于等于公网IP数量,不然某些私网IP将得不到正确的转换,从而导致网络通信失败。

私网IP地址与公网IP地址的数量比是m∶n,一般m < n

7.3 端口多路复用

? 如果私网IP地址有多个,而公网IP地址只有一个,那么静态NAT与动态NAT都无法满足IP使用,就需要用到端口多路复用。多个私网IP映射到同一个公网IP,不同的私网IP利用端口号进行区分,这里的端口号指的是TCP/UDP端口号。所以端口复用又叫PAT(Port Address Translation)。

私网IP地址与公网IP地址的数量比是m∶1

7.4 SNAT/DNAT

SNAT(Source Network Address Translation,源地址转换)

? 内部地址要访问公网上的服务时(如Web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。

DNAT(Destination Network Address Translation,目的地址转换)

? 当内部需要提供对外服务时(如对外发布Web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。

8.mangle

mangle表主要用于修改数据包的ToS(Type of Service,服务类型)、TTL(Time to Live,生存周期)以及为数据包设置Mark标记,以实现QoS(Quality of Service,服务质量)调整以及策略路由等应用。

9.内核态、用户态、卸载态

? 主机采用不同的态模式,对网络而言内部流量略有不同,简单来说,linux内部空间分为内核空间和用户空间,内核态即为运行在内核空间的进程的状态,用户态即为运行在用户空间的状态。

? 内核态,用户态是操作系统的概,卸载态是网卡概念,网卡offload机制。简单说主要是指将原本在协议栈中进行的IP分片、TCP分段、重组、checksum校验等操作,转移到网卡硬件中进行,降低系统CPU的消耗,提高处理性能。

文章来源:https://blog.csdn.net/weixin_46706771/article/details/135090250
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。