TFTP 的 RFP 说 TID 在大多数情况下:
应该是随机选择的,这样同一个数字被连续选择两次的概率非常低。
问题是,这些“TID”也用作 UDP 端口号。但是一个典型的网络接口不能只供 TFTP 使用。一些端口可能正在使用中,而其他端口基本上应该为特定应用程序“保留”。我什至不确定程序在运行时可以去哪里查找这些信息。
那么 TFTP 实现应该如何处理这个问题呢?
由于选择 TID/端口的主机是打开它并告诉对方它打开了哪个端口的主机,您可以简单地尝试打开端口;如果它已经在使用或不可用,这将失败,您可以使用不同的端口重试。(请注意,由于 UDP 和 TCP 是不同的协议,TCP 应用程序和 UDP 应用程序都可以使用“相同”端口,因为它们实际上根本不一样!)在一个简单的循环中执行此操作,直到您找一个“好”的。(可能最好定义最大尝试次数,如果在找到好的端口之前满足,则简单地使连接失败,因为这可能表明其他问题根本无法正常工作。)
坚持使用临时端口范围以很好地使用最佳实践,但请注意不同的系统为此目的定义了不同的范围。您可以选择适合您系统的范围,或者简单地尝试使用高于“知名”端口范围(即高于 1024)的端口;这可能不会为您的系统本身提供一个“临时端口”,但只要您可以打开它,它应该可以正常工作。