了解 LAN/VLAN 上的设备如何发现其他本地设备的存在

网络工程 网络 网络发现
2021-07-07 06:20:54

假设您有一个全新的 192.168.1.0/24 网络,它由一个路由器、交换机和两个主机(H1 和 H2)组成。

H1想和H2通信,但是这是一个全新的网络,之前没有通信,H1怎么知道H2退出了?

我知道最初,两台主机不会知道彼此的 IP 地址。我也明白,当一台主机知道另一台主机的 IP 地址并确定它在同一个 LAN 上后,它可以简单地通过 ARP 来发现另一台主机的 MAC 地址。我只是在努力了解一台主机最初是如何发现其他本地连接设备的存在的。

Found Here问题的答案谈到了 DNS 的作用,但我仍然不明白 H1 是如何知道 H2 的名称,甚至向 DNS 服务器询问哪个 IP 地址属于给定名称。是否有某种协议/服务使同一 LAN/VLAN 上的主机能够了解连接到同一 LAN/VLAN 的所有其他主机?

在不使用本地 DNS 服务器的较小网络中,这是由 NetBIOS 完成的吗?我也有兴趣了解这种“发现”过程在这种类型的环境中是如何工作的。

谢谢时间头!

2个回答

这是一个实际问题。

大多数情况下,一台主机“想要”另一台主机的某些东西,因此它会尝试通过已知的 DNS 名称进行连接。在公司网络中,DNS 服务器为名称(A 记录)提供 IP 地址,您就可以设置了。在较小的网络中,广播名称解析可能有效——这也被 NetBIOS 使用。

广播到某些 UDP 端口也被各种协议用于对等方“找到”彼此。大多数情况下,多播实际上是更好的选择。

通常,没有单一的协议或方法可以让您全面发现本地网络。但是可以使用各种“引导”方法。例如,Microsoft SMB 客户端通常通过 DHCP 发现 DNS 服务器,然后使用特殊的 DNS 记录来定位最近的域控制器、LDAP 服务器等。

一种可能的方式(目前不是唯一一个)是的mDNS基于服务发现零配置网络,基于链路本地组播(见Zac67的语句)和DNS域名。本地有关 Zeroconf 的完整概述,请参阅Wikipedia on Zeroconf Networking,它也参考RFC 6763

过度简化:Zeroconf Networking 的服务发现部分 (mDNS-SD) 指定了如何定义或多或少广为人知的服务名称的规则,以及如何以类似 DNS 的方式表示和查询它们。这些服务名称(以及计算机名称)可以由感兴趣的主机通过多播 DNS (mDNS) 解析。

示例:让我们选择_ipp._tcp.local支持 IPP 的打印机。子网上的主机对查找支持 IPP 的打印机感兴趣,可以将名称的 DNS 查询多播_ipp._tcp.local到链路本地多播地址 224.0.0.251。

任何打开的主机(在这种情况下:打印机)运行着 IPP 服务并且通过配置感觉倾向于响应(因为 mDNS-SD 支持被激活)可以发送 DNS 响应。根据进入的答案,查询主机然后可以填充其自己的支持 IPP 的打印机列表,并将其呈现给用户。

同一个组播DNS(的mDNS)分辨率可以用来寻找的IP地址othercomputer.local,或myinternalwebserver.local,这样用户就可以直接将其浏览器以HTTP://myinternalwebserver.local

正如 Zac67 指出的那样 - 没有单一的通用方法可以在网络上进行服务或计算机发现。HP 使用类似的东西来查找他们的打印机(使用可路由的多播地址 224.0.1.60),Apple 将他们的 Zeroconf 实现称为 Bonjour 或 Rendevous,其中一个 Linux 实现称为 Avahi,还有其他实现,请参阅维基百科页面。

最终,挑战保持不变:对在本地网络上查找服务感兴趣的主机(或:主机上运行的软件)必须知道它正在寻找什么样的服务,并发出适当的查询。