UDP和TCP的联系和区别
UDP和TCP的联系和区别
1、什么是TCP?什么是UDP?

在TCP/IP中能够实现传输层功能的、具有代表性的协议是TCP和UDP
传输控制协议TCP(Transmission Control Protocol):
TCP是面向连接的、可靠性流协议。流指的是不间断的数据结构。
我们可以把它当作管道中的水流。当应用程序采用TCP发送消息时,TCP虽然能够保证传输的顺序,但还是犹如没有任何间隔的数据流发送给接收端。
TCP提供可靠性传输,实行“顺序控制”或者“重发控制”机制。此外还具有“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。
用户数据报协议UDP(User Datagram Protocol):
UDP是不具有可靠性的数据报协议。
在UDP的情况下,可以确保发送发送信息的大小,缺不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。
2、TCP与UDP的对比
UDP是无连接的,TCP是面向连接的:
两台主机进行数据传输,它们在运输层使用UDP协议进行通信,使用双方可以随时发送数据;而使用TCP协议进行的通信,双方必须使用“三报文握手”来建立连接,TCP连接建立成功后才可以进行数据传输,而传输结束后必须进行“四报文挥手”释放TCP连接。(这里的连接是指主机之间的逻辑连接)。
UDP支持单播、多播以及广播,TCP仅支持单播:
在多台主机之间,它们在运输层使用UDP协议进行通信,其中某一台主机可以向其他主机进行广播,也可以向某个多波组发送多播,也可以向某个主机发送单播;而使用TCP协议进行的通信,在数据连接之前,必须使用“三报文握手”来建立连接,连接成功后,通信双方好像建立了一条可靠的通信信道,通信双方可以使用这条基于TCP连接的可靠信道进行通信,如此看来主机基于TCP协议进行通信仅支持单播
UDP是面向应用报文的,TCP是面向字节流的:
假设两台主机进行数据通信,双方分别为发送方和接收方,先来看使用UDP协议的情况,发送方的的应用进程将应用报文交付给运输层的UDP,UDP则在应用报文添加一个UDP首部,使其成为UDP用户数据报,然后进行发送。接收方的UDP收到的UDP用户数据报后,去掉UDP首部,将应用报文交付给应用进程,期间UDP对应用进程交付下来的应用报文既不合并也不拆分,进添加和删除一个UDP首部。
再来看使用TCP协议的情况,发送方的TCP把应用进程发送的应用报文仅仅看着成一连串的、无结构的字节流,TCP仅仅将他们编号并存储在自己的发送缓存当中。TCP会根据发送策略从发送缓存中提取出一定数量的字节构建TCP报文段进行发送。接受方的TCP一方面将接受的TCP报文段存储在接受缓存中,一方面将接受缓存中的一些字节交付给应用进程。TCP不保证接收方的应用进程所接受的数据块,与发送方的应用进程所发送的数据块具有相对应大小的关系。例如发送方应用进程交给发送方TCP共10个数据块,但接受方的TCP仅用4个数据块就把收到的字节流交付给上层应用进程。接受方应用进程收到的字节流必须和发送方应用进程发出的字节流完全一样。而且接收方的应用进程必须有能力识别收到的字节流,把它们还原成有意义的应用层数据。在实际网络中,使用基于TCP连接的双方是可以进行双方通信,也就是全双工通信。
UDP向上层提供无连接不可靠的传输服务,TCP向上层提供面向连接的可靠的数据传输服务:
在使用UDP协议的情况,运输层使用UDP协议,其向上层提供无连接不可靠的传输服务。发送方给接受方发送UDP数据报,若传输过程中用户数据报受到干扰而产生误码,接受方UDP可以通过数据报首部中的校验和字段的值,检查出误码的情况,但仅仅是丢弃该数据报,不对其进行其他处理。发送方给接受方发送UDP数据报,若传输过程中如果该数据报文被因特网中某个路由器丢弃了,发送也不进行任何处理,因为UDP向上层提供无连接不可靠的传输服务。因此UDP用户数据报发生的丢弃和误码等问题,UDP并不关心。基于UDP这个特点,UDP适用于实时应用,例如视频会议、IP电话。
另外再来看使用TCP协议的情况,尽管网际层中的IP协议向上提供的是无连接不可靠的传输服务,那么IP数据报传输中可能会出现丢失和误码,但其运输层使用TCP协议,就可以向上层提供面向连接的可靠的数据传输服务。使用TCP协议进行通信的双方是基于TCP连接的可靠信道,传输过程中不会出现差错(丢失、误码、乱序、重复),适用于要求可靠传输的应用。
3、TCP报文段首部和UDP用户数据报文首部



浙公网安备 33010602011771号