三次握手与四次挥手的爱恨情仇


前言

本文见面知意,介绍三次握手与四次挥手,通读全文之后,保准你记住三次握手与四次挥手


一、三次握手

三次握手,就像你追一个人,向别人表白一样。

你(客户端)说(发送SYN报文):我喜欢你,你能做我男(女)朋友吗?
你喜欢的人(服务器)说(发送SYN/ACK报文):好的呀
你(客户端)直接报上去亲了一口(发送ACK),确立了关系(建立连接)

为什么TCP客户端最后还要发送一次确认?
这就相当于问你(客户端),为什么还要亲她一口(为什么还要最后确认一次),肯定是为了防止别人(突然失效的连接)又出现,你宣示主权(携带数据)

  • 过程:

    • 第一次第二次第三次
      客户端发送SYN
      同步已发送状态
      发送ACK
      建立连接状态
      服务器发送SYN/ACK
      同步收到状态
      结果客户端结论:客户端发送能力正常
      服务器接收能力正常
      客户端结论:服务器接收、发送正常
      客户端接收、发送正常
      服务端结论:服务器接收、发送正常
      客户端接收、发送正常
  • 作用:

    • 确认双发接收、发送能力是否正常
    • 指定自己的初始化序列号,为后面的可靠传输做准备
    • 如果时https协议,三次握手还会进行数字证书的验证以及加密密钥的生成
  • 其他注意事项

    • SYN、ACK
      • SYN:证明发送方到接收方的通道没有问题
      • ACK:证明接收方到发送方的通道没有问题
    • ISN:
      • 作用:为了让对方知道接下来接收数据的时候如何按照序列号组装数据
      • ISN动态生成的
    • 半连接队列
      • 没有完全建立连接
    • 携带数据
      • 第一次、第二次没有携带数据
      • 第三次携带数据
    • 为什么TCP客户端最后还要发送一次确认:
      • 防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误

二、四次挥手

四次挥手就比较渣了,你刚刚交的男(女)朋友,你突然不喜欢了,准备和他(她)分手。
你(客户端)说(发送FIN)(进入终止等待状态1):我们分手吧
你刚刚喜欢的人(服务器)说(发送ACK)(关闭等待状态):让我想想
他(她)还喜欢你,但你不喜欢他(她),所以当他(她)说想一想的时候你在焦急的等待(进入终止等待状态2)
你刚刚喜欢的人(服务器)说(发送FIN)(最后确认状态):握不住的沙,不如扬了它
你(客户端)说(发送ACK):你好,再见(进入时间等待状态)
你刚刚喜欢的人(服务器)内心悲伤(关闭连接)

  • 过程:

    • 第一次第二次第三次第四次
      客户端发送FIN
      终止等待状态1
      终止等待状态2发送ACK
      时间等待状态
      服务器发送ACK
      关闭等待状态
      发送FIN
      最后确认状态
      关闭连接
    • 客户端的时间等待状态:为了确保服务器收到ACK报文

  • 为什么建立连接是三次握手,关闭连接确是四次挥手呢?

    • 建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
    • 而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。
    • 总结:三次握手比四次挥手多在了服务器是否确认关闭连接上
  • 如果已经建立了连接,但是客户端突然出现故障了怎么办?

    • TCP设有一个保活计时器

总结

  • 三次握手与四次挥手的爱恨情仇到此结束,希望大家可以喜欢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值