TCP 连接 三次握手 四次挥手
题目
请描述 TCP 连接的 三次握手 和 四次挥手
建立连接
客户端和服务端通过 HTTP 协议发送请求,并获取内容。
在发送请求之前,需要先建立连接,确定目标机器处于可接受请求的状态。
就例如,你要请快递员(第三方的)去张三家取一个东西,你必须先打电话问问他在不在家。这就是建立连接的过程。
HTTP 协议是一个应用层的协议,它只规定了 req 和 res 的数据格式,如状态码、header、body 等。
而建立网络连接需要更加底层的 TCP 协议。
三次握手
三次握手,即建立一次 TCP 连接时,客户端和服务端总共需要发送 3 个包。
先举一个例子。还是你要派人去张三家取一个东西,现在你要发短信(不是打电话)“建立连接”,至少需要 3 个步骤,缺一不可。
- 你:在家吗?
- 张三:在家
- 你:好,这就过去(然后你指派人上门,张三准备迎接)
过程
- 客户端发包,服务端收到。服务端确认:客户端的发送能力是正常的。
- 服务端发包,客户端收到。客户端确认:服务端的接收能力是正常的。
- 客户端发包,服务端收到。服务端确认:客户端即将给我发送数据,我要准备接收。
建立连接完成,然后就开始发送数据,通讯。
四次挥手
握手,是建立连接。挥手,就是告别,就是关闭连接。
还是之前的例子。取东西,不一定一次就取完,可能要来回很多次。而且,也不一定全部由你主动发起,过程中张三也可能会主动派人给你发送。
即,你在 chrome 中看到的是一次 http 请求,其实背后可能需要好几次网络传输,只不过浏览器给合并起来了。
好了,取东西完毕了,你要发短信“关闭连接”,告诉张三可以关门了,需要 4 个步骤。
【注意】这里你需要等着确认张三关门,才算是完全关闭连接,不能你说一声就不管了。跟日常生活不一样。
- 你:完事儿了
- 张三:好的 (此时可能还要继续给你发送,你也得继续接收。直到张三发送完)
- 张三:我发送完毕,准备关门了
- 你:好,关门吧 (然后你可以走了,张三可以关门了,连接结束)
过程
- 客户端发包,服务端接收。服务端确认:客户端已经请求结束
- 服务端发包,客户端接收。客户端确认:服务端已经收到,我等待它关闭
- 服务端发包:客户端接受。客户端确认:服务端已经发送完成,可以关闭
- 客户端发包,服务端接收。服务端确认:可以关闭了
图示
在这里插入图片描述