CP三次握手和四次分手的图

几个字符(SYN,ACK,FIN,seq,ack)各代表什么意思

SYN,ACK,FIN存放在TCP的标志位,一共有6个字符,这里就介绍这三个:

SYN:代表请求创建连接,所以在三次握手中前两次要SYN=1,表示这两次用于建立连接,至于第三次确认。

FIN:表示请求关闭连接,在四次分手时,我们发现FIN发了两遍。这是因为TCP的连接是双向的,所以一次FIN只能关闭一个方向。

ACK:代表确认接受,从上面可以发现,不管是三次握手还是四次分手,在回应的时候都会加上ACK=1,表示消息接收到了,并且在建立连接以后的发送数据时,都需加上ACK=1,来表示数据接收成功。

seq:序列号,当前每个数据包进行编号。当发送一个数据时,数据是被拆成多个数据包来发送,序列号就是对每个数据包进行编号,这样接受方才能对数据包进行再次拼接。

初始序列号是随机生成的,这样不一样的数据拆包解包就不会连接错了。(例如:两个数据都被拆成1,2,3和一个数据是1,2,3一个是101,102,103,很明显后者不会连接错误)

ack:下一个数据包的编号,这也就是为什么第二请求时,ack是seq+1或(y+1),

在创建连接时,

1.客户端首先要SYN=1,表示要创建连接,

2.服务端接收到后,要告诉客户端:我接受到了!所以加个ACK=1,就变成了ACK=1,SYN=1

3.(理论上这时就创建连接成功了,但是要防止一个意外(见疑问三))客户端要再发一个消息给服务端确认一下,这时只需要ACK=1就行了。

三次握手完成!

在四次分手时,(TCP是双向的,所以需要在两个方向分别关闭,每个方向的关闭又需要请求和确认,所以一共就4次。)

1.客户端请求关闭客户端到服务端方向的连接,这时客户端就要发送一个FIN=1,表示要关闭一个方向的连接(见上面四次分手的图)

2.服务端接收到后是需要确认一下的,所以返回了一个ACK=1

3.这时只关闭了一个方向,另一个方向也需要关闭,所以服务端也向客户端发了一个FIN=1 ACK=1

4.客户端接收到后发送ACK=1,表示接受成功

四次分手完成!

我为什么没有在上面的过程中,加入seq和ack呢?就如我对这两个关键字的解释的一样,这两个是数据拆分和组装必备元素,所以所有的请求都需要这两个元素,只要明白了作用,就可以自己举一反三。

关于握手和分手,主要还是SYN,FIN,ACK的变化,这才是重点!

疑问二,每次发送请求时为什么ack要+1

关于seq和ack关键字的解释中已经说明了。

疑问三,为什么需要三次握手

下面解释明明两次就可以建立连接的为什么还要加第三次的确认。

如果发送两次就可以建立连接话,那么只要客户端发送一个连接请求,服务端接收到并发送了确认,就会建立一个连接。

可能出现的问题:如果一个连接请求在网络中跑的慢,超时了,这时客户端会从发请求,但是这个跑的慢的请求最后还是跑到了,然后服务端就接收了两个连接请求,然后全部回应就会创建两个连接,浪费资源!

如果加了第三次客户端确认,客户端在接受到一个服务端连接确认请求后,后面再接收到的连接确认请求就可以抛弃不管了。

转载于:https://www.cnblogs.com/jamnoble/p/10936620.html

CP三次握手和四次分手--转相关推荐

  1. Tcp三次握手、四次分手,Socket再看不懂,你砍我

    文章目录 Tcp连接 三次握手 为什么要三次 四次分手 光说不练,假把式 三次握手.四次分手抓包 三次握手到四次分手是不可被分割的最小粒度 Socket 文件描述符 获取输入输出流 socket套接字 ...

  2. 简析TCP的三次握手与四次分手【转】

    转自 简析TCP的三次握手与四次分手 | 果冻想 http://www.jellythink.com/archives/705 TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇 ...

  3. 通俗大白话来理解TCP协议的三次握手和四次分手

    最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就把看过的一些比较好 ...

  4. 通俗理解tcp/ip的三次握手和四次分手

    转载地址:https://github.com/jawil/blog/issues/14 最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最 ...

  5. TCP/IP 的三次握手和四次分手过程详解【图解】

    文档声明: 以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正.并且该文档在后期会随着学习的深入不断补充完善.感谢各位的参考查看. 笔记资料仅供学习交流使用,转载请标明出处 ...

  6. 简析TCP的三次握手与四次分手原理

    简析TCP的三次握手与四次分手 TCP建立连接过程: 第一次握手:建立连接.客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x:然后,客户端进入SYN_SEND状态,等待服 ...

  7. TCP三次握手、四次分手

    TCP三次握手.四次分手 目的 三次握手 套接字发送码说明 套接字状态说明 握手流程 三次握手的必要性 四次分手 套接字发送码说明 套接字状态说明 握手流程 四次分手必要性 目的 三次握手为了安全的建 ...

  8. 白话 TCP 三次握手与四次分手的过程

    理解 HTTP 协议以及 TCP 三次握手与四次分手的过程 理解 HTTP 协议 超文本传输 ​​ 协议(HTTP)是用于传输诸如 HTML 的超媒体文档的应用层协议,最顶层的协议.HTTP 是无状态 ...

  9. 单身的你还好意思三次握手,四次分手嘛

    文章目录 TCP/IP 三次握手.四次分手 关于作者 作者介绍 前言 TCP 协议三次握手 TCP 四次分手 总结 TCP/IP 三次握手.四次分手 关于作者 作者介绍

最新文章

  1. 2021 年了,机器/深度学习还有哪些坑比较好挖?
  2. Phpcms v9专题分类增加模板设置的方法
  3. Shadow mapping
  4. Matlab-离散事件系统仿真实验
  5. SAP Spartacus ConfigModule.withConfig的处理逻辑
  6. MKL学习——矩阵向量操作
  7. drupal php filter,Drupal A-Z and number filter
  8. python对比不同大小的图片_使用Python 制作对比图片相似度的程序怎么比较?
  9. centos 安装 LAMP
  10. geotools 影像切片 缩放
  11. sqlserver安装目录_SQL Server 2016数据库安装
  12. Flutter热重载原理探索调试
  13. 安装andriod studio
  14. 无刷马达驱动方案之电动工具方案设计
  15. 云计算工程师必备技能
  16. 账号批量注册软件开发启示录
  17. mysql5.6只有解压缩_MySQL 5.6 for Windows 解压缩版配置安装
  18. Python中安装GDAL
  19. Python的文件操作,open、with open
  20. 山东大学项目实训小组一——基于深度学习的AI视频剪辑器“易剪”

热门文章

  1. php如何进行界面切换,PHP 页面跳转到另一个页面的多种方法方法总结
  2. 线程java作用_java线程介绍(原创)
  3. java语言与c++语言相比_最突出的特点是_Java 语言与C++语言相比,最突出的特点是( )。_学小易找答案...
  4. 5.10 Ext JS Grid中 WidgetColumn(组件列)的使用
  5. 第2章[2.8] Ext JS的控制器类型及使用
  6. stm32代码_ME3616 NB-IoT模组对接OneNET教程以及STM32代码
  7. centos 怎样显示metric_centos7系列问题
  8. 我的世界中国版服务器没有mods文件夹,我的世界中国版如何安装mod 国服安装mod的详细教程...
  9. Spring Data Jpa的JpaRepository的getOne()方法查询数据实体时报错could not initialize proxy
  10. linux中快速清空文件内容的方法