三次握手
客户端和服务端都需要直到各自可收发,因此需要三次握手
简化三次握手:
例子
<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 收到了自己发送的报文段
四次挥手
例子
A和B是一对情侣,一天,A对B说\
A:“咱们分手吧。”\
B(震惊):“嗯。”\
...沉默ing...\
B:"那就分手吧。"\
A: "嗯。"\
然后A和B就分开了
第一次挥手:客户端主动断开连接,向服务端说我们分手吧
第二次挥手:服务端收到客户端的请求并回了一个嗯(响应请求,也向客户端发送报文,来表示自己已经收到了客户端的断开连接的请求报文)
第三次挥手:(等待一段时间,当服务端将剩余数据发送完后)服务端向客户端发送‘那就分手’
第四次挥手:客户端收到服务端的断开释放报文段FIN,同样对它进行响应,客户端和服务端断开连接
为什么最后一次挥手,客户端还要进入一个TIME-WAIT状态
如果客户端最后一次挥手发送的确认请求报文,服务端没有收到的话,服务端就会认为,是因为它自己发送的FIN报文段没有发送出去,导致客户端没有收到,客户端没有收到,就不会给它发送确认请求报文,于是,服务器会再次发送FIN报文段,所以有一个时长为2MSL的等待时间。