命名空间——网络(net)

命名空间——网络(net)

一、网络命名空间:每个都是独立的“网络房间”

想象你的电脑是一栋大楼,每个网络命名空间就是大楼里的一个“独立房间”:

  • 每个房间里有自己的“网线接口”(网卡)、“门牌号”(IP 地址)、“导航地图”(路由表);
  • 房间之间的网络互不干扰:你在 A 房间插网线、设 IP,B 房间完全看不到;
  • 要让两个房间通信,必须用“特殊的线”(比如虚拟网线)连接它们。

二、一步步理解材料中的操作

1. 创建网络命名空间:建一个“新房间”

材料中用两种方式创建网络命名空间:

  • sudo unshare -n:创建一个临时的网络命名空间(退出后自动销毁);
  • sudo ip netns add mynet:创建一个“持久化”的网络命名空间(名字叫 mynet),即使里面没有进程运行也不会消失(相当于给房间挂了个牌子,不会被轻易拆掉)。

查看已有的命名空间:

sudo ip netns list  # 会显示刚才创建的 mynet
2. 进入命名空间操作:“走进房间”

要操作 mynet 这个“房间”里的网络,需要用 ip netns exec 命令“进入房间”:

sudo ip netns exec mynet [命令]  # 表示在 mynet 命名空间中执行某个命令

比如,查看 mynet 里的网卡:

sudo ip netns exec mynet ip link show

此时会看到一个叫 lo 的网卡(环回接口),这是每个网络命名空间默认自带的“内部回环接口”(相当于房间里的“内部电话”,用于进程自己跟自己通信)。

3. 启用环回接口:“接通内部电话”

默认情况下,lo 接口是关闭的(就像内部电话没插线),需要手动打开:

sudo ip netns exec mynet ip link set dev lo up

打开后,命名空间内的程序可以通过 127.0.0.1 访问自己(比如本地服务)。

4. 创建 veth 对:拉一根“虚拟网线”

现在 mynet 这个房间是完全孤立的,和主机(默认命名空间)没有连接。怎么让它们通信?需要一根“虚拟网线”——veth 对(虚拟以太网接口对)。

veth 对是一对“捆绑在一起的虚拟网卡”:就像一根网线的两端,一端插在主机(默认命名空间),另一端插在 mynet 房间,这样两边就能传数据了。

创建 veth 对:

sudo ip link add veth0 type veth peer name veth1
  • 这会创建两个虚拟网卡:veth0veth1,它们是“一对”——veth0 收到的数据会自动传给 veth1,反之亦然。
5. 连接命名空间:把网线“插进房间”

现在 veth0veth1 都在主机的默认命名空间里,我们需要把 veth1 移到 mynet 房间:

sudo ip link set veth1 netns mynet

此时:

  • 主机(默认命名空间)里只剩 veth0
  • mynet 房间里多了 veth1(相当于网线一端插进了房间)。
6. 配置 IP 地址:给“网线接口”分配门牌号

有了网线,还需要给两端的接口分配 IP 地址(门牌号)才能通信:

  • mynet 房间里的 veth1 分配 IP:172.2.0.1/24

    sudo ip netns exec mynet ip addr add 172.2.0.1/24 dev veth1
    sudo ip netns exec mynet ip link set dev veth1 up  # 启用这个接口
    
  • 给主机的 veth0 分配 IP:172.2.0.2/24

    sudo ip addr add 172.2.0.2/24 dev veth0
    sudo ip link set dev veth0 up  # 启用这个接口
    
7. 测试通信:两个“房间”能通话了

现在主机和 mynet 房间通过 veth 对连接,应该能互相 ping 通:

  • 主机 ping mynet 里的 veth1(IP:172.2.0.1):

    ping -c1 172.2.0.1  # 成功收到回复
    
  • mynet 房间 ping 主机的 veth0(IP:172.2.0.2):

    sudo ip netns exec mynet ping -c1 172.2.0.2  # 成功收到回复
    
8. 为什么访问不了互联网?

此时 mynet 房间只能和主机通信,但不能上互联网(比如 ping 百度)。原因是:
mynet 房间的“导航地图”(路由表)里,没有“如何走到互联网”的路线。

要解决这个问题,需要:

  1. 在主机上创建一个“网桥”(相当于路由器),连接主机的物理网卡(能上互联网)和 veth0
  2. mynet 房间里设置“默认路由”:告诉房间里的设备“上网请找主机的 veth0(172.2.0.2)”;
  3. 主机开启 NAT 转发(相当于路由器的“地址转换”功能),让 mynet 的流量能通过主机的网卡访问互联网。

三、总结:网络命名空间的核心

  • 每个网络命名空间是一个“独立的网络环境”,有自己的网卡、IP、路由;
  • veth 对是连接不同命名空间的“虚拟网线”,让隔离的网络能通信;
  • 容器(如 Docker)的网络隔离就是用网络命名空间实现的:每个容器一个独立的网络命名空间,通过 veth 对和主机/其他容器通信。

简单说,网络命名空间让进程“生活在不同的网络世界里”,彼此独立又能通过“虚拟设备”按需连接。

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

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

相关文章

一文读懂16英寸笔记本的实际尺寸与最佳应用场景

当您搜索"16寸笔记本电脑长宽"时,内心真正在问的是什么?是背包能否容纳?桌面空间是否足够?还是期待屏幕尺寸与便携性的完美平衡?这个看似简单的尺寸数字背后,凝结着计算机制造商对用户体验的深刻…

Android Studio中创建Git分支

做一些Android项目时,有时候想要做一些实验性的修改,这个实验可能需要很多步骤,所以不是一时半会能完成的,这就需要在实验的过程中不断修改代码,且要提交代码,方便回滚或比较差异,但是既然是实验…

内存可见性和伪共享问题

文章目录什么是内存可见性问题为什么会出现可见性问题解决可见性问题的方法1. 使用volatile关键字2. 使用synchronized3. 使用java.util.concurrent包下的原子类什么是伪共享问题CPU缓存行伪共享的危害解决伪共享的方法1. 缓存行填充2. 使用Contended注解(JDK 8&…

Spring MVC 九大组件源码深度剖析(三):ThemeResolver - 动态换肤的奥秘

文章目录一、主题机制的核心价值二、核心接口设计三、四大实现类源码解析1. FixedThemeResolver(固定主题策略)2. CookieThemeResolver(Cookie存储策略)3. SessionThemeResolver(Session存储策略)4. Abstra…

一、Docker本地安装

((这里引用知乎上大佬的说法:https://www.zhihu.com/question/48174633 服务器虚拟化解决的核心问题是资源调配,而容器解决的核心问题是应用开发、测试和部署。 一、参考帖子 Ubuntu 的 |Docker 文档 【docker】ubuntu完全卸载docker及再次安装_ubuntu…

LeetCode 分类刷题:2962. 统计最大元素出现至少 K 次的子数组

题目给你一个整数数组 nums 和一个 正整数 k 。请你统计有多少满足 「 nums 中的 最大 元素」至少出现 k 次的子数组,并返回满足这一条件的子数组的数目。子数组是数组中的一个连续元素序列。示例 1:输入:nums [1,3,2,3,3], k 2 输出&#…

10分钟掌握swift

整理一个 10分钟掌握 Swift 的精华指南,用一个 Demo 串联 Swift 的核心语法、数据结构、函数、类/结构体和闭包,让你快速入门。1️⃣ 基础语法与变量import Foundation // 引入基础库// 变量和常量 var name: String "Alice" // 可变 let…

【完整源码+数据集+部署教程】食品分类与实例分割系统源码和数据集:改进yolo11-AggregatedAttention

背景意义 研究背景与意义 随着全球食品产业的快速发展,食品安全和质量控制日益成为社会关注的焦点。食品分类与实例分割技术的应用,能够有效提升食品识别的准确性和效率,为食品监管、营养分析以及智能餐饮等领域提供重要支持。传统的食品识别…

C# 中的N+1问题

目录 含义 影响 避免方法 1. 立即加载(Eager Loading) 2. 显式加载(Explicit Loading) 3. 投影(Projection) 4. 批处理查询 5. 禁用延迟加载 含义 N1 问题 是 ORM(对象关系映射&#x…

国内多光谱相机做得好的厂家有哪些?-多光谱相机品牌厂家

多光谱相机是一种能够同时捕捉多个特定波段的光谱信息,这些波段覆盖可见光、近红外以及短波红外等区域。广泛应用于遥感、农业、环境监测、工业检测、安防等领域。近年来,我国在多光谱技术领域取得了显著进步,涌现出一批技术实力强、产品性能…

如何用外部电脑访问本地网页?

之前本来说用内网穿透工具来查看完成这个工具,结果感觉各种不符合心意,突然发现有更简单的方法。如果想让两台电脑在 同一局域网 内都能访问运行在 http://localhost:5174/ 上的项目,而不需要使用内网穿透工具,可以通过以下方法实…

PromptPilot — AI 自动化任务的下一个环节

作者:陈大鱼头 github:https://github.com/KRISACHAN 邮箱:chenjinwen77@gmail.com PromptPilot 体验地址:https://promptpilot.volcengine.com/ 前言 如果大家有关注 AI 相关新闻的话,一定会知道在 2025 年 6 月 11 日火山引擎 FORCE 原动力大会上,豆包大模型 1.6 系列…

[Responsive theme color] 动态更新 | CSS变量+JS操控 | 移动端-汉堡菜单 | 实现平滑滚动

第3章:CSS变量操控 欢迎回来🐻‍❄️ 通过前两章,我们掌握了 动态主题定制 的交互逻辑,以及 色彩工具函数 如何实现色值格式转换。 本章将揭示技术拼图的最后一块:CSS变量动态操控,解析JavaScript如何实…

数学建模 15 逻辑回归与随机森林

逻辑回归(用于分类)用途:通过已有数据,计算出线性方程的参数w后,可以用于预测某一个物品属于某一类的概率,[0,1];求解思想:逻辑回归通过最大似然估计(Maximum Likelihood Estimation…

衡石使用指南嵌入式场景实践之仪表盘嵌入

应用展示交互 应用集市展示应用时会与仪表盘、图表进行交互操作,主要包括去分析、保存当前过滤快照、字段设置、刷新、全屏、嵌入、导出等功能。 保存当前过滤快照 仪表盘展示数据时往往使用过滤器来查看不同场景下的分析数据。用户从一种场景切换到另一种场景&a…

Qt | 四种方式实现多线程导出数据功能

前言 在以往的项目开发中,在很多地方用到了多线程。针对不同的业务逻辑,需要使用不同的多线程实现方法,来达到优化项目的目的。本文记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示…

运放的学习笔记以及一些用法的个人看法

负反馈形成了虚短。 你的输出会对-极产生一个向上的电压,当你的-的时候就两边相等了,这个时候就输出就不变了,也就是负反馈调节,调节了左边的电压差 如果你的右边输出已经达到了12v或者0v这个时候你就饱和了,这个时候…

MySQL的三大范式:

目录 键和相关属性的概念: 第一范式: 第二范式: 第三范式: 总结: 反范式化: 在关系型数据库中,关于数据表设计的基本原则,规则就称为范式。 范式是关系数据库理论的基础&…

如何解决pip安装报错ModuleNotFoundError: No module named ‘imageio’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘imageio’问题 摘要 在Python开发过程中,尤其是使用PyCharm等IDE时,遇到pip install报错是一个常见的问题,尤其是在执行安装…

2025年高效能工程项目管理软件推荐榜单:AI重构工程进度可视化与资源动态调度体系

在工程行业数字化深度变革的2025年,项目管理正面临前所未有的挑战与机遇。权威数据显示,68%的工程项目因进度追踪滞后导致交付延期,超半数企业因数据孤岛陷入跨部门协同效率低下的困境,而资源错配造成的隐性成本损失高达年度预算的15%。随着AI决策引擎、BIM全流程融合、IoT物联…