一、TCP、UDP概念
- TCP(Transmission Control Protocol):传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。由IETF的RFC 793定义。
- UDP(User Datagram Protocol):用户数据报协议,是一种面向无连接,不可靠、以数据报文段的形式传输的传输层通信协议。由RFC 768描述了UDP。
TCP报文格式
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的使用场景
当对网络通讯质量要求不高时,要求网络通讯速度能尽量快,这时就可以使用UDP。在日常生活中,常见使用UDP协议的应用,比如QQ语音、QQ视频、TFTP等。
- 包总量较小的通信(DNS,SNMP)
- 视频、音频等多媒体通信(即时通信)
- 广播通信
- 对数据安全性无特殊要求
- 网络负担非常重,但对响应速度要求高
五、TCP维护可靠的通信方式
1、数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组。
2、到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认包。
3、超时重发:发送方在发送分片后计时,若超时却没有收到相应的确认包,将会重发对应的分片。
4、滑动窗口:TCP连接双方的接收缓冲空间大小都固定,接收端只能接受缓冲区能容纳的数据。
5、失序处理:TCP的接收端需要重新排序接收到的数据。
6、重复处理:如果传输的TCP分片出现重复,TCP的接收端需要丢弃重复的数据。
7、数据效验:TCP通过保持它首部和数据的检验和来检测数据在传输过程中的任何变化。
新排序接收到的数据。
6、重复处理:如果传输的TCP分片出现重复,TCP的接收端需要丢弃重复的数据。
7、数据效验:TCP通过保持它首部和数据的检验和来检测数据在传输过程中的任何变化。