TCP 三次握手四次挥手 理解小结
TCP 三次握手
第一次握手
客户端发送syn包,携带seq 序列号到服务端 ,进入等待状态
第二次握手
服务器收到syn包后响应ACK (这里的ack 是我们客户端的x+1) ,并且自己发送一个新的syn包
第三次握手
客户端接收到SYN 与ACK 包后,响应服务端给回复ACK 问
事例 理解:TCP 的三次握手 ,A 想要去B家做客
第一次握手
A 给B 写信说我要去你家做客。 但是A 不知B 是否在不在所以A 会等B 给回信
第二次握手
B 收到了A 的来家做客信,B 响应A 说我已经接受到你给我的来信了(ack),于明天时候欢迎你到我家做客(SYN)
第三次握手
A这边接受到B 给的回信后,得知我可以明天去B 家做客,A 写信回复B 说明天下午我一定去。 (ACK)
四次挥手
第一次挥手
主动方发出连接释放报文FIN给被动方,并且停止发送数据。进入FIN-wait 等待状态。并且停止在主动方到被动方方向上发送数据,但是主动方仍然能接收从被动方传输过来的数据。
第二次挥手
被动方收到主动方发送过来的FIN 后会响应ACK (这里的ACK :接收到客户端发送的释放连接的请求),确认主动方想释放连接,被动方在响应后进入等待关闭的状态,返回TCP报文
第三次挥手
被动方自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放被动方到主动方方向上的连接准备,再次向主动方发出一段TCP报文ACK(已经准备好释放连接了) FIN,
第四次挥手
主动方接受到被动方的报文后,发送ACK 确认被动方准备好了
事例理解: A 暂住B 家要准备离开了
第一次挥手
A 写信告诉B 我要准备走了
第二次挥手
B 收到信后,会给A 回信 回复说好的我知道你要走了,我给你收拾行李
第三次挥手
B 收拾好行李给A 回信,你的东西我都收拾好了,你过来取吧。
第四次挥手
A 收到信后回复B 说好的那我过去取。
为什么握手是三次那?
为了防止服务器端开启一些无用的连接增加服务器开销以及防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
三次握手也是确保链路数据的完整性,如果两次握手,那么服务端怎么能知道自己的数据有真正到了客户端?