将多个 IP 地址匹配到一个端点
Match multiple ip addresses to one endpoint
我的情况是这样的:
(我不知道这是否相关,但以下所有 is/should 在 linux 机器上用 c 完成。)
我正在本地网络中使用 IPv4 广播数据包和 IPv6 多播数据包进行对等发现。从另一个对等点收到 broadcast/multicast 数据包的对等点发回一个响应,表示他们在线。
因为我在所有接口上进行广播并且同时使用 IPv4 和 IPv6,所以我从一个端点(一个 IPv4 和一个 IPv6)得到至少两个响应。如果可以通过多个接口(例如 wifi + 以太网)访问另一个端点,我可能会从单个端点获得更多响应。
在此示例中,对等点 2 在其 WiFi 和以太网卡上广播 IPv4 数据包并使用其 WiFi 卡发送 IPv6 多播数据包后,从对等点 1 获得了三个响应。对等点 2 现在有 3 个来自具有不同 IP 的同一主机的响应。
我的问题是,是否有任何方法可以将所有这些响应匹配到一个端点,而无需在响应数据包中嵌入某种 ID?
如果这不可能,我的下一个问题是如何选择一个好的标识。每个主机的 ID 不必是唯一的,但每个会话的每个主机都必须唯一。一个简单的随机数可能会在两个对等点之间造成冲突,如果不需要的话,我不想处理这种情况。 id 也应该很短,以免数据包膨胀太多。
我很感激任何 comments/answers。
My question is if there is any way to match all those responses to a single endpoint without embedding some kind of id in the response packets?
如果不在数据包中嵌入某种标识(或在 TCP 会话开始时执行某种身份验证交换,在这种情况下,您只要它是已建立连接的一部分,就不需要在每个数据包中包含标识符。
If this is not possible my next question would be how to pick a good identification. The id does not have to be unique per host but only per host per session.
使用网络接口的 MAC 地址作为客户端标识符。这将为您提供一个六字节的客户端标识符,每个主机都是唯一的。使用 "the MAC address of eth0
" 或 "the MAC address of the lowest numbered interface" 之类的规则来始终如一地 select 值。
可能值得注意的是,虽然 MAC 地址可能无法 保证 唯一,但 有效 保证: 只要 (a) 您的所有客户端共享至少一个公共网络并且 (b) 您使用该网络上接口的 MAC 地址,那么它要么是唯一的,要么您将遇到更大的问题处理,因为您的一个或多个客户将无法参与网络。
我的情况是这样的:
(我不知道这是否相关,但以下所有 is/should 在 linux 机器上用 c 完成。)
我正在本地网络中使用 IPv4 广播数据包和 IPv6 多播数据包进行对等发现。从另一个对等点收到 broadcast/multicast 数据包的对等点发回一个响应,表示他们在线。
因为我在所有接口上进行广播并且同时使用 IPv4 和 IPv6,所以我从一个端点(一个 IPv4 和一个 IPv6)得到至少两个响应。如果可以通过多个接口(例如 wifi + 以太网)访问另一个端点,我可能会从单个端点获得更多响应。
在此示例中,对等点 2 在其 WiFi 和以太网卡上广播 IPv4 数据包并使用其 WiFi 卡发送 IPv6 多播数据包后,从对等点 1 获得了三个响应。对等点 2 现在有 3 个来自具有不同 IP 的同一主机的响应。
我的问题是,是否有任何方法可以将所有这些响应匹配到一个端点,而无需在响应数据包中嵌入某种 ID?
如果这不可能,我的下一个问题是如何选择一个好的标识。每个主机的 ID 不必是唯一的,但每个会话的每个主机都必须唯一。一个简单的随机数可能会在两个对等点之间造成冲突,如果不需要的话,我不想处理这种情况。 id 也应该很短,以免数据包膨胀太多。
我很感激任何 comments/answers。
My question is if there is any way to match all those responses to a single endpoint without embedding some kind of id in the response packets?
如果不在数据包中嵌入某种标识(或在 TCP 会话开始时执行某种身份验证交换,在这种情况下,您只要它是已建立连接的一部分,就不需要在每个数据包中包含标识符。
If this is not possible my next question would be how to pick a good identification. The id does not have to be unique per host but only per host per session.
使用网络接口的 MAC 地址作为客户端标识符。这将为您提供一个六字节的客户端标识符,每个主机都是唯一的。使用 "the MAC address of eth0
" 或 "the MAC address of the lowest numbered interface" 之类的规则来始终如一地 select 值。
可能值得注意的是,虽然 MAC 地址可能无法 保证 唯一,但 有效 保证: 只要 (a) 您的所有客户端共享至少一个公共网络并且 (b) 您使用该网络上接口的 MAC 地址,那么它要么是唯一的,要么您将遇到更大的问题处理,因为您的一个或多个客户将无法参与网络。