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

TCP三次握手与四次断开

TCP三次握手机制

三次握手是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。

        1、客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值);

        2、服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接;

        3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)

  1. client向server发送syn同步请求
  2. server向client回复ack同意请求+syn同步请求
  3. client向server发送ack同意请求


TCP会话断开机制:四次断开

TCP 四次挥手机制是指需要发送四个包,因此称为四次挥手,客户端或服务端均可主动发起挥手动作。

TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。这是由于TCP的半关闭造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。

        第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;

        第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;

        第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;

        第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。

        其中:FIN标志位数置1,表示断开TCP连接。

  1. client向server发送fin关闭端口请求
  2. server向client回复ack同意请求
  3. server向client回复fin关闭端口请求
  4. client向server发送ack同意请求

TCP数据结构:

TCP优化机制:1.重排序  2.滑动窗口机制

TCP主要应用环境: web浏览器  、电子邮件、FTP 等协议

http://www.lryc.cn/news/106488.html

相关文章:

  • 关于前端与APP录音相关的笔记
  • 【Java】SpringBoot项目整合FreeMarker加快页面访问速度
  • conda环境下安装opencv-python包
  • JVM面试题--类加载器
  • js怎么计算当前一周的日期
  • 【图论】差分约束
  • 13 springboot项目——准备数据和dao类
  • Java 基础进阶总结(一)反射机制学习总结
  • ERROR: transport error 202: gethostbyname: unknown host报错解决方案
  • PyTorch高级教程:自定义模型、数据加载及设备间数据移动
  • JavaEE——SpringMVC中的常用注解
  • 【严重】Metabase 基于H2引擎的远程代码执行漏洞
  • 0基础学习VR全景平台篇 第75篇:多现场
  • html:去除input/textarea标签的拼写检查
  • 自然语言处理从入门到应用——LangChain:提示(Prompts)-[提示模板:创建自定义提示模板和含有Few-Shot示例的提示模板]
  • d3dx9_30.dll如何修复,分享几种一键修复方法
  • 6.8 稀疏数组
  • ROS版本的ORB-SLAM3用RealSense D455相机实时运行测试
  • Vue中对对象内容调用的Demo
  • 语音识别 — 特征提取 MFCC 和 PLP
  • BES 平台 SDK之按键的配置
  • 【Golang系统开发】搜索引擎(1) 如何快速判断网页是否已经被爬取
  • 记录--一个好用的轮子 turn.js 实现仿真翻书的效果
  • 《Spring Boot源码解读与原理分析》书籍推荐
  • C++ 什么时候使用 vector、list、以及 deque?
  • 视频创作者福音,蝰蛇峡谷NUC12SNKI7视频剪辑测评
  • 使用Qt中的QDir类进行目录操作
  • qt服务器 网络聊天室
  • meanshift算法通俗讲解【meanshift实例展示】
  • 正交变换和仿射变换