浅谈 TCP 三次握手

文章目录

三次握手

首先我们需要明确,三次握手的目的是什么?
是为了通信双方之间建立连接,然后传输数据。

那么建立连接的条件是什么呢?
需要确保通信的双方都确认彼此的接收和发送能力正常,满足这个条件,就可以建立连接了。

那么怎么保证“通信的双方都确认彼此的接收和发送能力正常”?
我们将 TCP 中的这个问题,带入到现实生活中。

假设 A 和 B 打电话,正式谈业务前,一定会先互相确认对方能不能听到自己说话,和自己能不能听到对方说的话。
看如下场景:

① A:喂喂,能听到我说话吗 【此时 B 知道自己的接收能力ok,也知道 A 的发送能力ok】
② B:我能听到,你能听到我说话吗 【此时 A 知道自己的 接收/发送 能力ok,也知道 B 的 接收/发送 能力ok】
③ A:我能听到你说话 【此时 B 知道了自己的 接收/发送 能力ok,A 的 接收/发送 能力也ok】

以上的三次对话,就确定了双方的通信(接收/发送)能力是正常的,可以建立连接了。

有人会问,第 ② 步,A 已经知道了 " A 的 接收/发送 能力ok,也知道 B 的 接收/发送 能力ok",是不是可以建立连接传输数据了?
其实还不行,因为在第 ② 步的时候,B 还不知道自己的发送能力是否ok,所以还需要第三次询问。

把以上生活中谈业务的场景,再带入到 TCP 三次握手,也是一样的逻辑,只不过 三次握手 多了一些标志位( ACK / SYN )和状态切换。

如下图:
在这里插入图片描述
SYN:专门用于建立连接的标志位,n 表示 client 请求中携带的数据包的编号(随机值),数据包大小是 0。
ACK:确认标志位,表示收到了请求。
ACK n + 1 表示 server 端收到了 client 发送的第 n 个数据包,+1 表示也收到了 client 发送的 SYN 标志位。
ACK m + 1 表示 client 端收到了 server 发送的第 m 个数据包,+1 表示也收到了 server 发送的 SYN 标志位。

以上就是 三次握手 的核心思想,始终记住,握手的目的是为了**互相确认双方的 接收/发送 能力是否正常**,为建立连接做准备。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值