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

【网络|TCP】三次握手、四次握手

TCP是一种面向连接的可靠的传输协议,建立和断开TCP连接时需要进行握手的过程。其中,TCP的连接建立需要进行三次握手,而连接断开则需要进行四次握手。

解释

三次握手

  • 第一次握手:客户端发送一个SYN(同步)报文给服务器,表示客户端请求建立连接。这个报文中包含一个初始的序列号(sequence number)。

  • 第二次握手:服务器收到客户端的SYN报文后,会发送一个SYN+ACK(同步+确认)报文给客户端作为响应。这个报文中,SYN位被置为1,表示服务器同意建立连接,并且同时也发送一个确认序列号(acknowledge number)。

  • 第三次握手:客户端收到服务器的SYN+ACK报文后,会向服务器发送一个ACK(确认)报文。这个报文中,ACK位被置为1,表示客户端确认服务器的响应,并且发送一个确认序列号。

四次握手

  • 第一次握手:当客户端需要关闭连接时,发送一个FIN(结束)报文给服务器,表示自己已经没有数据要发送了,请求关闭连接。

  • 第二次握手:服务器发送一个ACK报文,服务器确认收到了关闭请求。此时,接收方进入半关闭状态,可以继续发送数据,但不再接收数据。

  • 第三次握手:服务器发送一个FIN报文给客户端,表示服务器也没有数据要发送了,并请求关闭连接。

  • 第四次握手:客户端收到服务器的FIN报文后,向服务器发送一个ACK报文,确认收到了关闭请求,并且发送一个确认序列号。

通俗易懂

        为什么要建立要三次,断开要四次?两次是否可以?断开三次行不行?

三次握手

        假设A和B是两个人要通过传纸条来交流。他们之间有一扇门,门上有一个信箱。他们希望通过这个信箱来传递纸条。但是,他们不确定对方是否能够收到和回复纸条。

  • 第一次握手:A先向B发出请求,他把一张纸条放进信箱,并敲了一下门。这个纸条上写着:“Hi B,我想和你建立通信连接,请确认你能够接收我的纸条。”此时,B收到了纸条,并知道A想要和他建立连接。但是,A并不知道B是否能够收到纸条。
  • 第二次握手:B收到纸条后,他在纸条上写下回复,并放进信箱里。然后,他也敲了一下门。这个纸条上写着:“Hi A,我收到了你的纸条,并且确认我能够接收你的纸条。我也想和你建立通信连接,请确认你能够接收我的回复。”此时,A收到了B的回复,并知道B能够接收纸条。但是,B并不知道A是否能够收到他的回复。
  • 第三次握手:A收到B的回复后,他在纸条上写下确认,并放进信箱里。然后,他再次敲了一下门。这个纸条上写着:“Hi B,我收到了你的回复,并且确认我能够接收你的纸条。我们可以建立通信连接了。”此时,B收到了A的确认,并知道A能够接收他的回复。双方都确认了彼此的通信能力。

        通过这个三次握手的过程,A和B都知道彼此的通信能力。他们可以开始通过传纸条来进行交流,而且双方都知道对方能够接收和回复纸条。这样,他们就建立了可靠的通信连接。

四次握手

        四次握手和三次握手原理基本一样,区别在与四次握手中B>A回了两次,原因是为了确保数据传输的完整性。第一次告诉A收到了,等B传输A的数据全部传输完毕后,再次告诉A传完了,可以关闭了。

总结

        如果三次握手改成两次,那就会导致B不知道A是否收到B发的请求,直接给A发数据,可能导致A收到这个数据。四次握手同理,每一次握手都是为了实现某些功能和解决某些问题,如果少了任何一步,就会导致这个问题的发生。

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

相关文章:

  • 刷题笔记 day7
  • Tuxera NTFS2023Mac强大的Mac读写工具
  • ARM64 常见汇编指令学习 11 -- ARM 汇编宏 .macro 的学习
  • 数据库的分库分表
  • [Docker实现测试部署CI/CD----相关服务器的安装配置(2)]
  • LC-980. 不同路径 III(回溯)
  • 软件测试缺陷报告
  • vue js-table2excel 导出excel 可带多张图片
  • HTML 基础标签
  • Nginx使用proxy_cache指令设置反向代理缓存静态资源
  • React安装ant design组件库,并使用
  • Leetcode | 有效的括号、最长有效括号
  • 思科模拟器配置静态路由(下一跳使用IP)
  • MyBatis -- 执行流程
  • springboot背诵
  • WebGL: 几个入门例子
  • App Cleaner Uninstaller for Mac 苹果电脑软件卸载工具
  • 基于Yolov2深度学习网络的车辆检测算法matlab仿真
  • Java的I/O类库- NIO
  • 【ASP.NET MVC】使用动软(三)(11)
  • 基于MATLAB长时间序列遥感数据植被物候提取与分析
  • K8S deployment 重启的三种方法
  • 解决Linux下PyCharm无法新建文件
  • 规则引擎技术解决方案
  • 2023奇安信天眼设备--面试题
  • 【剑指Offer 58】 左旋转字符串,Java解密。
  • Python SMTP发送邮件
  • Jmeter-获取接口响应头(Response headers)信息进行关联
  • 解密爬虫ip是如何被识别屏蔽的
  • GPIO实验