Networking 当接收器未侦听已知端口时,如何确定自定义协议的临时UDP目标端口号

Networking 当接收器未侦听已知端口时,如何确定自定义协议的临时UDP目标端口号,networking,udp,port,Networking,Udp,Port,我正在开发一个使用UDP作为传输层的自定义协议。由于它是自定义的,显然没有为该协议分配IETF UDP端口 作为发送方,我需要在UDP目标端口字段中输入一个值,接收方也需要在同一端口上侦听我的消息。否则接收器将无法获取我的UDP数据包 显然,我不能使用IETF“服务名称和传输协议端口号注册表”中列出的任何端口,因为它们是为其他协议(不是我的自定义协议)保留的 由于协议没有(也永远不会)注册,并且没有专用端口号,因此我确实需要使用临时范围内的端口。这也排除了使用众所周知的目标端口来引导通信过

我正在开发一个使用UDP作为传输层的自定义协议。由于它是自定义的,显然没有为该协议分配IETF UDP端口

作为发送方,我需要在UDP目标端口字段中输入一个值,接收方也需要在同一端口上侦听我的消息。否则接收器将无法获取我的UDP数据包

  • 显然,我不能使用IETF“服务名称和传输协议端口号注册表”中列出的任何端口,因为它们是为其他协议(不是我的自定义协议)保留的

  • 由于协议没有(也永远不会)注册,并且没有专用端口号,因此我确实需要使用临时范围内的端口。这也排除了使用众所周知的目标端口来引导通信过程的可能性

  • 但是我不能硬编码一个短暂的端口值,因为当我的程序启动时,该端口很可能已经被另一个进程使用。当我的程序启动时,我不一定能控制使用哪些临时端口。因此,发送方和接收方需要一些方法来确定在运行时使用哪个端口

  • 接收器将是一个运行一些自定义网络代码的嵌入式系统。从理论上讲,在那一边永久保留一个短暂的港口是可能的。这种解决办法是不可取的,但如果没有更好的选择,我会接受这一答案

  • 显然,发送方可以检查本地临时端口的使用情况,并找到一个免费的端口放在自己的源端口字段中。所以没有问题。目的地只需要在回复中使用该字段值,不管它是什么

在这种情况下,发送方和接收方在设置通信的第一条消息的目的地端口字段中应该包含什么内容,有什么好方法可以达成一致?

此外,如果IETF RFC对此有任何指导方针,我希望知道它是哪一个

我不是在问如何在任何特定语言或操作系统中实现这一点,也不是问要调用什么内置API函数。这仅仅是一个关于使用自定义协议时选择端口的基本算法的问题,当接收器未侦听“服务名称和传输协议端口号注册表”中列出的端口时


我已经在网络工程堆栈交换上问过这个问题,但他们觉得问一个关于IETF RFC和与网络算法设计相关的问题有点离题。

如果您正在开发一个协议,那么您应该根据您包含的IANA链接注册一个服务端口。IANA根据使用“IETF审查”流程、“IESG批准”流程或“专家审查”流程分配用户端口。不分配动态端口