好吧,我知道这听起来可能是一个愚蠢的问题,我相信最正确的答案将是随着经验的积累以及我对协议的了解越来越多,我将能够说出答案。

但是,我是一名学生,并且在该领域经验不足。尽管我可以用Google搜索任何给定的协议,但我想知道是否有任何经验法则。我仍然觉得要求“经验法则”是愚蠢的,但是我仍然在寻找一个。

我在Wikipedia上遇到了此列表,其中列出了协议以及它们以表格格式使用TCP还是UDP。但是,我无法理解,当特定协议的行同时包含具有单个端口号的TCP和UDP时,这意味着什么。例如,在Telnet行中,它具有23-TCP-UDP。这是什么意思? Telnet可以同时在TCP端口23和UDP端口23上运行吗?

我还发现在我的教科书中,TFTP使用UDP,但是如果我们在上表中查看,TFTP行是69-TCP-UDP。因此,只需猜测上表中发生了什么。

#1 楼

你问了一个好问题。

遗憾的是,使用TCP的协议类型与使用UDP的协议类型没有经验法则。

协议是否使用一个协议的决定权归功于编写/创建协议的人。

如果他们不想打扰编写自己的“可靠交付”系统,那么他们可以简单地使用先天提供所有可靠性的TCP。

如果他们(先天知道自己的协议)认为可以编写更好或更合适的“可靠交付”系统,那么他们可以构建进入协议本身,只需使用UDP作为其传输。

作为示例,看看UDP TFTP样本捕获,您会注意到TFTP本身内置了确认系统-在TCP中拥有这些确认系统和其他确认系统冗余。

而在TCP上运行的FTP没有内置的确认系统。用户只需请求一个文件,然后发送方将其发送。有一个“文件传输完成”通知,但不能保证已收到文件的每一位。 FTP依靠TCP的可靠性来确保文件能够完整传输。

那就是说,我浏览了所链接的Wiki页面上的端口列表,并发现数量惊人的协议使用TCP和UDP。这对我来说是陌生的,我只知道很少同时使用这两种方法(即DNS)。但是可能有一个TFTP实现使用TCP,如果这样的话,恐怕我没有接触过它。

域名系统(DNS)传统上是指讨论同时使用TCP和UDP的协议。请注意,它不会同时使用这些功能。但是DNS中不同的功能可能需要TCP与UDP。

例如,当进行简单的A记录解析请求时,“请求”和“响应”非常轻巧,都需要单个数据包。因此,这通常是通过UDP完成的。

但是,如果请求或响应需要较大的传输(一定数量的字节以上),则DNS选择使用TCP来确保“所有位”到达那里。这对于完整的区域传输请求很常见。

评论


是,+ 1,DNS查询由来自客户端的单个UDP请求和来自服务器的单个UDP响应组成。当响应数据大小超过512字节或用于区域传输之类的任务时,将使用传输控制协议(TCP)。

–伊贾兹·艾哈迈德·汗(Ijaz Ahmad Khan)
16/12/19在12:29



@IjazKhan,不再有任何区别。请参阅RFC 7766:“此文档指定了对TCP作为DNS实施的传输协议的支持要求,并提供了与TCP-over-UDP性能相当的DNS-over-TCP性能指导。该文档废弃了RFC 5966,因此进行了更新RFC 1035和RFC1123。” “因此,本文档更新了核心DNS协议规范,因此,对TCP的支持自此成为完整DNS协议实现的必要部分。”

–罗恩·莫潘♦
18年1月16日在16:08



#2 楼

Wikipedia页面不是最好的。 IANA维护端口号的注册表(警告,当前为138页):服务名称和传输协议端口号注册表

应用层协议可以自由使用任何传输层协议和端口号。按照惯例,大多数使用注册表中的特定端口号,但这并不意味着它们也不能使用其他端口号。例如,Web服务器将默认使用TCP端口80,但是可以将其设置为使用任何其他端口号,并且如果在URI上指定了端口号,Web浏览器仍然可以使用它。

可以将许多应用程序设置为使用TCP或UDP,并且可以更改端口号。这在处理冲突和奇怪的实现时提供了一定的灵活性。

#3 楼

在现实生活中,您会发现很容易分辨出使用了哪种传输协议。另外,如果您正在寻找“经验法则”,那么请考虑一下:

UDP是一种“无连接” /不可靠的协议,它无法像TCP一样恢复丢失的数据包,并且具有很多与TCP相比,其开销较小,因此它被用作对延迟敏感的应用程序的传输(例如流音频/视频)。

TCP是一种“面向连接” /可靠的协议,当它们出现时恢复数据包丢失,并且具有更高的开销,但是用于数据包丢失会导致问题的地方。

这里有许多方法可用于确定现实生活中应用程序正在使用哪种传输层协议:


从Windows命令提示符运行netstat -an
下载并运行GUI视图的TCPView(也列出了UDP)。
对有问题的端口的服务器运行qq120120q(默认情况下仅扫描TCP端口)


#4 楼

维基百科列表的来源似乎是https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt,其中偶尔会根据协议特定参考进行更新。

看起来对于较旧的分配,即使该协议仅实际使用一个或另一个,也已将TCP和UDP端口号分配给了一个协议。例如,FTP在IANA表中同时具有TCP和UDP条目。 UDP。这些条目都引用RFC 959,但RFC 959没有提及UDP。通常,查找应用协议实际使用的底层协议的首选资源将是定义协议的标准。

某些协议可以根据用户选择(例如NFS)或根据请求的详细信息(例如DNS)使用TCP或UDP