ip link add 命令
ip link add veth0 type veth peer name veth1` 这条命令主要用于在 Linux 操作系统中创建一个新的 veth(虚拟以太网) 对,这是一种虚拟网络设备,用于在 Linux 命名空间(namespaces)之间创建网络连接。此命令将创建两个设备(在这个例子中,它们是 veth0 和 veth1),任何发送到一个设备的数据包都会从另一个设备出现,就像一个虚拟的网线一样。这对于创建容器(如 Docker)中的网络连接非常有用。
让我们分解这个命令:
ip:这是 iproute2 套件中的一个命令,用于管理和操纵路由,设备,策略路由和隧道。
link:这是 ip 命令的一个子命令,用于显示或操作网络设备的状态。
add:这是 link 命令的一个子命令,用于添加(创建)一个新的网络设备。
veth0:这是我们要创建的新网络设备的名称。
type veth:这指定了我们要创建的设备类型为 veth,也就是一个虚拟以太网设备。
peer:这是创建 veth 对时使用的关键字。veth 设备总是成对创建的,因为它们是双向的。所以我们需要使用peer来指定另一个设备。
name veth1:这是我们创建的第二个 veth 设备的名称。而
ip link命令的其他用法,包括:
ip link set dev DEVICE up:启动一个网络设备。
ip link set dev DEVICE down:关闭一个网络设备。
ip link set dev DEVICE name NEWNAME:重命名一个网络设备。
ip link set dev DEVICE address MAC:更改设备的 MAC 地址。
ip link delete dev DEVICE:删除一个网络设备。在使用
ip link命令时,建议先查看其手册页(通过man ip-link命令)以获取最新和详细的使用信息。
ip link是 Linux 系统中的一个命令,用于显示或操纵网络接口的链路层属性。链路层也被称为第二层,在这个层级上,数据被封装成帧(frame)进行发送和接收。
基本用法:
ip link的基本用法可以分为两类,查看和设置。
查看网络接口信息:你可以直接输入
ip link或者ip link show来查看系统中所有网络接口的链路层信息。设置网络接口属性:
ip link set命令可以用于更改网络接口的链路层属性,如改变接口状态(up/down)、改变接口的 MTU 值等。应用场景:
当你需要查看系统中的网络接口信息,如接口名称、接口状态(UP 或 DOWN)、MTU(Maximum Transmission Unit,最大传输单元)值,MAC 地址等信息时,可以使用
ip link命令。当你需要更改网络接口的链路层属性,如开启或关闭一个网络接口(up/down)、改变接口的 MTU 值、改变接口的 MAC 地址等,也可以使用
ip link命令。你也可以使用
ip link命令来创建或删除虚拟网络接口,如虚拟网桥、虚拟以太网设备(veth)、虚拟隧道等。因为它涉及到底层的网络设置,所以在使用时需要谨慎,特别是在生产环境中。当你对某个设定不确定时,最好先在测试环境中试验,确认无误后再应用到生产环境中。
type veth
创建虚拟设备
一般成对出现
用于解决两个虚拟设备之间通信
type veth是创建一对虚拟以太网设备,也就是 veth 对。一个 veth 对包含两个端点,每个端点表现得像一个独立的网络设备。数据包发送到一个端点会在另一个端点出现,就像通过网络电缆发送一样。这就是为什么使用type veth时必须指定peer选项的原因。在使用
veth类型创建网络设备时,peer关键字用于指定与该设备配对的另一个设备。这是因为veth设备总是成对出现的,它们之间的连接就像一个虚拟的网络线路,一端的输入将出现在另一端的输出。有时候,你可能需要在不同的网络命名空间中创建一对
veth设备。在这种情况下,每个设备都可以位于不同的命名空间中,从而实现命名空间之间的网络通信。例如,你可以使用veth设备在容器(它们通常运行在自己的网络命名空间中)和主机之间,或者在两个不同的容器之间创建网络连接。
veth设备在 Linux 网络中的主要用途是为不同网络命名空间之间的通信提供桥接功能,尤其是在容器化环境中。容器通常运行在自己的网络命名空间中,为了让容器能与主机或者其他容器进行通信,我们需要一种机制来连接不同的网络命名空间。这就是veth设备发挥作用的地方。
veth是一种虚拟网络设备,由一对设备构成,每个设备都可以位于不同的网络命名空间中。数据在一个设备中输入,就会在另一个设备中输出,这就像通过网络电缆进行通信一样。在内部,
veth设备的实现是依赖于 Linux 内核的。当数据包从一个veth设备发送出去时,内核会直接将数据包路由到与之配对的另一个veth设备。这一过程在内核空间内部完成,所以性能开销很小。veth设备的这种工作方式使得其可以作为网络命名空间间通信的桥梁。实际上,
veth设备是许多容器网络解决方案(如 Docker)的基础。在这些情况下,每个容器通常都有一个或多个veth设备,与主机或其他容器连接。具体的实现细节涉及到 Linux 内核的网络子系统,这些内容可能需要你对 Linux 内核的网络处理流程有深入的理解。你可以查阅 Linux 内核源码,尤其是涉及到网络设备和网络命名空间处理的部分。另外可以参考《Linux内核设计与实现》和《深入理解Linux网络技术内幕》等。
veth除了容器不同空间通信的场景之外,还有一些其他应用场景:
虽然
veth(Virtual Ethernet)对在 Linux 中使用容器技术(如 Docker 或 LXC)的场景非常有用,但它的应用并不仅限于此。实际上,任何需要在 Linux 主机上创建隔离的网络环境的场景都可以使用veth。以下是一些可能的使用场景:
网络实验和测试:
veth可以让你在同一台主机上创建多个隔离的网络环境,用于测试和实验。例如,你可以使用veth和网络命名空间来模拟复杂的网络拓扑,然后测试网络应用或协议的行为。网络功能开发:如果你正在开发需要直接操作网络设备或协议的软件(例如网络监控工具或自定义网络协议),你可能会发现使用
veth设备来模拟真实网络环境非常有用。虚拟机网络:虽然容器是
veth的一个主要用例,但在其他类型的虚拟化环境(如 KVM 或 Xen)中也可能会使用到。例如,你可以使用veth设备为每个虚拟机提供一个虚拟网络接口,然后使用 Linux 桥接或 Open vSwitch 等工具将这些接口连接到实际的网络。安全和隔离:通过
veth和网络命名空间,你可以在同一台机器上运行的不同进程间提供强隔离的网络环境,这对于提高系统的安全性非常有用。例如,你可能希望某些服务运行在其自己的网络命名空间中,以限制它们的网络访问权限。总的来说,任何需要创建独立,隔离的网络环境的场景都可以考虑使用
veth和网络命名空间。虚拟网络设备在使用上和真实网络设备有什么区别? 使用方式,用户接口都一样吗? Linux内核都需要做哪些事情进行转换?
相似之处:
使用方式:虚拟网络设备和物理网络设备在用户空间的接口上非常相似。例如,你可以使用相同的
ip命令(如ip addr和ip link)来查看和配置两种类型的设备。你也可以使用相同的系统调用(如socket、bind、connect和send)在两种类型的设备上进行网络通信。数据流:虚拟网络设备和物理网络设备都使用相同的网络协议栈。无论是虚拟设备还是物理设备,网络数据包都需要经过相同的处理步骤(如路由选择、协议封装和解封装等)。
差异之处:
实现方式:虚拟网络设备完全在软件中实现,而物理网络设备是由硬件实现的。这意味着虚拟设备的性能可能受到 CPU 和内存的限制,而物理设备的性能可能受到网络硬件的限制。
驱动程序:虚拟网络设备和物理网络设备通常使用不同的内核驱动程序。物理设备的驱动程序需要与具体的网络硬件进行交互,而虚拟设备的驱动程序则与其他内核组件(如其他虚拟设备或网络命名空间)进行交互。
功能:虚拟网络设备通常提供一些物理设备无法提供的功能。例如,
veth设备可以在不同的网络命名空间之间传递网络数据包,而物理 Ethernet 设备则不能做到这一点。Linux 内核需要做很多工作来实现虚拟网络设备。包括:
管理虚拟设备的生命周期:包括创建设备、设置设备参数、删除设备等。
路由和转发:内核需要根据路由表将网络数据包发送到正确的虚拟设备,然后可能需要在不同的虚拟设备之间转发数据包。
协议处理:虚拟设备需要处理相同的网络协议(如 IP、TCP 和 UDP 等)。
驱动程序交互:虚拟设备的驱动程序需要与其他内核组件进行交互,例如其他虚拟设备或网络命名空间。
type除了veth还有什么类型?
ip link命令中的type参数用于指定要创建的网络设备的类型。在 Linux 中,有许多不同类型的网络设备,下面是其中一些最常见的类型:
veth:这是一种虚拟以太网设备,主要用于连接两个网络命名空间。创建一个veth对会生成两个设备,它们在网络层面上直接相连。
bridge:这是一种虚拟交换机,可以连接多个网络设备(包括物理设备和虚拟设备)。桥接设备经常用于实现虚拟机和容器的网络连接。
vlan:这种类型的设备用于实现 VLAN(Virtual LAN,虚拟局域网)。VLAN 可以让你在物理网络中创建逻辑上的独立网络。
tun/tap:这两种设备都是用于创建用户空间网络设备的。其中tun设备处理网络层(如 IP 数据包),而tap设备处理数据链路层(如以太网帧)。它们通常用于实现 VPN 和网络模拟等应用。
dummy:这是一种虚拟的网络设备,它不与任何实际的硬件设备关联。你可以用它来创建一个没有硬件接口的网络设备,主要用于测试和调试。
macvlan/macvtap:这两种设备类型允许你在同一台物理机器上创建多个 MAC 地址,每个 MAC 地址对应一个虚拟设备。这样,你就可以在单一的物理设备上运行多个网络堆栈,每个堆栈拥有自己的 MAC 地址和 IP 地址。可以使用
man ip-link命令查看更详细的信息。
在创建veth设备对时,peer关键字后的选项通常为name,用于指定对端veth设备的名字。然而,除了name之外,还可以使用一些其他选项。例如:
-
netns <netns>:这个选项允许你直接将新创建的veth对的一端移动到指定的网络命名空间。例如,ip link add veth0 type veth peer name veth1 netns mynetns将会创建一个veth对veth0和veth1,其中veth1会被放入到名为mynetns的网络命名空间。 -
address <mac address>:这个选项允许你为新创建的veth设备指定MAC地址。例如,ip link add veth0 type veth peer name veth1 address 00:00:5E:00:53:01将会创建一个veth对veth0和veth1,其中veth1的MAC地址被设定为00:00:5E:00:53:01。
相关文章:
ip link add 命令
ip link add veth0 type veth peer name veth1 这条命令主要用于在 Linux 操作系统中创建一个新的 veth(虚拟以太网) 对,这是一种虚拟网络设备,用于在 Linux 命名空间(namespaces)之间创建网络连接。此命令将创建两个设备…...
unity事件处理
方法调用 //发送事件 【发送事件码,发送消息内容】 EventCenterUtil.Broadcast(EventCenterUtil.EventType.Joystick, ui);//监听无参事件 EventCenterUtil.AddListener(EventCenterUtil.EventType.Joystick, show); public void show(){}//发送事件 有参事件 Eve…...
《ChatGPT原理最佳解释,从根上理解ChatGPT》
【热点】 2022年11月30日,OpenAI发布ChatGPT(全名:Chat Generative Pre-trained Transformer), 即聊天机器人程序 ,开启AIGC的研究热潮。 ChatGPT是人工智能技术驱动的自然语言处理工具,它能够…...
大数据Flink(五十):流式计算简介
文章目录 流式计算简介 一、数据的时效性 二、流式计算和批量计算...
13-4_Qt 5.9 C++开发指南_基于QWaitCondition 的线程同步_Wait
在多线程的程序中,多个线程之间的同步实际上就是它们之间的协调问题。例如上一小节讲到的3个线程的例子中,假设 threadDAQ 写满一个缓冲区之后,threadShow 和 threadSaveFile 才能对缓冲区进行读操作。前面采用的互斥量和基于 OReadWriteLock…...
STM32(HAL)多串口进行重定向(printf函数发送数据)
目录 1、简介 2.1 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 串口外设配置 2.3 项目生成 3、KEIL端程序整合 4、效果测试 1、简介 在HAL库中,常用的printf函数是无法使用的。本文通过重映射实现在HAL库多个串口可进行类似printf函数的操作。 2.1 基础配置 2.…...
29_互联网(The Internet)(IP数据包;UDP;TCP;DNS;OSI)
上篇介绍了计算机网络的基础知识,也提到互联网(The Internet),本篇将会详细介绍互联网(The Internet)。 文章目录 1. 互联网(The Internet)组成及数据包传输过程2. IP 数据包的不足3…...
xShell常用命令
xShell常用命令 一、文件夹目录1、cd-更改目录2、mkdir-建立目录3、rm-删除目录4、pwd-查看当前路径5、rmdir-删除空目录 二、文件操作1、cat-显示文件内容2、diff-比较文件内容3、查看文件的名字和后缀4、ls-列出文件5、cp-复制文件6、mv-移动和重命名文件找不同:选…...
React性能优化之Memo、useMemo
文章目录 React.memo两种方式参数应用场景 拓展useMemouseMemo(calculateValue, dependencies) 参考资料 React.memo React 的渲染机制,组件内部的 state 或者 props 一旦发生修改,整个组件树都会被重新渲染一次,即时子组件的参数没有被修改&…...
IDEA开启并配置services窗口
前言: 一般一个spring cloud项目中大大小小存在几个十几个module编写具体的微服务项目。此时,如果要调试测需要依次启动各个项目比较麻烦。 方法一: 默认第一次打开项目的时候,idea会提示是否增加这个选项卡,如果你没…...
vue2企业级项目(三)
vue2企业级项目(三) 引入mockjs,i18n 1、mockjs 项目下载依赖 npm install --save-dev mock根目录创建mock文件夹,并创建mock/index.js import Mock from "mockjs";// 设置全局延时 没有延时的话有时候会检测不到数据…...
QT 在label上透明绘图
一、新建TransparentDemo工程 二、在界面上添加label,修改样式表,将底色置为红色,作为北京 三、新建一个TransparentLabel类,继承自QLabel 此时,工程包括文件 五、在transparentlabel.h中添加 头文件 #include …...
SAM(Segment Anything)大模型论文汇总
A Comprehensive Survey on Segment Anything Model for Vision and Beyond 论文:https://arxiv.org/abs/2305.08196 25页综述,198篇参考文献!52个开源项目!本文第一个全面回顾了分割一切模型(SAM)的研究和应用进展,…...
金融翻译难吗,如何做好金融翻译?
我们知道,金融翻译涉及企业经济这块的,是影响各公司发展很重要的一方面,翻译做得好,可以促进公司内外的交流,及时掌握各种信息,做好应对。那么,金融翻译难吗,如何做好金融翻译&#…...
Java面试题(Tomcat与Nginx)
Tomcat 什么是Tomcat? 简单来说是一个运行Java的网络服务器,也是jsp和serlvet的一个容器 Tomcat的缺省端口是多少,怎么修改? conf文件夹下修改server.xml文件 <Connector connectionTimeout"20000" port"8080" p…...
React-使用mobx
React 中使用 mobx 配置开发环境 安装mobx和中间件工具 mobx-react-lite 只能函数组件中使用 yarn add mobx mobx-react-lite初始化 mobx 定义数据状态 state在构造器中实现数据响应式处理 makeAutoObservble定义修改数据的函数 action实例化 store 并导出 import { compute…...
LeetCode ACM模式——哈希表篇(一)
刷题顺序及部分思路来源于代码随想录,网站地址:https://programmercarl.com 部分思路来源于力扣官方题解,作者主页:https://leetcode.cn/u/leetcode-solution/ 242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个…...
WPF实战学习笔记31-登录界面全局通知
UI添加消息聚合器 <md:Snackbarx:Name"LoginSnakeBar"Grid.ColumnSpan"2"Panel.ZIndex"1"MessageQueue"{md:MessageQueue}" />注册提示消息 文件:Mytodo.Views.LoginView.cs构造函数添加内容 //注册提示消息 aggre…...
通用商城项目(中)
金山编译器出问题了。下面段落标号全出问题了,排版也出问题了。懒得改了。 使用对象存储OSS,保存品牌logo 新建Module,提供上传、显示服务 有些不明所以的,按照steinliving-commodity配置了一通pom.xml 新建application.yml&…...
谨慎使用JSON.stringify
谨慎使用JSON.stringify 为了避免因为对象是引用类型而造成的数据源污染,我们通常使用 JSON.stringify 将其转换为字符串,而后通过JSON.parse方法将字符串转化一个新对象来实现深拷贝。但是在这个过程中也会存在一些问题,本文就介绍一下使用…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
