CP三次握手和四次分手--转
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三次握手和四次分手--转相关推荐
- Tcp三次握手、四次分手,Socket再看不懂,你砍我
文章目录 Tcp连接 三次握手 为什么要三次 四次分手 光说不练,假把式 三次握手.四次分手抓包 三次握手到四次分手是不可被分割的最小粒度 Socket 文件描述符 获取输入输出流 socket套接字 ...
- 简析TCP的三次握手与四次分手【转】
转自 简析TCP的三次握手与四次分手 | 果冻想 http://www.jellythink.com/archives/705 TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇 ...
- 通俗大白话来理解TCP协议的三次握手和四次分手
最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就把看过的一些比较好 ...
- 通俗理解tcp/ip的三次握手和四次分手
转载地址:https://github.com/jawil/blog/issues/14 最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最 ...
- TCP/IP 的三次握手和四次分手过程详解【图解】
文档声明: 以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正.并且该文档在后期会随着学习的深入不断补充完善.感谢各位的参考查看. 笔记资料仅供学习交流使用,转载请标明出处 ...
- 简析TCP的三次握手与四次分手原理
简析TCP的三次握手与四次分手 TCP建立连接过程: 第一次握手:建立连接.客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x:然后,客户端进入SYN_SEND状态,等待服 ...
- TCP三次握手、四次分手
TCP三次握手.四次分手 目的 三次握手 套接字发送码说明 套接字状态说明 握手流程 三次握手的必要性 四次分手 套接字发送码说明 套接字状态说明 握手流程 四次分手必要性 目的 三次握手为了安全的建 ...
- 白话 TCP 三次握手与四次分手的过程
理解 HTTP 协议以及 TCP 三次握手与四次分手的过程 理解 HTTP 协议 超文本传输 协议(HTTP)是用于传输诸如 HTML 的超媒体文档的应用层协议,最顶层的协议.HTTP 是无状态 ...
- 单身的你还好意思三次握手,四次分手嘛
文章目录 TCP/IP 三次握手.四次分手 关于作者 作者介绍 前言 TCP 协议三次握手 TCP 四次分手 总结 TCP/IP 三次握手.四次分手 关于作者 作者介绍
最新文章
- 2021 年了,机器/深度学习还有哪些坑比较好挖?
- Phpcms v9专题分类增加模板设置的方法
- Shadow mapping
- Matlab-离散事件系统仿真实验
- SAP Spartacus ConfigModule.withConfig的处理逻辑
- MKL学习——矩阵向量操作
- drupal php filter,Drupal A-Z and number filter
- python对比不同大小的图片_使用Python 制作对比图片相似度的程序怎么比较?
- centos 安装 LAMP
- geotools 影像切片 缩放
- sqlserver安装目录_SQL Server 2016数据库安装
- Flutter热重载原理探索调试
- 安装andriod studio
- 无刷马达驱动方案之电动工具方案设计
- 云计算工程师必备技能
- 账号批量注册软件开发启示录
- mysql5.6只有解压缩_MySQL 5.6 for Windows 解压缩版配置安装
- Python中安装GDAL
- Python的文件操作,open、with open
- 山东大学项目实训小组一——基于深度学习的AI视频剪辑器“易剪”
热门文章
- php如何进行界面切换,PHP 页面跳转到另一个页面的多种方法方法总结
- 线程java作用_java线程介绍(原创)
- java语言与c++语言相比_最突出的特点是_Java 语言与C++语言相比,最突出的特点是( )。_学小易找答案...
- 5.10 Ext JS Grid中 WidgetColumn(组件列)的使用
- 第2章[2.8] Ext JS的控制器类型及使用
- stm32代码_ME3616 NB-IoT模组对接OneNET教程以及STM32代码
- centos 怎样显示metric_centos7系列问题
- 我的世界中国版服务器没有mods文件夹,我的世界中国版如何安装mod 国服安装mod的详细教程...
- Spring Data Jpa的JpaRepository的getOne()方法查询数据实体时报错could not initialize proxy
- linux中快速清空文件内容的方法