只要三次握手就能交上女朋友,单身的你还不进来看看

本篇博文参考以下文章
https://blog.csdn.net/qq_38950316/article/details/81087809
https://blog.csdn.net/qq_25948717/article/details/80382766
https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc

讲个故事

举个例子,用一个具象的故事解释一下三次握手

网购:

  • 有一天你开开心心在网上选择了一款商品,付完款后想催一下客服,快点发货,等不及了
  • 客服收到你的消息后,回复你 “明天配送可以吗”?
  • 你看到这个消息后,很开心,对客服说 “好的
  • 客服收到你的确认消息后,安排发货

上面三处红字表示的地方,就是三次握手。

概念理解

配合图解可以更清晰了解到每部分都做了什么,下方图片可能比较乱,别着急,我们一步一来看
在这里插入图片描述

第一次握手

在这里插入图片描述
客户端

主动打开之后,客户端会向服务器端发送一段TCP报文,其中:

  • 标记位SYN = 1,表示“请求建立新连接”
  • 序号为 seq = x
  • 然后客户端进入SYN-SENT阶段。

进入到SYN-SENT之后,客户端就一直等待服务器的响应,此时是不知道服务器到底收没收到报文的,一直等,如果等待超时,会重新发送一份报文。

服务器

服务器这边在被动启动之后,就会一直处于监听状态,对于所要监听的端口时刻保持高度集中,一旦收到客户端发来的信息,立马进行响应。

当收到SYN = 1的标识后,服务器就明白了,客户端想建立连接,接下来就要准备第二次握手了。

第二次握手

在这里插入图片描述
服务器

服务器收到请求后做两件事

  • 1.赶紧告诉客户端,确认收到你的请求了(SYN = 1),可以建立连接(ACK = 1),确认码是ack = x + 1(收到的序列号 + 1),发送一个新的序列号(seq),这个序列号是发送给客户端的识别口令。

  • 2.进入SYN-SENT阶段。

客户端

  • 在收到服务器返回的信息时,结束SYN-SENT阶段。

第三次握手

在这里插入图片描述
客户端

  • 这回握手告知服务端,确认收到服务端统一链接的信号(ACK),收到服务端的确认号(ack),并将其作为自己的序列号(seq)。
  • 收到服务端的序号seq,并将值 + 1 作为自己的确认号(ack)。
  • 结束SYN-SENT阶段。进入WESTABLISHED阶段。

服务器

  • 收到消息后,明确链接正常,进入WESTABLISHED阶段

为什么需要三次握手

1.为了防止服务器端开启一些无用的连接增加服务器开销

  • 比如只进行一次握手,如果服务器返回信息时丢失或者,客户端发送信息时丢失,那么客户端将无法收到返回值,超时之后重新发送。

2.防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

  • 比如已经失效的客户端发出的请求信息,由于某种原因传输到了服务器端,服务器端以为是客户端发出的有效请求,接收后产生错误。

3.防止死锁

  • 三次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
  • 如果只进行两次握手,服务端在发送确认链接后,不知道客户端是否收到消息,所以不认为链接建立,就会忽略客户端发来的任何消息,而客户端发来的所有消息都没有回应,故造成死锁。

以上便是对TCP三次握手的相关总结,接下来还有四次挥手的博文,请大家关注我的博客,
标题只是为了吸引眼球,请各位不要太过悲伤。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值