回到首页

TCP

TCP和UDP的区别

1. 连接性
TCP是面向连接的协议,在收发数据前必须和对方建立可靠的连接,建立连接的3次握手、断开连接的4次挥手,为数据传输打下可靠基础;UDP是一个面向无连接的协议,数据传输前,源端和终端不建立连接,发送端尽可能快的将数据扔到网络上,接收端从消息队列中读取消息段。
2. 可靠性
TCP提供可靠交付的服务,传输过程中采用许多方法保证在连接上提供可靠的传输服务,如编号与确认、流量控制、计时器等,确保数据无差错,不丢失,不重复且按序到达;UDP使用尽可能最大努力交付,但不保证可靠交付。
3. 报文首部
TCP报文首部有20个字节,额外开销大;UDP报文首部只有8个字节,标题短,开销小。

UDP报文结构

TCP报文结构
4. TCP协议面向字节流,将应用层报文看成一串无结构的字节流,分解为多个TCP报文段传输后,在目的站重新装配;UDP协议面向报文,不拆分应用层报文,只保留报文边界,一次发送一个报文,接收方去除报文首部后,原封不动将报文交给上层应用。
5. 吞吐量控制
TCP拥塞控制、流量控制、重传机制、滑动窗口等机制保证传输质量;UDP没有。
6. 双工性
TCP只能点对点全双工通信;UDP支持一对一、一对多、多对一和多对多的交互通信。
7. TCP和UDP的编程步骤

TCP编程步骤

UDP编程步骤
从上面TCP、UDP编程步骤可以看出,UDP 服务器端不需要调用监听(listen)和接收(accept)客户端连接,而客户端也不需要连接服务器端(connect)。UDP协议中,任何一方建立socket后,都可以用sendto发送数据、用recvfrom接收数据,不必关心对方是否存在,是否发送了数据。
8. TCP和UDP的使用场景
为了实现TCP网络通信的可靠性,增加校验和、序号标识、滑动窗口、确认应答、拥塞控制等复杂的机制,建立了繁琐的握手过程,增加了TCP对系统资源的消耗;TCP的重传机制、顺序控制机制等对数据传输有一定延时影响,降低了传输效率。TCP适合对传输效率要求低,但准确率要求高的应用场景,比如万维网(HTTP)、文件传输(FTP)、电子邮件(SMTP)等。
UDP是无连接的,不可靠传输,尽最大努力交付数据,协议简单、资源要求少、传输速度快、实时性高的特点,适用于对传输效率要求高,但准确率要求低的应用场景,比如域名转换(DNS)、远程文件服务器(NFS)等。
本知识点抄自一文读懂TCP、UDP协议区别和应用场景

TCP的三次握手和四次挥手

三次握手
三次握手的目的,是为了防止A端已经失效的连接请求突然又传到B端,被误认为是A端再次发出的一个新的连接请求,如果B端这时又再次向A发出确认报文,表示同意建立连接,就会产生错误。
第一次是A端向B端发送请求,如果是只有一次握手的话,A端不知道B端是不是收到了这个请求。
第二次是B端确认收到A端请求,如果只有两次的话,B端不确定A端是否收到了确认消息,这个确认消息有可能会在半路丢了。
第三次是A端确认收到了B的确认消息,A和B双方都是通的,然后AB就可以建立连接相互通信了。另可能有这种情况:A端的第一次握手请求停滞在半路上,B端不知道这个包,故没有第二次握手发送ACK的响应,故A端重新请求第一次握手,第二次握手得到B端的响应,准备建立连接;之后前面的第一次握手请求来到B端,B端认为A端又发来一个新的请求,响应并建立连接,但实际上A端只需要一个连接,只有两次握手造成服务端资源的浪费,没有第三次A端对建立连接的再次确认的话。

四次挥手
四次挥手的本质原因是tcp是全双公的,通信是双向的, A到B是一个通道,B到A又是另一个通道。
A端确认没有数据发送后,发出结束报文,此时B端返回确认后,B端也不会接收A端数据。
但是此时B端可能还有数据没有传输完,A端还是可以接收数据。
只有当B端数据发送完之后,才能发出结束报文,并且确认A端接收到的时候,两边才会真正的断开连接,双方的读写分开。
本知识点截取自为什么tcp建立连接需要三次握手,断开连接需要四次挥手

本文创建于2022.9.14/22.11,修改于2022.9.14/22.11