TCP 核心问题剖析之 什么 TMD 是 “三次握手”

首先继上文 TCP 协议头全解 我们聊了 TCP 协议头的构成,及其所代表的含义用法。如果你看了我专栏的 网络编程实战 的前几篇文章,相信对于网络的连接请求和传输你已经有了自己的理解。

那么对上文,在 TCP 上所挖的几个坑,将在本文中做一个填补。一件事儿,或者一个知识点,你是否需要事无巨细地理解记忆它呢?能记住当然是好事,但也同样要耗费更多的经历,而在实际的使用中并非所有的点你都需要用到,所以保持核心,保持简单,保持方法论。

本文作为 TCP 的终篇,不会事无巨细地介绍 TCP 的所有细节,而是会对我较为感兴趣的核心点进行理解、讲述和剖析。

本系列将带你学会

  1. TCP 连接过程为啥是 “三次握手” 而不是 1,2,4,…… N 呢?
  2. TCP 断开过程为啥是 “四次挥手” 而不是 3 …… N 呢?
  3. TCP keepalive 是什么?它如何工作?
  4. TCP 如何保证顺序和不丢包?
  5. TCP 如何进行流量控制和拥塞控制?

抱歉本来想一文搞定,但发现……,有点长,所以换成系列吧

本文将带你学会

  1. 什么是握手?nwnmn?
  2. TCP 连接过程为啥是 “三次握手” 而不是 1,2,4,…… N 呢?

什么是 ”三次握手“?

说实话,对于 TCP 的三次握手,我早有耳闻,甚至可以说是大名鼎鼎、如雷贯耳、不明觉厉、不知所云。

首先说 “握手” ,我可真是谢谢你了,请问 TCP 的手是啥,它握的是啥,谁和谁握,他们握手干嘛?这个比喻可真好,对于懂的人觉得形象,可对于小白的我来说,只能是一脸懵逼。

首先这个握手其实是指代建立链接
建立链接的本质其实是在想要相互通信的双方的端上,构建一套数据结构算法来收发消息,处理消息,维持状态,是两端的数据沟通与协调
那所谓的 “三次握手” 其实要做的就是连接发起方确认服务提供方,是否能够正常提供服务 的一个过程。
如果可以那么我们都维护一个约定好的数据结构,进行数据处理,如果不能,那就没什么好谈的了。

所以 三次握手 其实是 确认可进行正常通信的三步发包试探

先来看看哪三步:

  1. 请求方发送连接请求,TCP 头 标志位 SYN 置为 1,此时 序列号 Seq 为 0 ,确认号 Ack 为 0。
  2. 服务提供方确认收到, 标志位 SYN 为 1 ,ACK 为 1,此时序列号 Seq 为 0 ,确认号 Ack 为 1。
  3. 请求方确认收到,标志位 ACK 为 1 ,此时序列号 Seq 为 1 , 确认号 Ack 为 1。此时连接建立完成。

还记得上篇文章说的, 序列号 Seq 和 确认号 Ack 的含义吗?这里简单回顾一下,并解释下为啥握手的时候是这样的。

序列号 Seq 表示在此段报文中数据的第一个字节编号。

确认号 Ack 表示期望收到的下一个报文的 Seq 值,即对应要 确认收到报文的 Seq 值 + 报文数据部分字节总长度。(TCP 协议规定,每段报文发送,都要有应答,这是保证送达的重要规定,即我知道你收到了)

理解了这两个含义,三次握手 的值就很明了了。

  1. SYN 请求连接,因为是首发,标志位不需要 ACK ,也不需要 确认序号,Seq 为 0
  2. SYN,ACK,确认 1 报文收到,此时 Seq 为 0 ,确认序号 = 0 + 1 = 1
  3. ACK 确认 2 收到,此时 Seq = 2.Ack = 1 , Ack = 2.Seq + 1 = 0 + 1 = 1 (注 【2.Ack】 表示报文 2 中 Ack 值)

PS:完了,随便一写 1000 多字了,感觉字数控制不住了,要不要分个几篇?

注意一点,客户端第三步 ACK 时其实就可以发送数据了,此时可以认为连接已经 ok,从理论上第三步握手时就可以携带数据

建立链接为啥握手握三次就好了??

想象一下,这三次握手其实是这样一个场景

客户端 A — 在不? B —> 服务端 B

客户端 A <— A 我在,啥事 — 服务端 B

客户端 A — 太好了你在,我这有些事…… —> 服务端 B

三次握手其实是最简单的一种 确认你在的过程 想想你是不是在聊天中也总这样?(不过大家现在聊天可能更推崇有事说事的 UDP 模式,这个我们后面聊)

能不能 4 次、5 次 、 N 次?

当然能!但是又有什么意义呢?三次握手过后当然也可能对方因为异常而不可达,但是更多的确认并不能让我在纷繁的网络中更多收益,反而平添流程。

所以 三次握手 TCP 做了什么?其实就是 确认你在

一旦 确认你在,之后我就可以说事了,至于说了事之后你处不处理如何处理那是另外的情况,至少在这个情景中,我认为你可以接受听取我的请求了。

TCP 核心问题剖析之 什么 TMD 是 “三次握手”相关推荐

  1. pythonsocket中tcp通信接收不到数据_TCP 为什么三次握手而不是两次握手(正解版)...

    先说结论 为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的. 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已 ...

  2. get技能 TCP(ip socket 关系)通信的三次握手和四次撒手的详细流程(顿悟)

    TCP(Transmission Control Protocol) 传输控制协议 三次握手 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位 ...

  3. 对于tcp的一点点解读,不止是三次握手、四次挥手

    本文目录 前言 OSI模型 为什么要有OSI七层模型? 趣味OSI解读 TCP报文头格式 趣味TCP三次握手 tcp三次握手图解 TCP省去最后的一次握手可不可以? 四次挥手详解 三次?为什么要四次挥 ...

  4. 通过实验取证:TCP三次握手的过程

    通过实验取证:TCP三次握手的过程 理解TCP/IP协议的工作原理 多年来TCP/IP协议一直被公众称呼为"一个协议",事实上它是一组协议的集合,IP工作在OSI七层模型的网络层, ...

  5. 别再被三次握手和四次挥手所支配!把TCP这玩意儿给你掰开了说

    本文生动形象地展示了TCP/IP协议中三次握手的过程,可耐心阅读 你是一台电脑,你的名字叫 A 你知道另一位伙伴 B的 IP 地址,且你们之间的网络是通的,无论多远,你都可以将一个数据包发送给你的伙伴 ...

  6. c++TCP的三次握手和四次挥手

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105043395 T ...

  7. 【Linux网络编程】TCP三次握手和四次挥手

    00. 目录 文章目录 00. 目录 01. 三次握手 02. 四次挥手 03. 三次握手和四次挥手原因 04. 2MSL 05. 附录 01. 三次握手 在 TCP/IP 协议中,TCP 协议提供可 ...

  8. 网络基础4(TCP三次握手,四次握手,TCP流量控制,TCP状态转换 , TCP异常断开,设置TCP属性,端口复用)

    TCP协议 TCP通信时序 下图是一次TCP通讯的时序图.TCP连接建立断开.包含大家熟知的三次握手和四次握手. TCP通讯时序 在这个例子中,首先客户端主动发起连接.发送请求,然后服务器端响应请求, ...

  9. ewsa握手包怎么获得_三次握手和四次挥手以及TCP标志位的详细介绍

    一.TCP标志位 在讲TCP三次握手和四次挥手之前,先说一下TCP标志位,方便后续的理解. 简单来说,TCP标志位的值代表了当前请求的目的. 标志位一共有6种,分别是: SYN(synchronous ...

最新文章

  1. shell /dev/null
  2. 一张900w的数据表,怎么把原先要花费17s执行的SQL优化到300ms?
  3. DSM: 域不变的立体匹配网络解析(Stereo Matching Networks)
  4. 《职场》笔记20061119
  5. ASP.NET应用程序
  6. poj 3164(最小树形图)
  7. [云炬创业基础笔记]第二章创业者测试17
  8. 从程序员到项目经理(十一):每个人都是管理者
  9. 四十八、使用Python和Stata完成广西碳酸钙企业的主成分分析和因子分析
  10. SAP ABAP实用技巧介绍系列之已知某个signature查找定义的方法
  11. (转)c# 扩展方法
  12. java 注册驱动失败_java – JDBC驱动程序注册死锁?
  13. 计算机网络模拟校园,计算机网络课程设计-模拟校园网组网实验
  14. hdu 2438 Turn the corner [ 三分 ]
  15. 三元一次方程组步骤_人教版数学七年级下册8.4三元一次方程组的解法精讲
  16. 台达 PLC ISPSoft 3.16--项目文件解密
  17. 如何切换水经注地图下载器中的小数度和度分秒显示
  18. win10计算机的数字小键盘,win10开启数字小键盘的方法(图文)
  19. 要了命了,我亲自包了20000个红包送你
  20. SVN CentOS7 下配置svn的安装及基础配置介绍

热门文章

  1. java毕业设计程序设计类课程的课堂教学效果评价系统Mybatis+系统+数据库+调试部署
  2. shell 编程流程
  3. GridView 横向滚动
  4. CMMI5大成熟度等级和4大过程域
  5. URAL 1294 Mars Satellites(圆内接三角形)
  6. File/String类常用方法
  7. static变量和static函数
  8. DOS命令 tasklist
  9. iphone新旧手机数据传输已取消_你的iPhone手机有没有遇到自动扣款项目!教你取消/退款...
  10. 一定能量的粒子,其速度与光速的比较,计算公式