为什么UDP套接字是通过目的IP地址和目的端口来识别的?
Why is UDP socket identified by destination IP address and destination port?
根据 "Computer networking: a top-down approach",Kurose 等人的说法,UDP 套接字完全由目标 IP 和目标端口识别。
这里为什么需要目标IP?我以为 UDP 只需要多路分解的目标端口。
机器可能有多个IP,不同的套接字可能绑定到不同IP上的同一个端口。它需要使用目标 IP 来知道传入数据报应该发送到这些套接字中的哪个。
事实上,每个 IP 使用不同的套接字是很常见的。发送回复时,我们要确保源 IP 与请求的目标 IP 相匹配,以便客户端可以知道响应来自它发送到的同一服务器。通过为每个 IP 使用不同的套接字,并从请求进入的同一个套接字发送回复,可以保持这种一致性。某些套接字实现具有允许在发送回复时设置源 IP 的扩展,因此它们可以对所有 IP 使用单个套接字,但这不是标准套接字的一部分 API.
我认为您混淆了 UDP 和多播。
多播是一种不需要目标 IP 地址的广播协议。它只需要一个端口号,因为它会传送到给定端口上的所有 IP。
相比之下,UDP 仅传送到一个 IP。这就是它需要目标 IP 地址的原因。
根据 "Computer networking: a top-down approach",Kurose 等人的说法,UDP 套接字完全由目标 IP 和目标端口识别。
这里为什么需要目标IP?我以为 UDP 只需要多路分解的目标端口。
机器可能有多个IP,不同的套接字可能绑定到不同IP上的同一个端口。它需要使用目标 IP 来知道传入数据报应该发送到这些套接字中的哪个。
事实上,每个 IP 使用不同的套接字是很常见的。发送回复时,我们要确保源 IP 与请求的目标 IP 相匹配,以便客户端可以知道响应来自它发送到的同一服务器。通过为每个 IP 使用不同的套接字,并从请求进入的同一个套接字发送回复,可以保持这种一致性。某些套接字实现具有允许在发送回复时设置源 IP 的扩展,因此它们可以对所有 IP 使用单个套接字,但这不是标准套接字的一部分 API.
我认为您混淆了 UDP 和多播。
多播是一种不需要目标 IP 地址的广播协议。它只需要一个端口号,因为它会传送到给定端口上的所有 IP。
相比之下,UDP 仅传送到一个 IP。这就是它需要目标 IP 地址的原因。