写点什么

软件测试|TCP 三次握手四次挥手

  • 2023-09-15
    北京
  • 本文字数:1210 字

    阅读完需:约 4 分钟

TCP 为什么要进行三次握手和四次挥手呢?


在这个三次握手的过程中对应的消息内容是怎样进行传递的呢?


在四次挥手的过程中,是怎样告知对方断开连接的呢?

概念

三次握手

在说对应概念之前,我们先来了解一个场景:

场景

无论是工作还是没有工作的小伙伴,肯定都见过或经历过表白事件。那如果想要进行一次表白或者求婚,我们需要怎么做?


无论是表白、求婚都需要有对应的人,当然不只能有这个人,还需要和这个人建立一个连接。


不能说你自己把自己关在屋子里面自言自语的说,你能嫁给我吗?对方都没有听到你说的话,怎么会做出反应呢?


所以,最好是两个人面对面,才可以让对方听到到自己要说的话。约出来,面对面,就开始进行表白:



当然这种关系都是双方是能面对面找到对方的,即都是保持双方畅通的。


对应为 TCP 协议的三次握手如下图:


(1)第一次握手

Client 请求与 Server 端建立连接。


这里只是尝试的请求建立连接,A 到 B 的连接是否建立成功不知道

(2)第二次握手

Server在收到 Client 的请求后,响应ACK 报文 并分配资源。


这里 B 给 A 的 ACK 报文就表示Server同意 Client 跟它建立连接。


SYN 表示Server也想尝试 Client 建立连接,此时ServerClient 的连接是否建立还不确定。

(3)第三次握手

ClientServer发送 ACK 响应。在Server收到 Client的响应之后,此时双方的连接正式建立。

四次挥手

在说对应挥手概念之前,我们先来了解一个场景:

场景

还是和上面场景有关,结婚了然后在一起共同生活了一段时间后,发现双方不合适,需要离婚,要离开对方,就是挥手告别。那这个时候要经历的场景是什么呢?



对应为 TCP 协议的四次挥手如下图:


(1)第一次挥手

客户端发送 FIN 给服务端,尝试请求断开单方的连接。


此时单方连接断开与否还不能确定,要等服务端确认,因此此时的客户端处于 FIN_WAIT1 状态。

(2)第二次挥手

服务端收到断开请求后,服务端向客户端发送 ACK 回应,表示能断开了。


此时只是客户端到服务端连接断开,处于半断开状态。


服务端状态为:CLOSE_WAIT

(3)第三次挥手

服务端给客户端发送 FIN 请求,此时服务端处于最后一次确认状态(LAST_ACK 状态)。


此时还是没有断开连接,还得等待客户端回应。

(4)第四次挥手

客户端给服务端发送 ACK 回应。服务端收到之后,此时连接真正断开。

疑问点

  1. 为什么不是两次握手?为什么要三次?


因为真正连接的建立是要双方都建立到对方的连接。


如果只有两次握手,只能保证 A 到 B 的连接建立,但是 B 到 A 连接还未确认,所以第三次握手的主要作用就是 A 给 B 发送数据,如果没有第三次握手,A 就不会发送数据,此时 B 的状态一直为等待,造成的现象就是浪费资源。


  1. 为什么要进行四次挥手?为什么三次不行?


因为在挥手过程中会传递相关数据。其中,ACK 报文是用来的应答的,SYN 报文是用来同步的。


在 B 收到 A 的 FIN 请求后,不会立即关闭 SOCKET,会先发送一个 ACK 作为回应。所以 A 需要等 B 的数据发送完成之后,B 会再给 A 发送一个 FIN 请求告诉 A 已经结束了,此时 B 发送给 A 的两次请求不能合并,所以必须是四次挥手。


获取更多技术资料,请点击!

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
软件测试|TCP三次握手四次挥手_霍格沃兹测试开发学社_InfoQ写作社区