虚拟局域网(VLAN)
关键词:veth、vlan、bridge、iptables、nat、tcpdump、icmp、cidr、arp、路由表、计算机网络协议栈
前言
在过去的几十年里,互联网发展得非常快。许多新兴技术迅速崛起,也有不少曾经的主流技术被淘汰。然而,有些技术因为其基础性和核心地位,一直在不断进步中保持着重要作用。
计算机网络就是其中之一。虽然网络架构和传输协议在不断更新,但其核心概念和原理一直都在发挥着关键作用,支撑着全球的信息交换。在这些技术中,网卡作为计算机连接网络的桥梁,起到了至关重要的作用。
网卡是什么?
网卡属于计算机硬件的一部分,是实现计算机数据传输的关键部件,最常见的有无线网卡和有线网卡,通常是直接或间接集成在计算机主板中,
它可以将计算机产生的数据发送到另一个网络,也可以将另一个网络的数据传递给我们的主机。
什么是虚拟网卡?
虚拟网卡是一种软件实现的网络接口,模拟了物理网卡的功能,使操作系统和应用程序可以通过它发送和接收网络流量。虚拟网卡在虚拟化、容器化的网络环境中发挥着重要的作用。
VETH——创建虚拟网卡及多个内部网络
环境:腾讯云轻量级应用服务器、CentOS 7操作系统
结构图

Shell
# 创建三个网络命名空间用于隔离内部网络(查看命名空间:ip netns)
> ip netns add n1
> ip netns add n2
> ip netns add n3
# 创建三对虚拟网卡(查看网卡:ip link)
> ip link add veth0 type veth peer name veth1
> ip link add veth2 type veth peer name veth3
> ip link add veth4 type veth peer name veth5
# 为veth0、veth2、veth4分配ip地址
> ip addr add 192.168.0.1/24 dev veth0
> ip addr add 192.168.100.1/16 dev veth2
> ip addr add 192.167.0.1/16 dev veth4
# 将veth1、veth3、veth5分别移动到网络命名空间n1、n2、n3中
> ip link set veth1 netns n1
> ip link set veth3 netns n2
> ip link set veth5 netns n3
# 为veth1、veth3、veth5分配ip地址(ip netns exec前缀用来指定具体的网络命名空间)
> ip netns exec n1 ip addr add 192.168.0.2/24 dev veth1
> ip netns exec n2 ip addr add 192.168.100.2/16 dev veth3
> ip netns exec n3 ip addr add 192.167.0.2/16 dev veth5
# 启动网卡
> ip link set veth0 up
> ip netns exec n1 ip link set veth1 up
> ip link set veth2 up
> ip netns exec n2 ip link set veth3 up
> ip link set veth4 up
> ip netns exec n3 ip link set veth5 up# 网络连通测试(仅用veth0、veth1示例,其他两对同理)
> ping -I veth0 192.168.0.2
> ip netns exec n1 ping 192.168.0.1
小结
网络命名空间(netns)用来隔离三个虚拟以太网,成对出现的虚拟网卡(veth)在这里起到了类似于物理网线的作用。
VLAN——使用虚拟网桥连接多个局域网
结构图

shell
# 创建虚拟网桥
> ip link add br-mybridge type bridge
# 将 veth0、veth2、veth4桥接到网桥中
> ip link set veth0 master br-mybridge
> ip link set veth2 master br-mybridge
> ip link set veth4 master br-mybridge
# 启动网桥
> ip link set br-mybridge up
# 修改主机路由表(删除旧路由+添加新路由)
> ip route del 192.168.0.0/24 dev veth0
> ip route del 192.168.0.0/16 dev veth2
> ip route del 192.167.0.0/16 dev veth4
> ip route add 192.168.0.0/16 dev br-mybridge
> ip route add 192.167.0.0/16 dev br-mybridge
# 添加命名空间内部的路由
> ip netns exec n1 ip route del 192.168.0.0/24 dev veth1
> ip netns exec n1 ip route add 192.168.0.0/16 dev veth1
> ip netns exec n1 ip route add 192.167.0.0/16 dev veth1
> ip netns exec n2 ip route add 192.167.0.0/16 dev veth3
> ip netns exec n3 ip route add 192.168.0.0/16 dev veth5
# 删除veth0、veth2、veth4的ip地址
> ip addr del 192.168.0.1/24 dev veth0
> ip addr del 192.168.100.1/16 dev veth2
> ip addr del 192.167.0.1/16 dev veth4
# 网络连通测试(仅用n1网络作为示例,其他两个网络同理)
> ip netns exec n1 ping 192.168.100.2
> ip netns exec n1 ping 192.167.0.2
小结
虚拟网桥类似于物理交换机的作用,通过将多个虚拟网卡串联在一起实现内部通信功能。
深入思考:为什么网桥不需要设置ip地址?
因为网桥和物理交换机一样是工作在数据链路层基于mac地址转发帧(frame)的一种设备。如果该设备仅用来做转发功能,那么ip地址对其来说是可选的。
深入思考:为什么桥接后不修改路由表时,内部网络无法ping通原主机?
猜测:设置了桥接模式后,veth0/veth2/veth4的作用就仅仅是转发数据链路层的帧(frame)。此时ping命令产生的arp请求会转发给网桥br-mybridge进行处理,或许是网桥进行arp广播的时候veth0/veth2/veth4没有处理arp请求,所以导致无法通信。
NAT——使用iptables打通vlan和互联网
结构图

shell
# 打开内核的ip转发功能:将net.ipv4.ip_forward=0 变更为 net.ipv4.ip_forward=1
> vim /etc/sysctl.conf
# 检查ip转发功能是否开启
> sysctl -p
# 设置网关ip地址
> ip addr add 192.168.0.1/16 dev br-mybridge
# 设置子网的网关地址
> ip netns exec n1 ip route add default via 192.168.0.1 dev veth1
> ip netns exec n2 ip route add default via 192.168.0.1 dev veth3
> ip netns exec n3 ip route add default via 192.168.0.1 dev veth4
# (可选)关闭firewalld防火墙,因为firewalld防火墙是基于iptables的,所以会有很多规则可能会影响测试结果。生产环境切勿贸然尝试
> systemctl stop firewalld
# 添加br-mybridge与eth0的转发规则
> iptables -A FORWARD -i br-mybridge -o eth0 -j ACCEPT
> iptables -A FORWARD -i eth0 -o br-mybridge -j ACCEPT
# 添加nat规则
> iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 互联网连通测试(仅用n1网络作为示例,其他两个网络同理)
> ip netns exec n1 curl baidu.com
> ip netns exec n1 ping 192.167.0.2
小结
通过iptables实现了虚拟网桥的路由功能,此时这里的虚拟网桥(br-mybridge)已经不仅仅只是做数据帧转发工作,同时还将基于ip协议转发网络层的数据包。所以这里br-mybridge的作用更相近于路由器。
总结
本文通过veth讲解了虚拟局域网的通信方式,并通过虚拟网桥、iptables、nat等技术模拟了生活中比较常见的一些网络结构。
相关文章:
虚拟局域网(VLAN)
关键词:veth、vlan、bridge、iptables、nat、tcpdump、icmp、cidr、arp、路由表、计算机网络协议栈 前言 在过去的几十年里,互联网发展得非常快。许多新兴技术迅速崛起,也有不少曾经的主流技术被淘汰。然而,有些技术因为其基础性…...
内网穿透--Frp-简易型(速成)-上线
免责声明:本文仅做技术交流与学习... 目录 frp项目介绍: 一图通解: 编辑 1-下载frp 2-服务端(server)开启frp口 3-kali客户端(client)连接frp服务器 4-kali生成马子 5-kali监听 6-马子执行-->成功上线 frp项目介绍: GitHub - fatedier/frp: A fast reverse proxy…...
Python库之Scrapy的简介、安装、使用方法详细攻略
Python库之Scrapy的简介、安装、使用方法详细攻略 简介 Scrapy是一个快速的、高层次的web抓取和web抓取框架,用于抓取网站数据并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、信息处理或存储历史数据,以及各种其他用途。 …...
k8s配置pods滚动发布
背景 采用微服务架构部署的应用,部署方式都要用到容器化部署k8s容器编排,最近我在公司负载的系统也是用的上述架构部署,但是随着系统的运行,用户提的需求就会越多,每次更新的话都要停机发布,最用户侧来说就…...
C++vector的简单模拟实现
文章目录 目录 文章目录 前言 一、vector使用时的注意事项 1.typedef的类型 2.vector不是string 3.vector 4.算法sort 二、vector的实现 1.通过源码进行猜测vector的结构 2.初步vector的构建 2.1 成员变量 2.2成员函数 2.2.1尾插和扩容 2.2.2operator[] 2.2.3 迭代器 2…...
AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(七):快启
前言: 汽车仪表是人们了解汽车状况的窗口,而仪表中的大部分信息都是以指示灯形式显示给驾驶者。仪表指示灯图案都较为抽象,对驾驶不熟悉的人在理解仪表指示灯含义方面存在不同程度的困难,尤其对于驾驶新手,如果对指示灯的含义不求甚解,有可能影响驾驶的安全性。即使是对…...
基于springboot+vue的招聘信息管理系统
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
使用STM32F103标准库实现自定义键盘
使用STM32F103标准库实现自定义键盘 在嵌入式系统中,自定义键盘的实现是一个经典的项目,能够帮助我们深入理解GPIO配置、按键扫描和中断处理等知识。本文将详细介绍如何使用STM32F103标准库来实现一个简单的自定义键盘。 1. 准备工作 1.1 硬件准备 S…...
面试八股之JVM篇3.5——垃圾回收——G1垃圾回收器
🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 🏃人生之义,在于追求,不在成败,勤通…...
解决LabVIEW通过OPC Server读取PLC地址时的错误180121602
在使用LabVIEW通过OPC Server读取PLC地址时,若遇到错误代码180121602,建议检查网络连接、OPC Server和PLC配置、用户权限及LabVIEW设置。确保网络畅通,正确配置OPC变量,取消缓冲设置以实时读取数据,并使用诊断工具验证…...
npm,yarn,cnpm,tyarn,pnpm 安使用装配置镜像
npm 安装 安装node后就可以使用了 官方默认地址 npm config set registry https://registry.npmjs.org 镜像 npm config set registry https://registry.npm.taobao.org npm config set registry http://registry.npmmirror.org全局安装依赖 npm install -g <包名&g…...
使用python将一段文本写入一个txt文件中且先格式化文件名
有一段文本内容,有“标题”和“内容”组成。 任务:要将这段文本,存放到一个txt文件中,文件名为当天的日期加上“标题”内容。因为“标题”内可能有/<>之类的,还需要格式化一下。 已经将上述功能都写成了函数&a…...
前端 CSS 经典:元素倒影
前言:好看的元素倒影,可以通过-webkit-box-reflect 实现。但有兼容问题,必须是 webkit 内核的浏览器,不然没效果。但是好看啊。 效果图: 代码实现: <!DOCTYPE html> <html lang"en"&g…...
ROS学习记录:用C++实现IMU航向锁定
前言 获取IMU数据的C节点 在了解了如何获取到IMU的姿态信息(链接在上面)后,接下来尝试实现让一个节点在订阅IMU数据的时候,还能发布运动控制指令,使机器人能对姿态变化做出反应,达到一个航向锁定的效果。 …...
设计模式-策略模式-使用
设计模式-策略模式-CSDN博客 系统中有很多类,它们之间的区别仅在于它们的行为。策略模式可以定义一系列的算法,并将它们一个个封装起来,使它们可以相互替换。这样,算法就可以独立于使用它的客户而变化。需要使用算法的不同变体。…...
WebSocket——相关介绍以及后端配置
一、WebSocket介绍: WebSocket是一种在单个TCP连接上进行全双工通信的协议,旨在改进客户端和服务器之间的实时通信。以下是关于WebSocket的详细介绍: 1、定义与标准 WebSocket是独立的、创建在TCP上的协议,通过HTTP/1.1协议的10…...
单片机设计注意事项
1.电源线可以30mil走线,信号线可以6mil走线 2.LDO推荐 SGM2019-3.3,RT9013,RT9193,1117-3.3V。 3.单片机VCC要充分滤波后再供电,可以接0.1uf的电容 4.晶振附件不要走其他元件,且放置完单片机后就放置晶振,晶振靠近X1,X2。...
Ubuntu 如何根据NVIDIA显卡型号确定对应的显卡驱动版本并安装
目录 一、查询推荐安装的驱动版本 二、安装推荐版本的驱动 1. 通过终端安装,只安装 nvidia 驱动(亲测可用!) 2. 通过 software & Updates 安装,安装 nvidia 驱动。 三、查询能安装的最新的显卡驱动版本 1. 方…...
如何选择一款安全高效的数据自动同步工具?
随着科技的不断发展,企业处理的数据量愈发庞大。数字化浪潮的涌现使得数据在业务活动和决策中的角色变得日益重要,然而这些数据往往分布在不同的位置,需要进行同步和分类,以便更有效地利用。以下是一些常见的数据自动同步场景&…...
【linux】docker下nextcloud安装人脸识别插件
一、插件源码地址: GitCode - 开发者的代码家园 二、插件官网地址: Releases - Face Recognition - Apps - App Store - Nextcloud 三、插件安装教程: 1、查看本地nextcloud版本号 http://ipAddress:8080/settings/admin/overview 2、找…...
Hindley-Milner类型签名详解:mostly-adequate-guide-chinese的函数式编程类型系统
Hindley-Milner类型签名详解:mostly-adequate-guide-chinese的函数式编程类型系统 【免费下载链接】mostly-adequate-guide-chinese 函数式编程指南中文版 项目地址: https://gitcode.com/gh_mirrors/mo/mostly-adequate-guide-chinese 在函数式编程中&#…...
OpenClaw截图分析功能:Qwen3.5-9B多模态界面理解案例
OpenClaw截图分析功能:Qwen3.5-9B多模态界面理解案例 1. 为什么需要截图分析功能 在日常工作中,我经常遇到需要分析软件界面、排查异常或生成报告的场景。传统方式要么依赖人工截图标注,要么需要开发专门的自动化脚本,效率低下且…...
800V高压机柜来袭,两相液冷为何成了“刚需“?
800V高压机柜来袭,两相液冷为何成了"刚需"?当一个机柜的功率突破120kW,传统散热方案正在触及物理天花板。2025年GTC大会上,英伟达抛出了一颗"深水炸弹":从2027年起,数据中心电力基础设…...
广州邮科选型指南:挑选可调电源必须关注的四个核心参数
在电子工程师的工作台上,有一种设备兼具了灵活性与智能保护——它就是可调稳压恒流开关电源。这种电源不仅是供电工具,更像是懂得自我保护的"智能能源管家"。它如何同时实现稳压与恒流?传统电源往往只能固定输出,而这类…...
Docker 容器中运行 AI CLI 工具:用户隔离与持久化卷实战指南撂
环境安装 pip install keystone-engine capstone unicorn 这3个工具用法极其简单,下面通过示例来演示其用法。 Keystone 示例 from keystone import * CODE b"INC ECX; ADD EDX, ECX" try:ks Ks(KS_ARCH_X86, KS_MODE_64)encoding, count ks.asm(CODE)…...
开源串口示波器SerialPlot在嵌入式调试中的应用
1. 项目概述今天想和大家分享一个我最近在嵌入式开发中频繁使用的神器——SerialPlot,这是一款完全开源的串口示波器工具。作为一名长期奋战在硬件调试一线的工程师,我深知实时可视化传感器数据的重要性。传统的调试方式要么依赖昂贵的专业设备ÿ…...
Unity发布京东小游戏圃
从 UI 工程师到 AI 应用架构者 13 年前,我的工作是让按钮在 IE6 上对齐; 13 年后,我用 fetch-event-source 订阅大模型的“思维流”,用 OCR 解锁图片中的文字——前端,正在成为 AI 产品的第一道体验防线。 最近&#x…...
别再只用CardView做卡片了!解锁Android Material Design中CardView的5个隐藏用法与实战技巧
解锁Android CardView的5个高阶玩法:从交互动画到性能调优 在Material Design的世界里,CardView早已超越了简单的阴影和圆角容器角色。当大多数开发者还在用基础属性构建静态卡片时,真正的高手已经在探索这些隐藏能力:如何让卡片像…...
HagiCode Desktop 混合分发架构解析:如何用 PP 加速大文件下载肛
一、Actor 模型:不是并发技巧,而是领域单元 Actor 模型的本质是: Actor 是独立运行的实体 Actor 之间只通过消息交互 Actor 内部状态不可被外部直接访问 Actor 自行决定如何处理收到的消息 Actor 模型真正解决的是: 如何在不共享状…...
API测试自动化:契约测试 vs 接口测试
在微服务架构主导的现代软件开发中,API已成为系统集成的核心纽带。测试从业者面临的核心挑战是如何高效验证服务间交互的可靠性。契约测试(Contract Testing)与接口测试(API Testing)作为两种主流方法,分别…...
