《计算机网络微课堂》5-3 UDP和TCP的对比
本节课我们将从几个方面对比 UDP 和 TCP。
UDP 和 TCP 是 TCP/IP 体系结构运输层中的两个重要协议,如图所示,这是我们之前课程中介绍过的 TCP/IP 体系结构,它的运输层有两个非常重要的协议 UDP 和 TCP。在使用 TCP/IP 体系结构的网络通信中,这两个协议的使用频率仅次于往基层的 IP 协议,TCP/IP 体系结构应用层中的某些协议,需要使用运输层的 TCP 提供的服务,而另一些协议需要使用运输层的 UDP 提供的服务。
UDP 是用户数据报协议的英文缩写词,TCP 是传输控制协议的英文缩写词,接下来我们将从几个方面对这两个协议进行比较,如图所示,这是因特网上的两台主机,他们在运输层使用 UDP 协议进行通信,纵坐标为时间,使用 UDP 协议的通信双方可以随时发送数据。
再来看使用 TCP 协议的情况,使用 TCP 协议的通信双方在进行数据传输之前,必须使用三报文握手来建立 TCP 连接,TCP 连接建立成功后才能进行数据传输结束后,必须使用四报文挥手来释放 TCP 连接。三报文握手和四报文挥手,属于 TCP 的连接管理,其过程比较复杂,我们将在后续课程中专门介绍,需要注意的是这里所谓的连接是指逻辑连接关系,而不是物理连接。
综上所述,UDP 是无连接的,而 TCP 是面向连接的。
来看这个对比项,这是某个局域网上的需要 UDP 协议进行通信的 4 台主机,其中任何一台主机都可向其他三台主机发送广播,也可以向某个多播组发送多播,还可以向某台主机发送单播,也就是说 UDP 支持单播多播以及广播。换句话说,UDP 支持一对一,一对多以及一对全的通信。
再来看使用 TCP 协议的情况,使用 TCP 协议的通信双方在进行数据传输之前,必须使用三报文握手来建立 TCP 连接,TCP 连接建立成功后,通信双方之间就好像有一条可靠的通信信道,通信双方使用这条基于 TCP 连接的可靠信道进行通信,很显然 TCP 仅支持单播,也就是一对一的通信。
接下来我们来对比这两个协议对应用报文的处理。先来看使用 UDP 协议的情况,发送方的应用进程,将应用层报文交付给运输层的 UDP,UDP 直接给应用层报文,添加一个 UDP 首部,使之成为 UDP 用户数据报,然后进行发送。
需要说明的是为了简单起见,我们忽略运输层下面的各层处理,接受方的 UDP 收到该 UDP 用户数据报后,去掉 UDP 首部,将应用层报文交付给应用进程,也就是说 UDP 对应用进程交下来的报文,既不合并也不拆分,而是保留这些报文的边界。换句话说,UDP 是面向应用报文的。
再来看使用 TCP 协议的情况,发送方的 TCP把应用进程交付下来的数据块,仅仅看作是一连串的无结构的字节流,TCP 并不知道这些待传送的字节流的含义,仅将他们编号并存储在自己的发送缓存中。TCP 根据发送策略,从发送缓存中提取一定数量的字节,构建 TCP 报文段并发送。接收方的 TCP,一方面从所接收到的 TCP 报文段中取出数据载荷部分,并存储在接收缓存中,一方面将接收缓存中的一些字节交付给应用进程,TCP 不保证接收方应用进程所收到的数据块与发送方应用进程和发出的数据块具有对应大小的关系。例如发送方应用进程交给发送方的 TCP,共 10 个数据块,但接收方的 TCP 可能只用了 4 个数据块,就把收到的字节流交付给了上层的应用进程,但接收方应用进程收到的字节流必须和发送方应用进程发出的字节流完全一样。
当然,接收方的应用进程必须有能力识别收到的字节流,把它还原成有意义的应用层数据,也就是说 TCP 是面向自字节流的,这正是 TCP 实现可靠传输,流量控制以及拥塞控制的基础。
需要说明的是为了突出示意图的要点,我们只画出了一个方向的数据流,在实际网络中基于 TCP 连接的两端,可以同时进行 TCP 报文段的发送和接收,也就是全双工通信。另外图中 TCP 报文段的数据部分只包含了几个字节,实际当中一个 TCP 报文段包含上千个字节是很常见的。
再来看下一个对比项,在之前的课程中,我们曾介绍过 TCPIP 体系结构的往继层向其上层提供的是无连接不可靠的传输服务,当运输层使用 UDP 协议时,向其上层提供的也是无连接不可靠的传输服务,发送方给接收方发送 UDP 用户数据报,若传输过程中,用户数据报受到干扰而产生误码,接收方 UDP 可以通过该数据报首部中的校验和字段的值,检查出产生误码的情况,但仅仅丢弃该数据报,其他什么也不做。
发送方给接收方发送 UDP 用户数据报,如果该数据报被因特网中的某个路由器丢弃了,发送方 UDP 不做任何处理,因为 UDP 向上层提供的是无连接不可靠的传输服务。因此对于 UDP 用户数据报出现的误码和丢失等问题,UDP 并不关心。基于 UDP 的这个特点,UDP 适用于实时应用,例如 IP 电话、视频会议等。
再来看使用 TCP 协议的情况,尽管网际层中的 IP 协议向上层提供的是无连接不可靠的传输服务,也就是说 IP 数据报可能在传输过程中出现丢失或误码,但只要运输层使用 TCP 协议,就可向其上层提供面向连接的可靠传输服务。我们可将其想象成使用 TCP 协议的收发双方,基于 TCP 连接的可靠性到进行数据传输,不会出现误码丢失、乱序以及重复等传输差错。
TCP 适用于要求可靠传输的应用,例如文件传输。
最后我们再来对比一下 UDP 用户数据报的首部与 TCP 报文段的首部。一个 UDP 用户数据报由首部和数据载荷两部分构成,其首部格式如图所示仅有 4 个字段,每个字段长度为 2 个字节。由于 UDP 不提供可靠传输服务,它仅仅在网际层的基础上添加了用于区分应用进程的端口,因此他的首部非常简单,仅有 8 个字节
1 个 TCP 报文段,有首部和数据载荷两部分构成,其首部格式如图所示,这比 UDP 用户数据报的首部复杂的多,其最小长度为 20 字节,最大长度为 60 字节,这是因为 TCP 要实现可靠传输,流量控制、拥塞控制等服务,其首部自然会比较复杂,首部中的字段比较多,首部长度也比较长。
本节课的内容小结如下,需要说明的是 TCP 的流量控制和拥塞控制比较复杂,我们并未在本节课中有关他们的介绍,我们将在后续课程中进行。