gpt4 book ai didi

linux - UDP套接字是否有可能接收ARP消息

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:08 26 4
gpt4 key购买 nike

我在 linux 下创建了一个 udp 套接字来发现网络上的另一个系统。在创建一个 udp 套接字并分配 src IP 、 src 端口、 dst 端口(我知道正确的值)和一个 dst IP(广播)之后,应用程序向另一端发送一个 UDP 数据包。这个想法是让另一台计算机发回一个 UDP 数据包,以便我的计算机推断出目标 IP 地址。另一端用包含其 IP、端口以及我的 IP 和端口的 ARP 消息进行响应。

虽然,我使用的套接字是数据报,但我的应用程序声明另一端已被发现并可以获得其 IP。我使用的udp socket似乎收到了另一端发送的ARP消息,这让我感到困惑。

请任何人解释发生了什么。

非常感谢。

最佳答案

ARP 不是基于 UDP 的协议(protocol),因此不能使用 UDP 套接字捕获。看看 OSI layer您会在第 2..3 层(链路..网络)找到 ARP,而 UDP 位于传输层(第 4 层)。如果没有 ARP,UDP 甚至无法在本地网络中工作。

如果您从您的套接字发送一个 UDP 数据包,它将查看系统的 ARP 缓存以找出与目标 IP 地址关联的硬件地址 (MAC)(至少如果目标 IP 在同一本地网络中) ).如果没有有效的缓存条目,它将执行 ARP 请求。此 ARP 请求由内核“拥有”,它与您的套接字无关,即使在您的套接字上发送导致了 ARP 查找。一旦内核(不是您的套接字)收到 ARP 回复,它将知道目标 MAC 地址,因此可以将您的 IP 数据包(UDP 基于 IP)封装到本地(物理)网络的帧中(具有本地和目标 MAC包括)并通过网卡发送出去。

关于linux - UDP套接字是否有可能接收ARP消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26779828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com