TCP和UDP之间的区别
1. 连接、无连接
他们之间的第一点并且最重要的区别是:TCP是面向连接的协议,而UDP是无连接的协议。这意味着当一个客户端和一个服务器通过TCP发送数据之前,必须先建立连接,他们可以通过TCP发送数据。建立连接的过程也被称为TCP握手,他通过控制消息在客户端和服务器之间互换来实现。下面的图形象描述了TCP握手过程。客户端,它也是TCP连接的发起者,发送一个SYN消息给服务器,该服务器端正在监听某个TCP端口。服务器接收该消息并发送一个SYN-ACK消息,客户端接受到该消息之后会再回一个ACK消息。一旦服务器收到ACK消息,TCP连接就建立成功,准备数据传输了。另一方面,UDP是无连接的协议,和点对点连接之前不需要发送消息。这就是为什么,UDP更加适合消息的多播发布,从单个点向多个点传输消息
2. 可靠性
TCP提供交付保证,这意味着一个使用TCP协议发送的消息是保证交付给客户端的。如果消息在传输过程中丢失,那么它将重发,这是由TCP协议本身控制的。另一方面,**UDP是不可靠的,**它不提供任何交付的保证。一个数据报包在运输途中可能会丢失。这就是为什么UDP是不适合保证交付的项目
3. 有序性
除了提供交付保证,为TCP也保证了消息的有序性。该消息将以从服务器端发出的同样的顺序发送到客户端,尽管这些消息到网络的另一端时可能是无序的。TCP协议将会为你排好序。UDP不提供任何有序性或序列性的保证。数据包将以任何可能的顺序到达。这就是为什么TCP是适合需要顺序交付方式的应用,尽管有基于UDP的协议通过使用序列号和重传来提供有序和可靠性的应用,如TIBCO Rendezvous,他实际上就是一个基于UDP的应用
4. 数据边界
TCP不保存数据的边界,而UDP保证。在传输控制协议,数据以字节流的形式发送,并没有明显的标志表明传输信号消息(段)的边界。在UDP中,数据包单独发送的,只有当他们到达时,才会再次集成。包有明确的界限来哪些包已经收到,这意味着在消息发送后,在接收器接口将会有一个读操作,来生成一个完整的消息。虽然TCP也将在收集所有字节之后生成一个完整的消息,但是这些信息在传给传输给接受端之前将储存在TCP缓冲区,以确保更好的使用网络带宽
5. 速度
总而言之,TCP速度比较慢,而UDP速度比较快,因为TCP必须创建连接,以保证消息的可靠交付和有序性,他需要做比UDP多的多的事。这就是为什么UDP更适用于对速度比较敏感的应用,例如:在线视频媒体,电视广播和多人在线游戏
6. 重量级、轻量级
由于上述的开销,TCP被认为是重量级的协议,而与之相比,UDP协议则是一个轻量级的协议。因为UDP传输的信息中不承担任何间接创造连接,保证交货或秩序的的信息。这也反映在用于承载元数据的头的大小
7. 头大小
TCP具有比UDP更大的头。一个TCP数据包报头的大小是20字节,UDP数据报报头是8个字节。TCP报头中包含序列号,ACK号,数据偏移量,保留,控制位,窗口,紧急指针,可选项,填充项,校验位,源端口和目的端口。而UDP报头只包含长度,源端口号,目的端口,和校验和。下图是TCP和UDP头:
- TCP包
- UDP包
8. 拥塞或流控制
TCP有流量控制。在任何用户数据可以被发送之前,TCP需要三数据包来设置一个套接字连接。TCP处理的可靠性和拥塞控制。另一方面,UDP不能进行流量控制
9. 用法和应用
在互联网中,TCP和UDP都运行在哪些环境中了?在了解了TCP和UDP之间的关键差异之后,我们可以很容易地得出结论,哪种情况适合他们。由于TCP提供可靠交付和有序性的保证,它是最适合需要高可靠并且对传输时间要求不高的应用。UDP是更适合的应用程序需要快速,高效的传输的应用,如游戏。UDP是无状态的性质,在服务器端需要对大量客户端产生的少量请求进行应答的应用中是非常有用的。在实践中,TCP被用于金融领域,如FIX协议是一种基于TCP的协议,而UDP是大量使用在游戏和娱乐场所