当连接到使用任播提供的服务时,我会遇到不同的行为,具体取决于请求是使用 TCP 还是 UDP 发出的。
使用TCP,请求是向地址A发出的,后续的响应也来自A。
然而,使用 UDP,虽然请求是向 A 发出的,但响应来自地址 B。
这是正确的行为吗,或者 UDP 响应应该来自它发送到的相同地址?
答案1
您在此处看到的可能更多是操作系统默认源地址选择语义的一个因素,然后是任播问题,尽管任播设置会更快地暴露问题。
在具有多个 IP 的系统上(对于任播用途,这种情况几乎总是如此),传出连接将源自机器的主 IP。由于 TCP 使用连接,因此传入数据包的目标地址与回复的原始地址之间存在更强的关联;UDP 没有那么多这种关联。
对于基于 UDP 的任播应用程序,您可能需要在服务器端查找设置来选择要绑定的接口,并且可能还需要查找用于传出连接的地址的附加设置。