UDP 会话和临时端口选择

网络工程 协议论 互联网 UDP 传输协议 射频
2022-02-16 18:54:13

我想请社区帮助我找到以下问题的答案:

  1. 根据 RFC 6056,操作系统应该为每个传输层连接伪随机选择临时端口。对于有状态协议的 TCP,情况很清楚:临时端口分配给 5 个元组 {protocol, source_ip, source_port,destination_ip,destination_port} 直到连接断开。但是,UDP 是无状态协议,没有 UDP 连接。因此,对我来说,尚不清楚在 UDP 的情况下如何分配临时端口。每个请求都不同吗?它是否随机分配给 5 个元组并保留到在 TIMEOUT 期间没有收到任何数据包?
  2. 各种操作系统(例如 Windows、Unix、Linux)的实现是否存在差异?

我在serverfault.com上问过同样的问题,但也许在这里更相关。

2个回答

在客户端上,每个套接字显式或隐式绑定到本地端口。此绑定与套​​接字一样持续。是为多个请求使用同一个套接字还是为每个请求创建一个新套接字取决于应用程序开发人员。

在网络地址转换器上,通常使用基于超时的策略。如果在超时期间没有看到给定映射的数据包,则丢弃该映射。

就像 TCP 一样,UDP 为一个数据流随机选择一个临时端口。因此,当客户端从未绑定的端口号发送数据报时,会自动分配一个临时端口号,以便接收端可以回复发送者。应用程序可以专门选择一个端口用于发送数据,如果它被编程为这样做的话。

UDP 在头字段中包含校验和,即使它是无连接的。UDP 不关心丢弃的数据包和乱序传递的数据包。但是 UDP 关心的一件事是接收到的数据包的完整性。UDP 不能纠正完整性问题,但它可以丢弃校验和无效的数据报。基本上接收端不会接受校验和错误的数据包。没有机制将此通知回发送者,但它会默默地丢弃它。

临时源端口因操作系统而异。检查这些来源:

临时端口范围

临时源端口选择策略