Linux veth

一文搞懂 Linux veth:从小白到入门

嘿,小白朋友!如果你是 Linux 网络新手,别担心,我会用最简单的话一步步带你了解 veth(Virtual Ethernet,虚拟以太网)。veth 不是什么高大上的东西,它就像一对"虚拟网线",帮你在 Linux 系统里模拟网络连接。想象一下,你想在电脑里建两个"虚拟房间"(网络命名空间),veth 就是连接它们的"门"。下面我们从头开始讲,配上例子和图解(用文字模拟),保证你看完就能上手!

1. veth 是什么?(基础定义)
  • 简单说:veth 是一种虚拟网络设备(interface),总是成对出现。比如,你创建一对 veth0 和 veth1,它们就像两端插头的网线:一端发包,另一端就能收到。
  • 为什么需要它?在物理世界,你用网线连两台电脑;在 Linux 里,veth 连"虚拟电脑"(如容器、命名空间)。它支持所有以太网功能:MAC 地址、IP、流量控制等。
  • 对比真实网卡:真实网卡(如 eth0)连物理网络;veth 是纯软件的,速度快(内核级),常用于测试、隔离、桥接。
  • 关键点:veth 不是单身的!创建时总是一对(peer),删除一个另一个也消失。
2. veth 的工作原理(像动画一样想)
  • 成对机制:创建 veth0@veth1 时,veth0 和 veth1 是"双胞胎"。从 veth0 发送的数据包,会直接"传送"到 veth1 的接收队列(RX),反之亦然。内核用队列(queue)处理,不走物理线。

  • 命名空间隔离 :veth 的强大在于可以放进不同网络命名空间(network namespace)。比如:

    • veth0 在默认命名空间(主机)。
    • veth1 在新命名空间(容器)。
    • 这样,容器就能"联网"了,而不干扰主机。
  • 数据流 (简化图):

    复制代码
    [主机命名空间] -- veth0 <---> veth1 -- [容器命名空间]
                      |                 |
                  发送包 ------------> 接收包
                  接收包 <------------ 发送包
    • 如果包从 veth0 出,veth1 进;内核零拷贝,效率高。
  • 底层:基于 Linux net_device 结构,实现点对点(point-to-point)连接。支持 XDP、TC 等高级功能,但小白先忽略。

3. 怎么创建和使用 veth?(动手实践)

需要 root 权限(sudo)。用 ip 命令(iproute2 工具包,默认有)。

  • 步骤1: 创建一对 veth

    bash 复制代码
    sudo ip link add veth0 type veth peer name veth1
    • 结果:veth0 和 veth1 出现。用 ip link show 查看:

      复制代码
      3: veth1@veth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
          link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
      4: veth0@veth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
          link/ether 11:22:33:44:55:66 brd ff:ff:ff:ff:ff:ff
    • 注意:默认 DOWN(关闭),MAC 随机生成。

  • 步骤2: 激活接口

    bash 复制代码
    sudo ip link set veth0 up
    sudo ip link set veth1 up
    • 现在它们 UP 了,能发包。
  • 步骤3: 分配 IP(测试连通)

    bash 复制代码
    sudo ip addr add 192.168.1.1/24 dev veth0
    sudo ip addr add 192.168.1.2/24 dev veth1
    • 测试:ping 192.168.1.2(从 veth0 ping veth1),成功!包通过 veth "隧道"。
  • 步骤4: 结合命名空间(高级玩法)

    创建新命名空间(像新"虚拟机"):

    bash 复制代码
    sudo ip netns add myns  # 创建命名空间 myns
    sudo ip link set veth1 netns myns  # 把 veth1 移到 myns
    sudo ip netns exec myns ip addr add 192.168.1.2/24 dev veth1  # 在 myns 里设 IP
    sudo ip netns exec myns ip link set veth1 up
    • 测试:从主机 ping 192.168.1.2(成功);在 myns 里 ping 192.168.1.1(用 sudo ip netns exec myns ping 192.168.1.1)。
    • 清理:sudo ip netns del myns(自动删 veth1,veth0 也删)。
  • 删除 veth:

    bash 复制代码
    sudo ip link del veth0
4. veth 的应用场景(为什么有用?)
  • 容器网络:Docker/Kubernetes 用 veth 连容器和主机桥接(bridge)。容器像独立主机,但通过 veth "上网"。
  • 网络测试:模拟多机环境,不用真机器。e.g., 测试防火墙、负载均衡。
  • VPN/隧道:结合 bridge 或 vxlan 建复杂拓扑。
  • eBPF/XDP 开发:如你之前玩的教程,用 veth 模拟流量(高性能、低开销)。
  • 隔离安全:不同命名空间隔离流量,防泄漏。
相关推荐
忆挽篱笙歌几秒前
进程控制管理
linux·运维·服务器
Escalating_xu9 分钟前
【Linux 网络编程】connect 的断线重连:用状态机写一个能恢复连接的 TCP 客户端
linux·网络·tcp/ip
Zucker n1 小时前
英语“论文”语法检查工具
linux·windows
2401_868534782 小时前
局域网络中信息安全方案设计及攻击防范技术(制造企业园区网)
服务器·网络
苏宸啊2 小时前
Reactor反应堆模式
linux
javaDocker2 小时前
1800 亿科技投入砸下去,多数机构平的只是服务器,不是能力
运维·服务器·人工智能·科技·研发效能·金融科技
服务器硬件项目经理2 小时前
超节点修仙录 目 录
服务器·硬件工程·硬件
骇客野人3 小时前
Linux 全套实操方案(含目录详解、文件传输、日志、文件规范、环境变量、Java 应用部署运维)
java·linux·运维
_菜鸟果果3 小时前
高德地图 JS API 2.0 在国产 Linux/ARM 电脑上渲染失败 的排查与解决
linux·开发语言·javascript
GeW3 小时前
飞行汽车交付阿联酋,真正先“起飞”的是低空数据基座——红帽Linux与数据库高可用为什么成了低空运营的隐形跑道
linux