TCP vs UDP
计算机网络传输层有两种重要的协议:TCP和UDP。
TCP提供了一种面向连接的可靠数据传输;UDP则提供了一种无连接的不可靠数据传输。
乍一看,我们选TCP不就完事了?何必使用UDP?数据的可靠传输不就是我们需要的结果吗?
诶,别急着否定UDP,它有它存在的价值。
UDP的优点
真的,有很多应用更适合于UDP传输,正因为UDP有以下优点:
- 关于什么时候发送什么数据的应用层控制更为精细 。
采用 UDP 时,只要应用进程将 数据传递给 UDP,UDP 就会将此数据打包进 UDP 报文段井立即将其传递给网络层。然而,TCP 存在拥塞控制机制,以便当源主机和目的主机间的一条或多条链路变得极度拥塞时来遏制运输层 TCP 发送方。 理论上,TCP 仍将继续重新发送数据报文段直到目的主机收到此报文并加以确认,而不管可靠交付需要用多段时间。因为实时应用通常要求最小的发送速率,不希望过分地延迟报文段的传送,且能容忍一些数据丢失,TCP 服务模型并不是特别适合这些应用的需要。这些应用可以使用 UDP,并作为应用的一部分来实现所需的、超出 UDP 的不提供不必要的报文段交付服务之外的额外功能。 - 无需连接建立。
TCP 在开始数据传输之前要经过三次握手,进而建立连接。 UDP 却不需要任何准备即可进行数据传输。因此 UDP 不会引入建立连接的时延。这可能是 DNS 运行在 UDP 之上而不是运行在 TCP 之上的主要原因(如果运行在 TCP 上,则 DNS 会慢得多)。HTTP 使用 TCP 而不是 UDP,因为对于具有文本数据 的 Web 网页来说,可靠性是至关重要的。 但是,HTTP 中的 TCP 连接建立时延对于与下载 Web 文档相关的时延来说是一个重要因素。 - 无连接状态。
TCP 需要在端系统中维护连接状态。 此连接状态包括接收和发送缓存、拥塞控制参数以及序号与确认号的参数。 事实上,要实现 TCP 的可靠数据传输服务并提供拥塞控制 ,这些状态信息是必要的。然而,UDP 不维护连接状态,也不跟踪这些参数。因此,某些专门用于某种特定应用的服务器当应用程序运行在 UDP 之上而不是运行在 TCP 上时,一般都能支持更多的活跃客户 。 - 分组首部开销小。
每个 TCP 报文段都有20字节的首部开销,而 UDP 仅有8字节的开销。
TCP和UDP的用途
电子邮件、远程终端访问、Web以及文件传输,这些服务需要可靠数据传输,所以都运行在TCP之上。
UDP支持网络管理程序,因为SNMP必须在网络重压时仍能运行,这时可靠数据传输反而显得不可靠。
UDP支持DNS,避免可DNS创建时延,提升其效率。
UDP支持多媒体应用,诸如网络电话、实时视频会议、网络直播、流式存储音视频等等,它们能容忍少量分组丢失,往往需要比较快的速率。(另说,TCP在流媒体中也有用途)
总结:
应用 | 应用层协议 | 运输协议 |
---|---|---|
电子邮件 | SMTP | TCP |
远程终端访问 | Telnet | TCP |
Web | HTTP | TCP |
文件传输 | FTP | TCP |
远程文件服务器 | NFS | 通常 UDP |
流式多媒体 | 通常专用 | UDP 或 TCP |
因特网电话 | 通常专用 | UDP 或 TCP |
网络管理 | SNMP | 通常 UDP |
域名系统 | DNS | 通常 UDP |