TCP 三次握手、四次挥手

267 阅读2分钟

三次握手

客户端和服务端都需要直到各自可收发,因此需要三次握手

简化三次握手:

例子

<img width="487" alt="2018-07-10 3 42 11" src="https://user-images.githubusercontent.com/ 17233651/42496289-1c6d668a-8458-11e8-98b3-65db50f64d48.png">

从图片可以得到三次握手可以简化为:C 发起请求连接 S 确认,也发起连接 C 确认我们

第一次握手:S 只可以确认 自己可以接受 C 发送的报文段

二次握手:C 可以确认 S 收到了自己发送的报文段,并且可以确认 自己可以接受 S 发 送的报文段

第三次握手:S 可以确认 C 收到了自己发送的报文段

四次挥手

例子

AB是一对情侣,一天,AB说\
A:“咱们分手吧。”\
B(震惊):“嗯。”\
...沉默ing...\
B:"那就分手吧。"\
A: "嗯。"\
然后AB就分开了

第一次挥手:客户端主动断开连接,向服务端说我们分手吧

第二次挥手:服务端收到客户端的请求并回了一个嗯(响应请求,也向客户端发送报文,来表示自己已经收到了客户端的断开连接的请求报文)

第三次挥手:(等待一段时间,当服务端将剩余数据发送完后)服务端向客户端发送‘那就分手’

第四次挥手:客户端收到服务端的断开释放报文段FIN,同样对它进行响应,客户端和服务端断开连接

为什么最后一次挥手,客户端还要进入一个TIME-WAIT状态

如果客户端最后一次挥手发送的确认请求报文,服务端没有收到的话,服务端就会认为,是因为它自己发送的FIN报文段没有发送出去,导致客户端没有收到,客户端没有收到,就不会给它发送确认请求报文,于是,服务器会再次发送FIN报文段,所以有一个时长为2MSL的等待时间。

参考

juejin.cn/post/684490…