Skip to content
On this page

TCP 连接 三次握手 四次挥手

题目

请描述 TCP 连接的 三次握手 和 四次挥手

建立连接

客户端和服务端通过 HTTP 协议发送请求,并获取内容。

在发送请求之前,需要先建立连接,确定目标机器处于可接受请求的状态。
就例如,你要请快递员(第三方的)去张三家取一个东西,你必须先打电话问问他在不在家。这就是建立连接的过程。

HTTP 协议是一个应用层的协议,它只规定了 req 和 res 的数据格式,如状态码、header、body 等。
而建立网络连接需要更加底层的 TCP 协议。

三次握手

三次握手,即建立一次 TCP 连接时,客户端和服务端总共需要发送 3 个包。

先举一个例子。还是你要派人去张三家取一个东西,现在你要发短信(不是打电话)“建立连接”,至少需要 3 个步骤,缺一不可。

  • 你:在家吗?
  • 张三:在家
  • 你:好,这就过去(然后你指派人上门,张三准备迎接)

过程

  • 客户端发包,服务端收到。服务端确认:客户端的发送能力是正常的。
  • 服务端发包,客户端收到。客户端确认:服务端的接收能力是正常的。
  • 客户端发包,服务端收到。服务端确认:客户端即将给我发送数据,我要准备接收。

建立连接完成,然后就开始发送数据,通讯。

四次挥手

握手,是建立连接。挥手,就是告别,就是关闭连接。

还是之前的例子。取东西,不一定一次就取完,可能要来回很多次。而且,也不一定全部由你主动发起,过程中张三也可能会主动派人给你发送。
即,你在 chrome 中看到的是一次 http 请求,其实背后可能需要好几次网络传输,只不过浏览器给合并起来了。

好了,取东西完毕了,你要发短信“关闭连接”,告诉张三可以关门了,需要 4 个步骤。
【注意】这里你需要等着确认张三关门,才算是完全关闭连接,不能你说一声就不管了。跟日常生活不一样。

  • 你:完事儿了
  • 张三:好的 (此时可能还要继续给你发送,你也得继续接收。直到张三发送完)
  • 张三:我发送完毕,准备关门了
  • 你:好,关门吧 (然后你可以走了,张三可以关门了,连接结束)

过程

  • 客户端发包,服务端接收。服务端确认:客户端已经请求结束
  • 服务端发包,客户端接收。客户端确认:服务端已经收到,我等待它关闭
  • 服务端发包:客户端接受。客户端确认:服务端已经发送完成,可以关闭
  • 客户端发包,服务端接收。服务端确认:可以关闭了

图示

TCP三次握手和四次挥手

Released under the MIT License.