三次握手与四次挥手的爱恨情仇
作者:互联网
三次握手与四次挥手的爱恨情仇---你与他(她)的爱情故事
前言
本文见面知意,介绍三次握手与四次挥手,通读全文之后,保准你记住三次握手与四次挥手
一、三次握手
三次握手,就像你追一个人,向别人表白一样。
你(客户端)说(发送SYN报文):我喜欢你,你能做我男(女)朋友吗?
你喜欢的人(服务器)说(发送SYN/ACK报文):好的呀
你(客户端)直接报上去亲了一口(发送ACK),确立了关系(建立连接)
为什么TCP客户端最后还要发送一次确认?
这就相当于问你(客户端),为什么还要亲她一口(为什么还要最后确认一次),肯定是为了防止别人(突然失效的连接)又出现,你宣示主权(携带数据)
-
过程:
-
第一次 第二次 第三次 客户端 发送SYN
同步已发送状态发送ACK
建立连接状态服务器 发送SYN/ACK
同步收到状态结果 客户端结论:客户端发送能力正常
服务器接收能力正常客户端结论:服务器接收、发送正常
客户端接收、发送正常服务端结论:服务器接收、发送正常
客户端接收、发送正常
-
-
作用:
- 确认双发接收、发送能力是否正常
- 指定自己的初始化序列号,为后面的可靠传输做准备
- 如果时https协议,三次握手还会进行数字证书的验证以及加密密钥的生成
-
其他注意事项
- SYN、ACK
- SYN:证明发送方到接收方的通道没有问题
- ACK:证明接收方到发送方的通道没有问题
- ISN:
- 作用:为了让对方知道接下来接收数据的时候如何按照序列号组装数据
- ISN动态生成的
- 半连接队列
- 没有完全建立连接
- 携带数据
- 第一次、第二次没有携带数据
- 第三次携带数据
- 为什么TCP客户端最后还要发送一次确认:
- 防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误
- SYN、ACK
二、四次挥手
四次挥手就比较渣了,你刚刚交的男(女)朋友,你突然不喜欢了,准备和他(她)分手。
你(客户端)说(发送FIN)(进入终止等待状态1):我们分手吧
你刚刚喜欢的人(服务器)说(发送ACK)(关闭等待状态):让我想想
他(她)还喜欢你,但你不喜欢他(她),所以当他(她)说想一想的时候你在焦急的等待(进入终止等待状态2)
你刚刚喜欢的人(服务器)说(发送FIN)(最后确认状态):握不住的沙,不如扬了它
你(客户端)说(发送ACK):你好,再见(进入时间等待状态)
你刚刚喜欢的人(服务器)内心悲伤(关闭连接)
-
过程:
-
第一次 第二次 第三次 第四次 客户端 发送FIN
终止等待状态1终止等待状态2 发送ACK
时间等待状态服务器 发送ACK
关闭等待状态发送FIN
最后确认状态关闭连接 -
客户端的时间等待状态:为了确保服务器收到ACK报文
-
-
为什么建立连接是三次握手,关闭连接确是四次挥手呢?
- 建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
- 而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。
- 总结:三次握手比四次挥手多在了服务器是否确认关闭连接上
-
如果已经建立了连接,但是客户端突然出现故障了怎么办?
- TCP设有一个保活计时器
总结
- 三次握手与四次挥手的爱恨情仇到此结束,希望大家可以喜欢
标签:ACK,情仇,握手,发送,四次,服务器,爱恨,连接,客户端 来源: https://blog.csdn.net/smdbhd/article/details/118104892