TCP 为什么采用三次握手和四次挥手以及 TCP 和 UDP 的区别

1. TCP 为什么采用三次握手和四次挥手

采用三次握手的原因:

  1. 确认双方的收发能力。第一次握手,客户端发送 SYN 报文,告诉服务器自身具备发送数据的能力,第二次握手,服务器回应 SYN + ACK 报文,表名自己既能发送数据也能接受数据,第三次握手,客户端发送 ACK 报文,确认自己也具备接受数据能力,以此来确保双方的收发能力处于正常情况。
  2. 防止失效连接请求干扰。如果客户端发送的连接请求因为网路延迟或其他原因停滞,之后客户端重新发送请求并成功建立连接,此时上一次停滞的连接请求到达服务器,如果服务器仅使用两次握手就建立连接,就会导致错误连接,通过三次握手,服务器收到延迟请求后回应,客户端并不知道这次回应是回应上次的消息,所以也不会向服务端发送 ACK 报文。
  3. 避免重复连接请求。如果没有第三次握手,客户端发送连接请求后未收到服务器响应而重发,服务器可能受到重复请求建立多个相同连接,造成资源浪费和混乱,第三次握手可以确认连接请求的唯一性。

采用四次挥手的原因:

  1. 全双工通信模式。由于 TCP 连接是全双工的,数据可在两个方向上同时传输,关闭连接时,每个方向的通信都需要单独关闭,所以需要双方分别发送 FIN 报文来通知对方自己不再发送数据了,再由对方发送 ACK 报文确认,这样另一端关闭时也需要向对方重复上述步骤,就是四次挥手。
  2. 确认数据完整传输。当一方发送 FIN 报文表示不再发送数据时,另一方可能还有数据没有发送完,接受 FIN 报文的一方先发送 ACK 确认,等到自身的数据发送完毕后,再发送 FIN 报文通知对方,这样就确保双方的数据都完整传输,避免数据丢失。
  3. 保证可靠的连接终止。每一次报文交互都是对对方关闭操作的确认,这种确认方式保证了连接关闭的可靠性和有序性,使双方都能明确连接的状态变化,正确释放与连接相关的资源。
  4. 等待时间保障。在第四次挥手中,最开始发送 FIN 报文的一方接收到对方的 FIN 报文并发送 ACK 后需要进入 TIME_WAIT 状态等待一段时间(通常为 2 倍的最大报文段寿命),这是为了确保对方能收到 ACK 报文,防止因为 ACK 丢失导致对方重发 FIN 报文,而这一方先结束了,也就保证了连接能够可靠的终止。

2. TCP 和 UDP 的区别:

  1. 连接方式:TCP 是有链接的协议(通信双方保存了通信对端的信息),UDP 是无连接的协议(没有保存)
  2. 可靠性:TCP 提供可靠的数据传输,通过确认应答,超时重传等机制来确保数据的完整性和准确性,如果说发送方发送的数据没有被接收方正确接收,发送方就会重新发送数据。UDP 则不提供可靠的数据传输,不会关心发送的数据是否被正确接收
  3. 传输效率:TCP 相对与 UDP 来说效率较低
  4. 传输的大小:TCP 传输是面向字节流的,UDP 传输是面向数据报的,传输的单位就不是字节了,一次发送 / 接收完整的数据报
  5. TCP 支持全双工(一个通信链路可以发送数据,也可以接收数据),UDP 支持全双工和半双工(一个通信链路只能发送/接收)
相关推荐
w_outlier1 小时前
UDP_TCP
linux·c++·网络协议·udp·tcp
cui_win1 小时前
Linux性能优化-系列文章-汇总
linux·网络·安全·性能优化
新知图书2 小时前
Linux C/C++编程-网络程序架构与套接字类型
网络·socket
网络安全(华哥)3 小时前
网络安全等级保护系统定级流程与示例
网络·安全·web安全
明达技术3 小时前
MR20强抗干扰一体式IO模块的革新力量
网络
ybq195133454314 小时前
javaEE-网络原理-1初识
网络
大丈夫立于天地间4 小时前
OSPF - 邻居的建立过程
网络·网络协议·学习·信息与通信
码农小菜袅5 小时前
【TCP】SYN、ACK、FIN、RST、PSH、URG的全称
服务器·网络·tcp/ip
SANGEDZ_YYDS5 小时前
三格电子新品上市——IEC103 转 ModbusTCP 网关
服务器·网络·tcp/ip
合方圆~小文5 小时前
高清监控视频的管理与展示:从摄像头到平台的联接过程
linux·网络·人工智能·云计算·智能家居