我很难理解 tap 和 tun 界面之间的区别。我知道这是一个经常被问到的问题,对此我深表歉意。我在 stackoverflow 上问了同样的问题,有人告诉我试试这个论坛,所以我希望我在一个好地方。此外,我只是对网络感到好奇,但我不是网络学生或专业人士,所以如果我的问题对你来说太简单了,请原谅我。
我读了第 2 层的 tap 工作和第 3 层的 tun 工作。我还读到了 tap 用于桥接,而 tun 用于路由。我已经听说过诸如“路由器在第 3 层工作”或“桥在第 2 层工作”之类的东西:这对我来说很有意义,因为路由器操作第 3 层协议而桥接操作第 2 层协议?但是,因为 tap 和 tun 是“接口”,这意味着像“INTERFACES work at layer 3”这样的句子是有道理的,但我不明白它是什么:我的意思是接口不操作协议(操作系统会这样做,但是不是界面)所以听起来像tun界面==点击界面:
如果我使用两个位于不同网络(192.168.2.1/24 和 192.168.3.1/24)上的 ip 创建两个 tap 接口(使用 tunctl),然后我将它们链接到两个 kvm 虚拟机(一个 tap 接口匹配一个 VM)如果我在主机上启用路由,我的两个 VM 可以通信。
所以tap接口也可以用于路由:和tun有什么区别?也许一个水龙头也是一个 tun 界面?
我也可以使用 tunctl 命令创建一个 tap 接口,但是如何使用相同的命令创建一个 tun 接口(该命令称为 TUNctl 而不是 TAPctl ...)?
而且有人告诉我:
TUN 设备是虚拟以太网适配器,而 TAP 设备是虚拟点对点 IP 链接(如果这些没有意义,请询问您的搜索引擎点对点 ip 链接和以太网)
所以我研究点对点 ip 链接和以太网链接,我还有其他问题:
什么是“点对点IP链接”?在我看来,点对点链接是,当我们拥有多台机器的网络时,两台机器之间进行通信而其他机器不知道这一事实。所以我猜“点对点 ip 链接”是一种可以称为“第 …
如您所知,在 Windows 中,当我们插入网线时,网络符号会变为另一种状态。
如何通过 Linux 中的命令提示符知道电缆是否已插入?
我的笔记本没有硬件按钮来禁用无线。但是 NetworkManager 和 rfkill 将无线视为硬阻塞。Wicd 和 iwconfig 运行良好。
有没有办法在驱动程序或网络管理器中禁用硬块检查?或者让 rfkill 显示正确的状态?
司机是ath9k。无线网卡是Qualcomm Atheros AR9565
给定接口名称(例如 eth0),以编程方式确定与网络接口关联的 IRQ 的最可靠方法是什么?
我对尽力而为的方法没问题,但我希望它适用于各种驱动程序/配置(即没有对每个驱动程序进行特殊处理),并且我想避免误报。我还想避免违反此处概述的与 sysfs 交互的规则,但我可以在必要时打破它们。我将在下面的示例中打破它们。
解析/proc/interrupts并不理想,因为与 IRQ 关联的名称是特定于驱动程序的,并且不可靠,因为没有什么可以阻止两个设备具有相同名称的 IRQ。
如果我可以执行以下操作,那就太好了:
$ ls /sys/class/net/eth2/device/msi_irqs | cat /sys/class/net/eth2/device/irq
61 62 63
Run Code Online (Sandbox Code Playgroud)
我已经使用/proc/interrupts.
但这并不适用于所有驱动程序。感兴趣的 IRQ 文件位于不同的位置,或者无处可寻。
vmxnet3 接口:
$ readlink -e /sys/class/net/eth2
/sys/devices/pci0000:00/0000:00:16.0/0000:0b:00.0/net/eth2
$ ls $(readlink -e /sys/class/net/eth2)/../../msi_irqs
61 62 63
Run Code Online (Sandbox Code Playgroud)
感兴趣的 msi_irqs 是从 /sys/class/net/eth2 符号链接向上的两个目录。msi_irqs 三个目录上面都跟我无关。
虚拟界面:
$ readlink -e /sys/class/net/eth1
/sys/devices/pci0000:00/0000:00:03.0/virtio0/net/eth1
ls $(readlink -e /sys/class/net/eth1)/../../../msi_irqs
26 27 28
Run Code Online (Sandbox Code Playgroud)
感兴趣的 msi_irqs 是从 /sys/class/net/eth1 符号链接向上的三个目录。此层次结构中没有其他 msi_irqs 文件。
hv_netvsc 接口:
$ readlink -e /sys/class/net/eth0
/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/VMBus:00/vmbus_0_11/net/eth0
Run Code Online (Sandbox Code Playgroud)
IRQ …
我的ASUSPRO B8430UA 笔记本电脑有问题:当我使用 Ubuntu 16.04(或 NixOS 16.03)启动它时,以太网端口不工作。使用的驱动程序是e1000e,它报告:
$ dmesg | grep e1000e
[ 5.643760] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[ 5.643761] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[ 5.644308] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[ 5.877838] e1000e 0000:00:1f.6: The NVM Checksum Is Not Valid
[ 5.907340] e1000e: probe of 0000:00:1f.6 failed with error -5
Run Code Online (Sandbox Code Playgroud)
在 Windows 7 以太网端口下工作正常:我可以连接到 Internet。根据 Windows,我有Intel(R) 以太网连接 I219-V。
我搜索了“官方” Linux 驱动程序 …
最近我做了通常的更新 + 升级 .. 但是这样做之后,我的网络接口拒绝工作。( 无连接 )
发生了什么 ?我怎样才能打开我的网络接口?...我正在运行一个 debian - 伸展。
(在 debian-derivates 上可能会发生同样的问题,例如 Ubuntu)
我尝试使用 nmcli 为我的 Ubuntu 16.04 服务器分配一个静态 IP,该 IP 有效,但它仍将原始 IP 保留为“辅助”IP。我不知道如何摆脱它。10.163.148.36 是服务器的原始 IP,10.163.148.194 是我希望它切换到的新 IP。我使用以下 nmcli 命令来设置 IP 地址:
nmcli connection modify 'Wired connection 1' ipv4.addresses '10.163.148.194/24' ipv4.gateway '10.163.148.2' ipv4.method 'manual' ipv4.ignore-auto-dns 'yes' connection.autoconnect 'yes' ipv4.dns '10.10.10.10 10.20.10.10'
Run Code Online (Sandbox Code Playgroud)
请注意 ens160 接口的两个 IP 地址。
aruba@ubuntu:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever …Run Code Online (Sandbox Code Playgroud) 我已经在 Ubuntu 16 上安装了 docker。现在我无法再连接到我的有线网络:ubuntu 正在使用 docker0 以太网接口连接到网络(wifi 接口仍然有效)
要解决该问题,我必须关闭 docker 守护进程,然后关闭 docker0 接口:
$ sudo link set docker0 down
Run Code Online (Sandbox Code Playgroud)
但是,如果我再次启动 docker 守护进程,它会设置 docker0 接口,并且我会失去本地网络连接。
docker0 接口有什么问题?我该如何解决这个问题?
谢谢 :)
在/sf/ask/1745252071/中,有人询问网络接口名称可以有多长(显然是 16 个字节)。然而,该问题的答案似乎没有链接到有关该名称的其他限制的任何信息,例如:
\nip link我能够将;rm和-f作为有效名称,但它似乎无法解析带有空格的名称(尽管这可能只是其参数解析器的产物,实际上并不是一种保护)针对有问题的价值观))。\xce\xb1显示__,并且不能通过名称删除\xce\xb1)是否有关于接口可以被调用的内容以及在哪一层强制执行的文档(例如在内核、iproute2、libc 中)?
\n上下文:编写一个接受将存储在数据库中的接口名称的 CLI 命令,我想确定可以对坏名称进行多少过滤,而不会导致奇怪命名(尽管可能不是敌意)接口的问题。
\n