据我所知,UDP 端口和操作系统套接字仅由(本地端口,本地地址)对映射。换句话说,接收方的操作系统不保持(远程端口,远程地址)对的状态(尽管此信息已附加到数据包的 UDP 标头。我的问题是,当您响应此数据包时(假设DNS 响应),服务器如何知道该响应谁?是否某个实体保留了从数据包中获得的(远程端口,远程地址)对并以某种方式使用它?
服务器如何知道如何响应 UDP 数据包?
网络工程
协议论
UDP
2022-02-09 17:09:49
2个回答
首先:套接字与网络协议无关,而是与网络编程有关:
实际上,如果 DNS 服务器软件调用该recv()函数,则有关发送计算机的 IP 地址的信息将会丢失。
该软件将无法发送响应。
因此软件调用recvfrom()函数而不是recv():
此函数将返回有关接收到的 UDP 数据包的附加信息;在 IPv4 的情况下:“源地址”和“源端口”(在 IPv6 的情况下甚至更多)。
使用此信息,软件可以发送响应。
UDP 套接字由(源地址、源端口、目标地址、目标端口)元组定义。这样,目标主机就知道请求来自何处以及将响应发送到何处(如果适用)。
其它你可能感兴趣的问题