当前位置: 首页 > news >正文

浅谈 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 标志位。

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

相关文章:

  • 【牛客】SQL123 SQL类别高难度试卷得分的截断平均值
  • 支持国密ssl的curl编译和测试验证(下)
  • 什么是高可用架构
  • 代码随想录|学习工具分享
  • Spring Boot自动装配原理
  • 【LeetCode】【滑动窗口长度不固定】978 最长湍流子数组
  • 合并spark structured streaming处理流式数据产生的小文件
  • 多模态表征—CLIP及中文版Chinese-CLIP:理论讲解、代码微调与论文阅读
  • 使用React和ResizeObserver实现自适应ECharts图表
  • prometheus监控带安全认证的elasticsearch
  • docker创建mongodb数据库容器
  • Aigtek前置微小信号放大器在传感器检测中的应用有哪些
  • STM32—触摸键
  • @ 代码随想录算法训练营第4周(C语言)|Day22(二叉树)
  • 【MySQL】表的操作
  • React18源码: reconcliler启动过程
  • ✅鉴权—cookie、session、token、jwt、单点登录
  • C语言读取用户输入的常用函数
  • django学习网址
  • 【了解机器学习的定义与发展历程】
  • 国内生产、境外“游一圈”再进保税仓,这些“全球购”保健品竟是假进口
  • 持续更新丨伊朗内政部长:港口爆炸已致8人死亡750人受伤
  • 理想汽车副总裁刘杰:不要被竞争牵着鼻子走,也不迷信护城河
  • 体坛联播|皇马上演罢赛闹剧,杨瀚森宣布参加NBA选秀
  • 居民被脱落的外墙瓦砖砸中致十级伤残,小区物业赔付16万元
  • 蚂蚁财富28亿港元要约收购耀才证券,筹谋香港券商牌照