有两种类型的Internet协议(IP)通信。 它们是TCP(传输控制协议)以及UDP(用户数据报协议)。 TCP是面向连接的 – 建立连接后,可以双向发送数据。UDP是一种更简单的无连接Internet协议。 使用UDP将多条消息作为数据包成块发送。
1. TCP和UDP的区别
下面是TCP和UDP的对比和区别:
比较项 | TCP | UDP |
---|---|---|
全称 | Transmission Control Protocol | User Datagram Protocol 或 Universal Datagram Protocol |
连接 | 传输控制协议是一种面向连接的协议。 | 用户数据报协议是无连接协议。 |
功能 | 消息通过互联网从一台计算机传播到另一台计算机。这是基于连接的。 | UDP还是用于消息传输或传输的协议。它不是基于连接的,这意味着一个程序可以向另一程序发送大量的数据包,不管对方能不能收到。 |
使用/适用 | TCP适用于要求高可靠性的应用程序,并且传输时间的重要性相对较低。 | UDP适用于需要快速,高效传输的应用程序,例如游戏。 UDP的无状态性质对于回答来自大量客户端的小查询的服务器也很有用。 |
被其他协议使用 | HTTP, HTTPs, FTP, SMTP, Telnet | DNS, DHCP, TFTP, SNMP, RIP, VOIP |
数据包顺序 | TCP按照指定的顺序重新排列数据包。 | UDP没有固有的顺序,因为所有数据包都是相互独立的。 如果需要指定顺序,则必须由应用程序层进行管理。 |
传输速度 | TCP的速度比UDP慢。 | UDP速度更快,因为UDP未尝试进行错误恢复。它是“尽力而为”协议。 |
可靠性 | 绝对保证所传输的数据保持完整并以与发送时相同的顺序到达。 | 不能保证发送的消息或数据包将完全到达。 |
标头大小 | TCP标头大小为20个字节 | TCP标头大小为8个字节 |
通用标头字段 | 源端口,目标端口,校验和 | 源端口,目标端口,校验和 |
数据流 | 数据被作为字节流读取,没有区别的指示被发送到信号消息(段)边界。 | 数据包是单独发送的,只有到达时才检查完整性。 数据包具有确定的边界,在接收时会遵守这些边界,因此在接收方套接字上进行的读取操作将产生原始发送的完整消息。 |
重量级 | TCP是重量级的。在发送任何用户数据之前,TCP需要三个数据包来建立套接字连接。 TCP处理可靠性和拥塞控制。 | UDP是轻量级的。 没有消息排序,没有跟踪连接等。它是设计在IP之上的小型传输层。 |
数据流控制 | TCP进行流控制。 在发送任何用户数据之前,TCP需要三个数据包来建立套接字连接。 TCP处理可靠性和拥塞控制。 | UDP没有用于流量控制的选项。 |
错误检查 | TCP执行错误检查和错误恢复,错误的数据包将从源重新传输到目的地。 | UDP会执行错误检查,但只会丢弃错误的数据包。 不尝试错误恢复。 |
位域 | 1.序列号,2.AcK编号,3.数据偏移,4.保留,5.控制位,6.窗口,7.紧急指针,8.选项,9.填充,10.检查和,11.源端口, 12.目的端口 | 1.长度,2.源端口,3.目标端口,4.校验和 |
确认 | 确认段 | 不确认 |
握手 | SYN, SYN-ACK, ACK | 无握手(无连接协议) |
2. 数据传输功能的区别
TCP确保从用户到服务器的字节流可靠有序地传递,反之亦然。 UDP不专用于端对端连接,并且通信不检查接收器的准备情况。
2.1. 可靠性
TCP更可靠,因为它可以管理消息确认和部分丢失的情况下的重传。 因此,绝对没有丢失的数据。 由于不存在确认,超时和重传的概念,UDP无法确保通信已到达接收方。
2.2. 顺序
TCP传输按顺序发送,并按相同的顺序接收。如果数据段顺序错误,TCP将重新排序并交付应用程序。 对于UDP,发送的消息序列在到达接收应用程序时可能无法维护。 绝对没有办法预测接收消息的顺序。
2.3. 连接
TCP是一个重量级的连接,需要三个数据包用于套接字连接,并处理拥塞控制和可靠性。 UDP是在IP之上设计的轻量级传输层。 没有跟踪连接或消息顺序。
2.4. 传输方式
TCP读取数据作为字节流,并将消息传输到段边界。 UDP消息是单独发送的数据包,到达时将检查其完整性。 数据包没有边界时,数据包已定义边界。
2.5. 错误检测
UDP在“尽力而为”的基础上工作。 UDP协议支持通过校验和进行错误检测,但是当检测到错误时,将丢弃数据包。 没有尝试重新发送数据包以从该错误中恢复。 这是因为UDP通常用于对时间敏感的应用程序,例如游戏或语音传输。 从错误中恢复将是毫无意义的,因为到重新发送的数据包被接收时,它将毫无用处。
TCP同时使用错误检测和错误恢复。 错误通过校验和检测,如果数据包错误,则接收方不会确认该错误,从而触发发送方重新发送。 此操作机制称为“带重传的肯定确认”(PAR)。
3. TCP和UDP如何工作
TCP连接是通过三向握手建立的,握手是启动和确认连接的过程。 建立连接后,即可开始数据传输。 传输后,通过关闭所有已建立的虚拟电路来终止连接。
UDP使用一种简单的传输模型,而不使用隐式的握手对话来保证可靠性,排序或数据完整性。因此,UDP提供了不可靠的服务,数据报可能会乱序到达,出现重复或丢失而不会发出通知。 UDP假定不需要或不需要在应用程序中执行错误检查和纠正,从而避免了在网络接口级别进行此类处理的开销。与TCP不同,UDP与包广播(发送到本地网络上的所有包)和多播(发送到所有订户)兼容。
4. TCP和UDP的不同应用
Web浏览,电子邮件和文件传输是使用TCP的常见应用程序。 TCP用于控制段大小,数据交换速率,流量控制和网络拥塞。在网络接口级别需要纠错功能的情况下,首选TCP。 UDP主要用于对时间敏感的应用程序以及回答来自大量客户端的少量查询的服务器。 UDP与数据包广播兼容-发送到网络上的所有人并进行多播-发送给所有用户。 UDP通常用于域名系统,IP语音,普通文件传输协议和在线游戏中。
5. TCP与UDP游戏服务器
对于大型多人在线(MMO)游戏,开发人员通常不得不在使用UDP或TCP持久连接之间做出架构选择。 TCP的优点是持久的连接,可靠性以及能够使用任意大小的数据包。 在这种情况下,TCP的最大问题是其拥塞控制算法,该算法将数据包丢失视为带宽限制的标志,并自动限制数据包的发送。 在3G或Wi-Fi网络上,这可能会导致严重的延迟。
经验丰富的开发人员会权衡利弊,并建议以下条件来选择在游戏中使用TCP还是UDP:
- 如果可以偶尔出现延迟,请使用HTTP,客户端启动的无状态查询。
- 如果客户端和服务器都独立发送数据包,但偶尔会有延迟(例如,在线扑克,许多MMO),请使用持久性普通TCP套接字。
- 如果客户端和服务器都可以独立发送数据包并且偶尔出现滞后现象(例如,大多数多人动作游戏,某些MMO),请使用UDP。
【TCP和UDP的区别】转载自:http://www.hasdiffer.com/tcp-vs-udp.html