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

一、基础知识

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的消耗,提高处理性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/236866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos磁盘扩容

[rootlocalhost ~]# fdisk -l磁盘 /dev/sda&#xff1a;429.5 GB, 429496729600 字节&#xff0c;838860800 个扇区 Units 扇区 of 1 * 512 512 bytes 扇区大小(逻辑/物理)&#xff1a;512 字节 / 4096 字节 I/O 大小(最小/最佳)&#xff1a;4096 字节 / 4096 字节 磁盘标签类…

浅析 fuse kernel mmap write 过程及性能问题

前言 最近在项目里面用到了fuse文件系统&#xff0c;在使用过程中遇到了一个内核在做mmap write的一个bug&#xff0c;目前并没有从根本上解决这个bug&#xff0c;而是通过修改fuse kernel module的一些参数&#xff0c;绕开了这个bug。这里记录一下这个问题&#xff0c;并顺便…

信息收集 - 网站敏感信息

CMS指纹信息: CMS (内容管理系统)又称为整站系统或文章系统,用于网站内容管理。用户只需要下载对应的CMS软件包,就能部署搭建,并直接利用CMS。但是各种CMS都具有其独特的结构命名规则和特定的文件内容,因此可以利用这些内容来获取CMS站点的具体软件CMS与版本。通过识别CMS…

手把手教你在windows上安装Portainer

前言 大家好&#xff0c;我是潇潇雨声。在之前的文章中&#xff0c;我们探讨了在 Windows 上安装 Docker 的方法。今天&#xff0c;我将简要介绍一个开源的轻量级容器管理工具——Portainer&#xff0c;它类似于 navicat。Portainer 是一个与 navicat 类似的工具&#xff0c;但…

facebook广告怎么效果好

要提高Facebook广告的效果&#xff0c;可以尝试以下策略&#xff1a; 明确广告目标&#xff1a;在制定广告计划之前&#xff0c;需要明确广告的目标。这可能包括增加网站流量、提高品牌知名度、推广新产品或提高现有产品的销售量。明确目标后&#xff0c;可以制定相应的广告策…

Amazon Toolkit — CodeWhisperer 使用

tFragment--> 官网&#xff1a;https://aws.amazon.com/cn/codewhisperer/?trkcndc-detail 最近学习了亚马逊云科技的 代码工具&#xff0c;感慨颇多。下面是安装 和使用的分享。 CodeWhisperer&#xff0c;亚马逊推出的实时 AI 编程助手&#xff0c;是一项基于机器学习…

前端八股文(vue篇)

一.vue中的key的作用 key的作用主要是为了高效的更新虚拟dom。另外vue中在使用相同标签名元素的过渡切换时&#xff0c;也会使用到key属性&#xff0c;其目的也是为了让vue可以区分它们&#xff0c;否则vue只会替换内部属性而不会触发过渡效果。 二.接口请求一般放在哪个生命周…

详解数据科学自动化与机器学习自动化

过去十年里&#xff0c;人工智能&#xff08;AI&#xff09;构建自动化发展迅速并取得了多项成就。在关于AI未来的讨论中&#xff0c;您可能会经常听到人们交替使用数据科学自动化与机器学习自动化这两个术语。事实上&#xff0c;这些术语有着不同的定义&#xff1a;如今的自动…

【QT Visual Studio环境配置】error MSB8020: 无法找到 v141/v142 的生成工具(完整版)

首先要了解V**平台工具集根据你安装的Visual Studio版本不同而有所区别&#xff0c;知道这个就容易解决问题了&#xff0c;确定你安装的那个版本&#xff0c;需要使用哪个工具集。 v143–>VS2022v142–>VS2019v141–>VS2017v140–>VS2015v120–>VS2013 一、解决…

[kubernetes]基于版本v1.28.5+containerd + helm 搭建集群

0 环境准备 节点数量: 3 台虚拟机 centos7硬件配置: 2G或更多的RAM&#xff0c;2个CPU或更多的CPU&#xff0c;硬盘至少30G 以上网络要求: 多个节点之间网络互通&#xff0c;每个节点能访问外网 1 集群规划 k8s-node1&#xff1a;10.0.0.32k8s-node2&#xff1a;10.0.3.231k…

TypeScript 中的 interface 和 type 有什么区别?应该如何选择?

背景 TypeScript中的 interface 和 type 都是声明自定义类型的方式&#xff0c;但它们有一些区别&#xff0c;适用于不同的使用场景。 两者使用案例 interface interface 主要用于描述对象的形状或者类的结构&#xff0c;这是它最经常的应用场景。 interface使用示例&…

机器学习之线性回归(Linear Regression)附代码

概念 线性回归(Linear Regression)是机器学习中的一种基本的监督学习算法,用于建立输入变量(特征)与输出变量(目标)之间的线性关系。它假设输入变量与输出变量之间存在线性关系,并试图找到最佳拟合线来描述这种关系。 在简单线性回归中,只涉及两个变量:一个是自变量…

MySQL:通过官方mysql server,搭建绿色版mysql服务器(Windows)

1. 官网下载mysql server 下载mysql server的zip文件&#xff0c;地址&#xff1a; https://downloads.mysql.com/archives/community/ 解压后 2. 初始化数据库 运行cmd&#xff0c; 进入bin目录&#xff0c;运行 mysqld --initialize-insecureinitialize-insecure说明如…

python面向对象反射

就是通过字符串的形式操作对象相关属性 反射基本语法 from django.test import TestCase# Create your tests here. class Students:def __init__(self, name, gender):self.name nameself.gender genderdef play(self, game, novel):print(game, novel)s Students(lyz, …

Jenkins 插件下载速度慢安装失败?这篇文章可能解决你头等难题!

Jenkins部署完毕&#xff0c;如果不安装插件的话&#xff0c;那它就是一个光杆司令&#xff0c;啥事也做不了&#xff01; 所以首先要登陆管理员账号然后点击系统管理再点击右边的插件管理安装CI/CD必要插件。 但是问题来了&#xff0c;jenkins下载插件速度非常慢&#xff0c…

Educational Codeforces Round 160 (Div. 2) A~E

A.Rating Increase&#xff08;思维&#xff09; 题意&#xff1a; 给出一个仅包含数字的字符串 s s s&#xff0c;要求将该字符串按以下要求分成左右两部分 a , b a,b a,b&#xff1a; 两个数字均不包含前导 0 0 0 两个数字均大于 0 0 0 b > a b > a b>a 如果…

算法基础之快速幂

快速幂 核心思想&#xff1a;logk的复杂度求出ak mod p 将k拆成若干个2的n之和 (二进制) #include<iostream>#include<algorithm>using namespace std;typedef long long LL;LL qmi(int a,int k,int p){LL res 1 % p;while(k) //k转为二进制 还有正数 就进行…

U-MixFormer:用于高效语义分割的类unet结构的混合注意力Transformer

论文&#xff1a; 代码&#xff1a;GitHub - RecklessRonan/MuSE 感觉这篇比较优雅无痛涨点欸.....最近要期末了没时间看文章和做实验了&#xff08;摊 摘要 语义分割在Transformer架构的适应下取得了显著的进步。与Transformer的进步并行的是基于CNN的U-Net在高质量医学影…

QT基础介绍

QT介绍 QT 是跨平台的c开发库&#xff0c;主要用来开发图形用户界面&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;程序&#xff0c;当然也可以开发不带界面的命令行&#xff08;command user interface&#xff0c;CUI&#xff09;程序。 Qt中文官网&…

互操作性(Interoperability)如何影响着机器学习的发展?

互操作性&#xff08;Interoperability&#xff09;&#xff0c;也称为互用性&#xff0c;即两个系统之间有效沟通的能力&#xff0c;是机器学习未来发展中的关键因素。对于银行业、医疗和其他生活服务行业&#xff0c;我们期望那些用于信息交换的平台可以在我们需要时无缝沟通…