TCP和UDP的差异有哪些

网易智企 TOP1 662

TCP和UDP的差异有以下3点:1.数据发送方式的差异;2.数据有序性的差异;3.可靠性的差异。”数据发送方式的差异”是指TCP发送的数据流不存在大小的限制,但UDP就有一个上限的大小。因为UDP协议,UDP报文长度不能超过2^16=65536。

1.数据发送方式的差异

由于 TCP 是建立在两端连接之上的协议,所以理论上发送的数据流不存在大小的限制。但是由于缓冲区有大小限制,所以你如果用 TCP 发送一段很大的数据,可能会截断成好几段,接收方依次的接收。

由于 UDP 本身发送的就是一份一份的数据报,所以自然而然的就有一个上限的大小。每次 UDP 发送的数据报大小由哪些因素共同决定呢?UDP协议本身,UDP协议中有16位的UDP报文长度,那么UDP报文长度不能超过2^16=65536;

以太网(Ethernet)数据帧的长度,数据链路层的MTU(最大传输单元);

socket的UDP发送缓存区大小。先来看第一个因素,UDP 本身协议的报文长度为 2^16 – 1,UDP 包头占 8 个字节,IP 协议本身封装后包头占 20 个字节,所以最终长度为: 2^16 – 1 – 20 – 8 = 65507 字节。只看第一个因素有点理想化了,因为 UDP 属于不可靠协议,应该尽量避免在传输过程中,数据包被分割。所以这里有一个非常重要的概念 MTU—也就是最大传输单元。在 Internet 下 MTU 的值为 576 字节,所以在 internet 下使用 UDP 协议,每个数据报最大的字节数为: 576 – 20 – 8 = 548

2.数据有序性的差异

对于 TCP 来说,本身 TCP 有着超时重传、错误重传、还有等等一系列复杂的算法保证了 TCP 的数据是有序的,假设发送了数据 1、2、3,则只要发送端和接收端保持连接时,接收端收到的数据始终都是 1、2、3。

UDP 协议,无论 server 端无论缓冲池的大小有多大,接收 client 端发来的消息总是一个一个的接收。并且由于 UDP 本身的不可靠性以及无序性,如果 client 发送了 1、2、3 这三个数据报过来,server 端接收到的可能是任意顺序、任意个数三个数据报的排列组合。

3.可靠性的差异

TCP 内部的很多算法机制让他保持连接的过程中是很可靠的。比如:TCP 的超时重传、错误重传、TCP 的流量控制、阻塞控制、慢热启动算法、拥塞避免算法、快速恢复算法 等等。所以 TCP 是一个内部原理复杂,但是使用起来比较简单的这么一个协议。

UDP 是一个面向非连接的协议,UDP 发送的每个数据报带有自己的 IP 地址和接收方的 IP 地址,它本身对这个数据报是否出错,是否到达不关心,只要发出去了就好了。

以上就是关于TCP和UDP的差异介绍。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部