当前位置: 首页 > news >正文

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

相关文章:

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

一、基础知识 1.tap与tun ​ tap与tun都是操作系统&#xff08;Linux&#xff09;内核中的虚拟网络设备&#xff0c;等同于一个以太网设备&#xff0c;可以收发数据报文包。 ​ tap与tun的定义相同&#xff0c;两者仅仅是通过一个Flag来区分。但二者所承担的功能差别较大&am…...

SpringBoot已经禁掉了循环依赖!

还在问循环依赖嘛&#xff1f;SpringBoot已经禁掉了循环依赖&#xff01; 首发2023-12-18 11:26yuan人生 如果现在面试时还有人问你循环依赖&#xff0c;你就这样怼他&#xff1a;循环依赖是一种代码质量低下的表现&#xff0c;springboot2.6之后的版本已经默认禁用了。 Spr…...

【.NET Core】反射(Reflection)详解(一)

【.NET Core】反射&#xff08;Reflection&#xff09;详解&#xff08;一&#xff09; 文章目录 【.NET Core】反射&#xff08;Reflection&#xff09;详解&#xff08;一&#xff09;一、什么是反射二、Assembly类2.1 LoadFile2.2 Load2.3 LoadFrom(String)2.4 GetName()2.5…...

jenkins入门

文章目录 前言一、 jenkins的安装二、新建简单任务总结 前言 本篇文章是 jenkins 的入门级别案例&#xff0c;包括安装、基础概念介绍、新建简单任务 一、 jenkins的安装 下载 jenkins https://www.jenkins.io/download/ 当前案例下载的是 2.426.2 LTS 版本 下载安装jdk11 …...

HarmonyOS --- 首页(新新新手版,高手误入)

一、前言 每一个App都应该有一个首页&#xff0c;在Android中一般由MainActivity Navigation Fragment * N &#xff08;随便你怎么组合&#xff0c;用别的也一样&#xff09;&#xff0c;鸿蒙呢&#xff1f;瞅瞅吧。阿弥陀佛&#xff0c;苦逼Android学完Java学Dart、学完Da…...

springboot升级到3.2导致mybatis-plus启动报错

在springboot升级到3.2时&#xff0c;服务启动报错 java.lang.IllegalArgumentException: Invalid value type for attribute ‘factoryBeanObjectType’: java.lang.String&#xff1a; java.lang.IllegalArgumentException: Invalid value type for attribute factoryBeanOb…...

浏览器原理篇—渲染原理

目录导航 为什么要学习浏览器的渲染原理浏览器的渲染流程浏览器的渲染阻塞浏览器的渲染优化 为什么要学习浏览器的渲染原理&#xff1f; 知识深度挖掘&#xff1a; 帮助更好地理解前端性能优化。从而对实现效果进行针对性优化。如&#xff1a;**回流和重绘 **渲染机制。帮助…...

idea安装

mac安装路径 /Users/xxx/Library/Application Support/JetBrains/IntelliJIdeaxxx版本 将路径内文件直接复制到新版本即可, 注意如果为破解版idea.vmoptions配置中的内容是否添加或删除 maven配置如果使用idea, 需要在应用程序IntelliJ IDEA.app中显示包内容, /Applications/I…...

用Flask搭建简单的web模型部署服务

目录结构如下&#xff1a; 分类模型web部署 classification.py import os import cv2 import numpy as np import onnxruntime from flask import Flask, render_template, request, jsonifyapp Flask(__name__)onnx_session onnxruntime.InferenceSession("mobilen…...

PCL 点云匹配 3 之 (非线性迭代点云匹配)lM-ICP

一、IM迭代法 PCL IterativeClosestPointNonLinear 非线性L-M迭代法-CSDN博客 Matlab 非线性迭代法&#xff08;3&#xff09;阻尼牛顿法 L-M-CSDN博客 MATLAB实现最小二乘法_matlab最小二乘法-CSDN博客...

【C语言】SCU安全项目2-BufBomb

目录 关键代码解读&#xff1a; getxs() getbuf() test() 核心思路 具体操作1 具体操作2 前段时间忙于强网杯、英语4级和一些其他支线&#xff0c;有点摸不清头绪了&#xff0c;特别是qwb只有一个输出&#xff0c;太过坐牢&#xff0c;决定这个安全项目做完后就继续投身…...

C++第一讲之初入C++

注&#xff1a;本文是对于学完C语言再学C同学的讲解&#xff0c;主要补充C与C语言不同之处&#xff0c;如果你没学过C语言&#xff0c;不建议观看本文。 一.C简介 我们都知道C语言是过程性语言&#xff08;强调的是实现过程&#xff09;&#xff0c;即对计算机语言要处理的两…...

如何实现公网访问本地内网搭建的WBO白板远程协作办公【内网穿透】

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 前言1. 部署WBO白板2. 本地访问WBO白板3. Linux 安装cp…...

js知识点1:防抖节流

js知识点1&#xff1a;防抖节流 防抖节流 防抖节流&#xff0c;本质上是优化高频率执行代码的一种手段 定义&#xff1a; 防抖: n 秒后再执行该事件&#xff0c;若在 n 秒内被重复触发&#xff0c;则重新计时 节流: n 秒内只运行一次&#xff0c;若在 n 秒内重复触发&#xff0…...

虚拟机下Ubuntu上网设置

文章目录 一、虚拟机上网的两种方式1.1 NAT模式&#xff08;Network Address Translation&#xff09;1.2 桥接模式&#xff08;Bridge Mode&#xff09;1.3 简介 二、实际配置2.1 NAT模式配置2.2 桥接模式配置 之前跟着博客配了好几个也没用&#xff0c;后来自己慢慢模式实践测…...

Unity3d C#利用Editor编辑器拓展实现配置UI背景样式一键设置UI背景样式功能(含源码)

前言 在开发UI滚动列表的时候&#xff0c;经常会有每项的背景图不统一的情况&#xff0c;会间隔重复的情况居多。这种情况下&#xff0c;手动去设置间隔一行的背景图或者颜色是比较麻烦的。在此背景下&#xff0c;笔者尝试写个小工具&#xff0c;在搭建UI时配置一下循环背景的…...

【微服务】服务间调用

当我们的应用从一个大单体拆分成多个微服务之后,服务间调用有多少种方式?服务间调用如果出现超时,如果避免雪崩,即如何做限流熔断机制,原理是什么? 服务间调用方式 OpenFeign 使用Feign进行服务间调用,我们会在启动类加@EnableFeignClients启用。 package org.sprin…...

一句话分清C/C++声明和定义

定义告诉编译器在在哪个位置存储变量&#xff0c;声明没有 声明&#xff1a;告诉编译器&#xff0c;变量类型和名字 定义&#xff1a;告诉编译器变量存储的位置。 举例子 int i; // 这是声明定义。声明&#xff1a;告诉编译器变量类型int,变量名字i&#xff0c; // 定义&…...

《哥德尔证明》阅读笔记——初等命题逻辑的一致性证明过程

前言 前两节主要阐述了公理系统的发展历史&#xff0c;一致性问题的提出&#xff0c;以及希尔伯特的洞见&#xff0c;本节将给出哥德尔证明所需的最后一次具体背景阐述&#xff0c;包含两个问题&#xff1a;一是罗素所著的《数学原理》是为何而写&#xff1f;二是从数学原理中…...

迪文屏开发保姆级教程—弹出键盘录入ASCII字符

本篇文章主要介绍了在DGBUS平台上使用文本录入键盘录入ASCII字符&#xff0c;数字和字母的教程。 文本录入键盘支持录入ASCII字符&#xff0c;数字和字母。 官方开发指南PDF&#xff1a;&#xff08;不方便下载的私聊我发给你&#xff09; https://download.csdn.net/download…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...