【发布时间】:2015-05-20 17:48:50
【问题描述】:
TCP 面向连接的语义表明一个套接字一次只能连接到一个端点。但是使用 UDP,单个打开的套接字可以向/从任意数量的端点发送/接收数据报。我的理解是,大多数操作系统(至少是 Linux 和 Windows)会在调用 sendto 时自动为 UDP 套接字分配一个临时端口。
我的问题是:在使用 UDP 时,在编写可能一次将数据报发送到多个远程端点的应用程序时,就安全性而言,最佳实践是什么?在将数据报发送到不同的远程端点之前,套接字是否应该“关闭”并重新打开?
例如,考虑一个需要解析查询的 DNS 服务器。在递归解析主机名时,DNS 服务器可能需要将数据报发送到许多不同的远程端点——即首先,它必须从某个根服务器发送/接收数据报,然后从 TLD 服务器发送/接收数据报,依此类推。在这种情况下,DNS 服务器是否应该在向所有这些不同的服务器发送/接收数据报时重用相同的套接字/临时端口?还是在发送到其他服务器之前关闭/重新打开套接字更好?这里有什么安全隐患吗?
【问题讨论】:
标签: sockets security dns udp datagram