的值/sys/class/net/ethX/carrier
可用于确定计算机是否已连接。
是否可以确定连接到集线器/交换机的是另一台计算机(这将需要交叉电缆或支持“交叉”本身的网络接口)?
更新:
阅读答案后(谢谢!)看来,提供更具体的用例可能(希望)有助于澄清问题的意图:
我们的想法是拥有一个支持两种操作“模式”的设备:
- 常规 - 例如当连接到开关时
- 配置 - 例如,当使用常规电缆(而不是交叉电缆)直接连接到计算机时,通常需要交叉电缆才能工作
在配置模式下,设备可以启动 DHCP 服务器并允许配置“常规”模式下不允许的参数。
所以问题是,设备本身能否检测到它已连接到计算机,并通过该方式从常规模式切换到配置模式? (假设用户使用的是普通电缆,因为他们可能甚至不知道存在交叉电缆之类的东西......)
答案1
如果这就是您的意思,以太网没有任何形式的客户端/服务器。连接到交换机与连接到另一台计算机之间没有实际区别。
仅需要交叉电缆,因为交换机的引脚从后到前连接,以便它们在计算机通话的线路上监听,并在计算机监听的线路上通话......连接计算机到计算机需要电缆将它们交换过来。
与集线器有一个非常微妙的差异,这一点可能很明显。由于集线器不会以任何方式解释数据包,因此会将每个数据包转发到每个其他设备,因此可能会检测到数据包正在发送到为另一台机器指定(mac)地址的计算机。
答案2
通过软件方式无法直接确定交叉电缆是否正在使用,因为就硬件而言没有区别(假设它完全可以工作)。主机切换连接不需要交叉。交换机到交换机或主机到主机的连接需要交叉 - 但根据当前的以太网标准,任一端都可以自动激活其端口上的交叉。因此,除非您知道a)它是这些组合之一,并且b)双方都没有激活自动交叉,否则您将无法知道。
可以确定端口是否检测到它需要内部交叉,因为需要但未使用交叉。
通过查看电缆两侧的设备类型(主机与交换机)并确保没有一方激活其自己端口的交叉,可以猜测是否使用了交叉,但通常此信息不是无论如何都可用,所以它仍然可能是不可能的。
答案3
ethtool
显示有关 NIC 的 MDI/X 模式的一行,它在我测试的系统上显示未知,但我认为它可以工作一些系统。
但这对您没有帮助:如果您看到本地交叉链接,您仍然无法判断这是因为有一条直通电缆连接到另一台主机,还是有一条交叉电缆连接到交换机。如果您没有看到本地交叉,您仍然无法知道遥控器是否切换到交叉模式。
但是,我也想知道检测电缆有什么用?几乎所有设备都支持自动 MDI/X,电缆的具体细节是相当无关紧要的低级细节,有点像电缆的长度。
知道您是否连接到交换机或计算机(通过直接物理链路)也没有多大意义,因为计算机几乎可以像专用交换机一样充当桥接器,并且可以使用 SSH 连接到交换机,例如一台电脑。
如果您试图确定是否应该使用 DHCP 或者 Zeroconf 之类的东西,出于类似的原因,您也不能根据物理链路做出决定。如果您连接到交换机,则可能也连接了 DHCP 服务器,也可能没有连接。如果您连接到一台计算机,另一端可能正在运行也可能没有运行。因此,必须在比直接联系更高的层面上做出决定。
答案4
ethtool
可以显示MDI-X的状态
...
Speed: 1000Mb/s
Duplex: Full
Auto-negotiation: on
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
MDI-X: on (auto)
...
然而,正如其他人指出的那样,这只是本地计算机的状态,您无法了解另一台计算机所使用的电缆或 MDI-X 状态。
ethtool
允许您强制打开或关闭 MDIX,而不是默认的自动 MDIX。
ethtool -s devname [mdix auto|on|off]
然后您可以观察是否可以建立连接。如果无论状态如何连接都成功,则另一台计算机支持自动 MDI-X。
注意全部 千兆位以太网设备支持自动 MDI-X。
要测试电缆是直通电缆还是交叉电缆,您可以使用便宜的 RJ45 电缆测试仪。