ip link down 和物理链路缺失的区别

ip link down 和物理链路缺失的区别

在Linux中,有什么区别ip link down条件真实链接缺失(例如交换机的端口被烧毁,或者有人被电线绊倒)。
我所说的差异是指系统中可以用来区分这两种情况的一些标志。
例如,在这两种情况下路由表是否相同?会ethtool或其他东西显示相同的东西吗?是否有一些工具/实用程序可以区分这些条件?

答案1

管理界面之间存在差异向上但断开连接或在管理上向下

已断开连接

接口得到一个运营商宕机地位。其正确处理可能取决于接口的驱动程序和内核版本。通常它可以与ip link show。例如使用虚拟以太网韦斯界面:

# ip link add name vetha up type veth peer name vethb
# ip link show type veth
2: vethb@vetha: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 02:a0:3b:9a:ad:4d brd ff:ff:ff:ff:ff:ff
3: vetha@vethb: <NO-CARRIER,BROADCAST,MULTICAST,UP,M-DOWN> mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
    link/ether 36:e3:62:1b:a8:1f brd ff:ff:ff:ff:ff:ff

维塔它本身在管理上是 UP、显示NO-CARRIER和等效的操作状态 LOWERLAYERDOWN标志:已断开连接。

/sys/也存在等效条目:

# cat /sys/class/net/vetha/carrier /sys/class/net/vetha/operstate
0
lowerlayerdown

在通常的设置中,对于管理界面向上载体操作状态匹配(NO-CARRIER <=> LOWERLAYERDOWN 或 LOWER_UP <=> UP)。例如,使用 IEEE 802.1X 身份验证时(高级详细信息)是一种例外情况。操作状态在此内核文档中进行了描述:运行状态,但本解释不需要它)。

ethtool查询较低级别的 API 以检索相同的运营商状态。

没有运营商并不会阻止任何第 3 层设置保持有效。发生这种情况时,内核不会更改地址或路由。只是最终应该发出的数据包不会被接口发出,当然也不会收到回复。例如,尝试连接到其他 IPv4 地址迟早会再次触发 ARP 请求,该请求将会失败,并且应用程序将收到“没有到主机的路由”。已建立的 TCP 连接只会等待时机并保持建立状态。

行政上下降

多于维特布操作状态关闭并且不显示任何运营商状态(因为它必须启动才能检测到这一点。物理以太网接口的行为当然是相同的)。

当接口关闭 ( ip link set ... down) 时,将无法再检测到运营商,因为底层硬件设备很可能已关闭并且操作状态变为“关闭”。ethtool只会说也没有链接,所以不能可靠地用于此(它肯定会显示一些未知条目也有,但是有可靠的方案吗?)。

这次这将对第 3 层网络设置产生影响。内核将拒绝使用此接口添加路由,并将删除与其相关的任何先前路由:

  • proto kernel添加地址时自动添加的 ( ) LAN 路由
  • 在任何路由表中添加的任何其他路由(例如:默认路由)(不仅是主要的路由表)直接取决于接口 ( scope link) 或其他先前删除的路由(可能是那时scope global)。由于当界面恢复 ( ip link set ... up) 时这些不会重新出现,因此它们会丢失,直到用户空间工具将它们添加回来。

用户空间交互

当使用 NetworkManager 等最新工具时,人们可能会感到困惑,并认为断开连接类似于接口关闭。这是因为 NM 会监视链接并在此类事件发生时采取行动。为了了解该ip monitor工具可用于从脚本进行监控,但它当前没有稳定/可解析的输出(没有可用的 JSON 输出),因此它的使用受到限制。

因此,当线路断开时,NM 很可能会认为它不再使用当前配置,除非特定设置阻止它:然后它会删除地址和路由本身。当线路重新连接时,NM 将再次应用其配置:添加回地址和路由(如果相关,则使用 DHCP)。这看起来是一样的,但其实不然。一直以来界面都保持不变向上,或者当连接恢复时,NM 甚至不可能收到警告。

概括

  • 区分这两种情况很容易:对于断开连接的接口ip link show将显示NO-CARRIER+ ,对于通过管理方式关闭的接口将显示 +。LOWERLAYERDOWNDOWN

  • 以管理方式关闭(和打开)接口可能会丢失路由

  • 丢失运营商并恢复它不会破坏网络设置。如果延迟足够短,它甚至不会中断正在进行的网络连接

  • 但管理网络的应用程序可能会做出反应并更改网络设置,有时会产生类似于管理性故障的结果

  • 您可以使用以下命令,例如ip monitor link接收有关管理性关闭/开启或运营商更改的接口设置的事件,或者ip monitor接收此时或不久后发生的所有多个相关事件(包括地址或路由更改)。

  • 大多数ip命令(但不是ip monitor)都有一个 JSON 输出,可用于ip -json ...帮助脚本(以及jq)。

    示例(从第一个继续韦斯例子):

    维特布仍然处于下降状态:

    # ip -j link show dev vethb | jq '.[].operstate'
    "DOWN"
    
    # ip -j link show dev vetha | jq '.[].operstate'
    "LOWERLAYERDOWN"
    

    维特布up,现在在以下两个方面都获得了运营商:

    # ip link set vethb up
    # ip -j link show dev vetha | jq '.[].operstate'
    "UP"
    

    这讲述了 3 个常见状态: 管理上向下,下层向下(即:已启动但已断开连接)或向上(即:可操作)。

答案2

dmesg这是我运行后看到的ip link set enp3s0 down

r8169 0000:03:00.0 enp3s0: Link is Down
ethtool enp3s0
Settings for enp3s0:
Cannot get device settings: No such device
    Supports Wake-on: pumbg
    Wake-on: d
    Link detected: no

然而如果

交换机端口烧毁,或者有人被电线绊倒

接口必须仍然在那里,以及静态 IP 地址和路由。ethtool将检测您的 NIC 并显示,Link detected: no但输出将是完整的,这与通过 删除设备不同ip l set interface down

相关内容