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

【面试刷题】——TCP三次握手,以及为什么要三次握手

TCP(传输控制协议)的三次握手是建立TCP连接的过程,它确保了通信双方的正常启动和参数协商。三次握手的过程如下:

客户端发送请求:

客户端首先向服务器发送一个特殊的TCP报文,称为SYN(同步)报文。这个报文包含一个随机的序列号(Client ISN),并请求建立连接。此时客户端进入"SYN-SENT"状态。

服务器回应:

服务器收到客户端的SYN报文后,如果同意建立连接,就会发送一个带有自己的序列号(Server ISN)的SYN-ACK报文,表示已经收到了客户端的请求,并且也准备好了建立连接。服务器端进入"SYN-RECEIVED"状态。

客户端确认:

客户端收到服务器的SYN-ACK报文后,会发送一个确认报文,其中的确认号(ACK)字段设置为服务器的序列号加1,表示客户端已经收到了服务器的回应。这个报文不包含数据,但可以携带客户端自己的数据。此时,客户端和服务器都进入"ESTABLISHED"状态,连接正式建立。

为什么要进行三次握手呢?这是为了确保通信双方都已准备好并能够正常传输数据。具体原因如下:

防止失效的连接请求导致资源浪费:

如果只进行两次握手,那么在第一次握手后,客户端发送的连接请求可能在网络中滞留,而客户端却认为连接已经建立。这种情况下,服务器将浪费资源等待一个并不存在的连接请求。通过第三次握手,可以确保服务器收到了客户端的连接请求。

防止旧连接的混淆:

在网络中,有可能出现延迟的、过期的、重复的、混乱的报文。通过三次握手,可以确保每个连接都有唯一的初始序列号(ISN),从而避免混淆。

保证双方都能发送和接收数据:

在第三次握手时,客户端发送一个确认报文,这表明客户端不仅能够接收数据,还能够发送数据。这是因为在第一次握手时,客户端只发送了一个SYN报文,还没有正式进入发送数据的状态。

总之,TCP的三次握手确保了双方都能够正确地接收和发送数据,并防止不必要的资源浪费和连接混淆。这是TCP协议的可靠性和稳定性的体现之一。

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

相关文章:

  • 算法系列-力扣206-单链表反转
  • 网络基础-应用层协议-HTTP/HTTPS
  • problen(5)ubuntu版本问题
  • 写一篇nginx配置指南
  • rhel8防火墙firewalld操作
  • OpenCV项目实战(2)— 如何用OpenCV实现弹球动画
  • golang iris框架 + linux后端运行
  • linux shell操作- 02 常用命令及案例
  • 考研408 | 【计算机组成原理】 数据的表示和运算
  • 【小沐学NLP】AI辅助编程工具汇总
  • linux动态扩容系统盘(非lvm磁盘)
  • Gitlab仓库部署
  • Day46:项目-购物车案例
  • 【小沐学CAD】嵌入式UI开发工具:GL Studio
  • Python:Tornado框架之获取get和post的传参
  • JSON和全局异常处理
  • 骨传导耳机有害处吗、骨传导耳机真的不好用吗?
  • 第一类曲面积分:曲面微元dσ与其投影面积微元dxdy之间的关系推导
  • vue学习之Font Awesome图标
  • mysql内连接与外连接详解
  • 在Mujoco环境下详细实现PPO算法应用于Humanoid-v2的完整教程
  • 怎么给网络加速
  • golang for循环append的数据重复
  • 趣谈网络协议_1
  • 利用WebStorm开发react——本文来自AI创作助手
  • 将本地构建的镜像推送到远程镜像库,构建多种系统架构支持的Docker镜像并推送到Docker Hub
  • 【技术分享】NetLogon于域内提权漏洞(CVE-2020-1472)
  • python学习之【模块】
  • dns电脑服务器发生故障怎么修复
  • Python项目Flask ipv6双栈支持改造