所以正如标题所说,主机如何知道同一局域网内其他主机的IP地址?是否有特定的协议?我的第一个想法是可以使用 ARP。但是ARP好像是以ip地址为输入,给出对应的MAC地址。
但是假设两个主机连接在一个局域网中,主机 A 怎么知道 B 存在并且 B 有 IP 地址,比如 192.168.0.6?
所以正如标题所说,主机如何知道同一局域网内其他主机的IP地址?是否有特定的协议?我的第一个想法是可以使用 ARP。但是ARP好像是以ip地址为输入,给出对应的MAC地址。
但是假设两个主机连接在一个局域网中,主机 A 怎么知道 B 存在并且 B 有 IP 地址,比如 192.168.0.6?
但是假设两个主机连接在一个局域网中,主机 A 怎么知道 B 存在并且 B 有 IP 地址,比如 192.168.0.6?
简单地说,应用程序通过指定地址或指定主机名然后发出 DNS 查询来告诉它。
你可能会问,“为什么 A 关心 B 是否存在?” 答案再次是某个应用程序想要向 B 发送消息。该应用程序知道 B 的名称或 IP 地址。
但是ARP好像是以ip地址为输入,给出对应的MAC地址。
这是正确的(对于 IPv4)。ARP 还可用于检查 IP 地址是否已在使用中(对于 DHCP、Zeroconf 等)。
有几种方法可以找到其他主机:
第一个是对等 IP 或 DNS 名称配置在主机上的某处。DNS 名称需要 DNS 解析(A 记录)才能找到 IP 地址。DNS 服务器和(默认)网关 IP 地址通常由 DHCP 协议配置。
第二种是通过广播(用于 DHCP 发现、Bonjour、UPnP 和许多其他协议),因此对等方要么定期宣布其存在,要么另一个对等方可以通过广播来获得答复。当然,也可以使用多播来代替(一般)广播。
广播和多播,通常只在广播域的范围内工作,即。本地链路层段,通常与 IP 子网相同。
还有一种(粗略的)第三种方法:尝试和错误。主机可以简单地“扫描”一个子网,尝试连接到每个可能的 IP 地址并查看结果。
最后,还有像 Cisco 的 CDP 或 IEEE 的 LLDP 这样的链路层发现协议,节点可以使用它们向直接连接的邻居宣布其存在和功能。这种方法在(企业级)网络设备中很常见,但在其他地方很少使用。