当前位置: 首页 > news >正文

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 支持全双工和半双工(一个通信链路只能发送/接收)

 

http://www.lryc.cn/news/514527.html

相关文章:

  • springboot配置并使用RestTemplate
  • 人工智能-Python网络编程-TCP
  • 【Java回顾】Day3 继承|Override/Ovverload|多态|抽象类|封装|接口|枚举
  • SpringMVC(四)响应
  • vim 的基础使用
  • 关于flinkCDC监控mysql binlog时,datetime类型自动转换成时间戳类型问题
  • 基于Springboot校园失物招领系统【附源码】
  • 单片机端口操作和独立引脚操作
  • 【Vim Masterclass 笔记03】S03L10 + S03L11:Vim 中的文本删除操作以及 Vim 思维习惯的培养(含 DIY 拓展知识点)
  • ARM200~500部署
  • word中插入zotero引用
  • 需求上线,为什么要刷缓存?
  • TVS二极管选型【EMC】
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(一)-递归实现指数型枚举、递归实现排列型枚举
  • C#对线程同步的应用
  • 基于微信小程序的面部动作检测系统
  • Activation Functions
  • 《Vue3实战教程》37:Vue3生产部署
  • Linux:各发行版及其包管理工具
  • 【计算机网络】课程 作业一 搭建连续覆盖的办公网络
  • C++ 设计模式:单例模式(Singleton Pattern)
  • OpenCV调整图像亮度和对比度
  • Kafka Offset explorer使用
  • 二维码文件在线管理系统-收费版
  • UE4.27 Android环境下获取手机电量
  • vue-i18n报错
  • Docker新手:在tencent云上实现Python服务打包到容器
  • React基础知识学习
  • ES IK分词器插件
  • 二十三种设计模式-抽象工厂模式