介绍
TCP:(Transmission Control Protocol)传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,是专门为了在不可靠的网络中提供一个可靠的端对端字节流而设计的,面向字节流。
UDP:(User Datagram Protocol)用户数据报协议,是一种无连接的、基于报文的传输层协议,提供简单不可靠的非连接传输层服务,面向报文
区别
- TCP是面向连接的,可靠性高;UDP是基于非连接的,可靠性低
- 由于TCP是连接的通信,需要有三次握手、重新确认等连接过程,会有延时,实时性差,同时过程复杂,也使其易于攻击;UDP没有建立连接的过程,因而实时性较强,也稍安全
- 在传输相同大小的数据时,TCP首部开销20字节;UDP首部开销8字节,TCP报头比UDP复杂,故实际包含的用户数据较少。TCP在IP协议的基础上添加了序号机制、确认机制、超时重传机制等, 保证了传输的可靠性,不会出现丢包或乱序,而UDP有丢包,故TCP开销大,UDP开销较小
- 每条TCP连接只能时点到点的;UDP支持一对一、一对多、多对一、多对多的交互通信
知识点
TCP
- TCP的主要特点:面向连接的、点对点、全双工通信、面向字节流
- TCP可靠传输的原理:如果网络不好,我没有收到传输的数据,可以让发送方重新发送数据。如果我处理数据的速度有限,可以告诉发送方速度不要过快,在某个速度之下。
- 停止等待协议:停止等待,就是每发送完一个分组就停止发送,等待对方确认,收到确认后再发送下一个分组。如果按照这个策略,那么传输肯定是可靠的,因为每个数据对方都会确认是否收到。
- 超时时间选择:A向B发送了一个报文,但因为网络不好,B发送的确认报文A迟迟没有收到,A很着急,于是重发报文,但网络堵塞在那,A依然无法收到B的确认报文,反而因为A发了多次,导致网络更加堵塞了。所以,有个关键问题,超时时间该如何确定呢?太短会引起很多不必要的重传,太长也不行,会让网络的空闲时间增大,影响效率。TCP采用一种自适应算法。它记录一个报文段发出的时间,以及收到相应确认的时间,这两个时间之差不是报文段的往返时间RTT。
- 流量控制:网络的带宽有限,端处理数据速度有限,应该发送数据的速度应该要有限制,TCP使用滑动窗口来控制流量。
- 拥塞控制:假设端上处理能力非常强,有多少处理多少。那么发送端能无限制任意发送吗?明显是不行的,接收端处理能力强,不代表网络的带宽情况。如果网络拥堵的情况下,发送端发得过多,接收端依然收不到,还会导致大量的重发,效率相当低下。所以需要拥塞控制。
UDP
- UDP是传输层协议,功能即为在IP的数据报服务之上增加了最基本的服务:复用和分用以及差错检测。
- UDP无连接,时间上不存在建立连接需要的时延。空间上TCP需要在端系统中维护连接状态,需要一定的开销。
- UDP没有拥塞控制,能容忍一些数据的丢失,但是不能允许有较大的时延(比如实时视频,直播等)。
- UDP提供尽最大努力的交付,不保证可靠交付。
- UDP常用一次性传输比较少量数据的网络应用,如DNS,SNMP等,因为对于这些应用,若是采用TCP,在连接的创建,维护和断开存在不小的开销。
应用
- 对实时性要求高和高速传输的场合下使用UDP;在可靠性要求低,追求效率的情况下使用UDP
- 需要传输大量数据且对可靠性要求高的情况下使用TCP