服务器如何知道如何响应 UDP 数据包?

网络工程 协议论 UDP
2022-02-09 17:09:49

据我所知,UDP 端口和操作系统套接字仅由(本地端口,本地地址)对映射。换句话说,接收方的操作系统不保持(远程端口,远程地址)对的状态(尽管此信息已附加到数据包的 UDP 标头。我的问题是,当您响应此数据包时(假设DNS 响应),服务器如何知道该响应谁?是否某个实体保留了从数据包中获得的(远程端口,远程地址)对并以某种方式使用它?

2个回答

首先:套接字与网络协议无关,而是与网络编程有关:

实际上,如果 DNS 服务器软件调用该recv()函数,则有关发送计算机的 IP 地址的信息将会丢失。

该软件将无法发送响应。

因此软件调用recvfrom()函数而不是recv()

此函数将返回有关接收到的 UDP 数据包的附加信息;在 IPv4 的情况下:“源地址”和“源端口”(在 IPv6 的情况下甚至更多)。

使用此信息,软件可以发送响应。

UDP 套接字由(源地址、源端口、目标地址、目标端口)元组定义。这样,目标主机就知道请求来自何处以及将响应发送到何处(如果适用)。