5.3 UDP和TCP的对比
# 5.3 UDP和TCP的对比
本节课我们将从几个方面对比UDP和TCP。UDP和TCP是TCP体系结构运输层中的两个重要协议,如图所示,这是我们之前课程中介绍过的TCP/IP体系结构。它的运输层有两个非常重要的协议UDP和TCP。在使用TCPIP体系结构的网络通信中,这两个协议的使用频率仅次于往基层的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的流量控制和拥塞控制比较复杂,我们并未在本节课中有关他们的介绍,我们将在后续课程中进行。