一、TCP和UDP是什么?
TCP:传输控制协议(Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信 协议。由IETF的RFC 793定义。
UDP:用户数据报协议(User Datagram Protocol),是一种面向无连接,不可靠、以数据报文段的形式传输的传输层通信协议。由RFC 768描述了UDP。
二、TCP与UDP的区别是什么?
1、连接方面
TCP面向连接(如打电话先拨号建立连接)。
UDP无连接,即发送数据报之前不用建立连接。
2、安全方面
TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复且按序到达。
UDP尽最大努力交付,即不保证可靠交付。
3、传输效率
TCP传输效率较低,UDP传输效率较高。
4、连接数量的区别
TCP连接只能是一对一、点对点的。
UDP支持一对一、一对多、多对一和多对多的交互通信。
5、首部
TCP报文首部20个字节,UDP首部8个字节。
6、可靠
TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。
7、面向方式
TCP面向字节流。实际上是TCP把数据看成一串无结构的字节流,由于连接的问题,当网络出现波动时,连接可能出现响应问题。
UDP是面向报文的。UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。
三、TCP的三次握手与四次挥手
1、TCP三次握手
三次握手是TCP用来确保连接可靠建立的方式:
- 第一次握手:A给B发短信说:“B,你现在有空吗?”
- 第二次握手:B此时收到了A的信息,然后对A说:“我有空,你呢?有空吗?”
- 第三次握手:A此时收到了A的信息,然后说:“我也有空,那我给你说个事。”
在三次握手之后,A和B都能确定这么一件事:双方的通信可以流畅的进行。这样,双方就可以开始进行正常的对 话了。
2、TCP四次挥手
四次挥手是TCP用来确保连接可靠关闭的方式:
- 第一次挥手:A给B发短信说,“B,我要准备吃饭了?”
- 第二次挥手:B此时收到了A的信息,然后先对A说:“我知道了。”
- 第三次挥手:B对A说:“我也要准备吃饭了。”然后放下了手机
- 第四次挥手:A此时收到了B的确认信息,然后向B发送一个包说:“好的,知道了。”这时才放下手机去吃饭
在四次挥手之后,A和B都能确定这么一件事:双方的通信都可以正常关闭,这样,双方就可以确定对方已经完全知道了自己要确认关闭连接。
3、为什么握手要三次,挥手需要四次?
三次握手是客户端与服务端建立通信的过程。
第一次:客户端向服务端发送请求,确认服务端是否能够收到请求。
第二次:服务端向客户端响应,告诉客户端,我已经收到你的请求。并且准备好接收其他请求
第三次:客户端再次发送请求,告诉服务端,我已经收到了你的恢复,并且我也准备好了。
四次挥手是客户端与服务端结束通信的过程。
第一次:客户端向服务端发起结束的请求。
第二次:服务端向客户端响应,收到你结束请求的通知了。
第三次:服务端向客户端发起,服务端收到这样的请求后,会去处理现有的数据请求,在现有的数据请求处理完成以后,会正式回复客户端的结束请求。
第四次:客户端向服务端发起,表示已经收到了你的结束回复。
四、TCP和UDP的使用场景
1、TCP的使用场景
相对于UDP,TCP实现了数据传输过程中的各种控制,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。在对可靠性要求较高的情况下,可以使用TCP。(特别是需要可靠连接,比如付费、加密数据等等方向都需要依靠TCP)
2、UDP的使用场景
- 包总量较小的通信(DNS,SNMP)
- 视频、音频等多媒体通信(即时通信)QQ就是使用的UDP协议。
- 广播通信
五、TCP维护可靠的通信方式
1、数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组。
2、到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认包。
3、超时重发:发送方在发送分片后计时,若超时却没有收到相应的确认包,将会重发对应的分片。
4、滑动窗口:TCP连接双方的接收缓冲空间大小都固定,接收端只能接受缓冲区能容纳的数据。
5、失序处理:TCP的接收端需要重新排序接收到的数据。
6、重复处理:如果传输的TCP分片出现重复,TCP的接收端需要丢弃重复的数据。
7、数据效验:TCP通过保持它首部和数据的检验和来检测数据在传输过程中的任何变化。
新排序接收到的数据。
6、重复处理:如果传输的TCP分片出现重复,TCP的接收端需要丢弃重复的数据。