Tcp协议中的3次握手与4次挥手过程分析

2023-10-26

转载https://blog.csdn.net/u012824097/article/details/52490091

客户端与服务端的通信中步骤

  • 1建立Tcp连接
    • 3次握手
  • 2再进行数据传输
  • 3数据传输完成后,断开连接。
    • 4次挥手

 

建立Tcp连接

1 Client ---> Server:(员工:老板看到我发的消息没)

设置SYN=1,seq=J,并将该数据包和SYN请求信号发送给Server,Client进入syn_sent(发送)状态,等待Server确认。

2Server --->Client :(老板:看到了,你确定下看到我消息没)

接收数据包后,设置SYN=1,ACK=1,ack=J+1 ,seq=K,发送给Client,表示确认收到了Client的请求,Server进入syn_rcvd(已收到)状态;

3 Client---> Server:(员工:我也收到你的回复的,你看下收到我的回复了没,收到说明我们通信连接成功了)

Client:检查是否 ACK=1 && ack=J+1,如果是则设置ACK=1,ack=K+1,并将数据包发送给Server;

Server:检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入established(确认)状态,三次握手完成,

 

 

注意

半连接

在三次握手过程中,Server发送SYN+ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect)

SYN攻击

在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:

 

 

 

断开连接:

 

Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

1 Client---> Server(数据发送完了,关闭连接吧)

Client发送一个FIN,表示Client要发送的数据已经发送完成,请求结束连接,Client进入fin_wait_1状态;

2 Server---> Client(收到你的信息,请确定你也收到我的信息)

Server收到Client的FIN后,会向Client发送一个ACK,表示收到了Client的FIN请求,确认序号为收到序号(A)+1(即ack=A+1),Server进入close_wait状态(此时Server可能没有完成向Client的数据传输);

3 Server---> Client(收到你的信息,我的信息已发送完毕,请确定收到我的信息)

 当Server完成向Client的数据传输后,向Client发送一个FIN ,,表示Server已经完成发送,Client可以断开连接,Server进入last_ack状态;

4 Client---> Server(收到你的信息,我过一定就关闭了,你也关闭吧)

 Client:接收到Server的FIN后,Client进入time_wait状态,并向Server发送一个ACK,确认序号为收到序号(C)+1(ack=C+1)

Server:检查客户端信息正确,Server进入closed状态,Client断开连接,Server关闭连接,四次挥手完成。

 

 

注意

在time_wait状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tcp协议中的3次握手与4次挥手过程分析 的相关文章

  • mybatis generator插件系列--注释插件 (为实体类生成数据库字段注释)

    我们都知道mybatis generator自动生成的注释没什么实际作用 而且还增加了代码量 如果能将注释从数据库中捞取到 不仅能很大程度上增加代码的可读性 而且减少了后期手动加注释的工作量 1 首先定义注释生成插件 MyCommentGe
  • Lock锁和Condition条件

    Lock的特性 Lock不是Java语言内置的 synchronized是在JVM层面上实现的 如果代码执行出现异常 JVM会自动释放锁 但是Lock不行 要保证锁一定会被释放 就必须将unLock放到finally 中 手动释放 在资源竞
  • 深入理解单例模式:静态内部类单例原理

    本文主要介绍java的单例模式 以及详细剖析静态内部类之所以能够实现单例的原理 OK 废话不多说 进入正文 首先我们要先了解下单例的四大原则 1 构造私有 2 以静态方法或者枚举返回实例 3 确保实例只有一个 尤其是多线程环境 4 确保反序
  • java TreeSet 和 TreeMap 源码解读

    目录 一 前言 二 TreeSet详解 1 TreeSet简介 2 TreeSet的底层实现 0 准备工作 1 TreeSet构造器 2 匿名内部类实现接口的多态 3 TreeMap构造器 4 add方法 5 put方法和put方法 6 继
  • Windows应急响应篇

    转载至奇安信攻防社区 Windows应急响应篇 Windows应急响应篇 本篇主要以windows下应急响应的基础技术手段进行介绍 一 概述 近年来 随着互联网的发展网络安全攻击事件也是大幅度增多 如何在第一时间发现攻击事件 并实施应急处置
  • 会些java知识,然后要学习spring boot大概需要多长时间?

    Spring boot要学什么 要学到什么程度 以及相关的学习方法是什么 学习spring boot大概需要多长时间 每个人的学习能力 每天能花费时间来学习的时间也是不确定的 这些很难量化 但极好形容 需要学到能帮你找到一份工作的程度 任何
  • 论Java多线程如何引发OOM—多线程开发知识点

    Java ThreadLocal 如何引发 OOM Java 内存泄漏 ThreadLocal OOM 回顾ThreadLocal 强引用 软引用 弱引用 虚引用 Java 内存泄漏 内存溢出 Out Of Memory 是指应用系统中存在
  • FutureTask 源码 并发设计模式

    一 代码 https www jianshu com p 60f661d95d53 public static void main String args throws Exception Callable
  • java会话技术--03--Session覆盖问题

    java会话技术 03 Session覆盖问题 代码位置 https gitee com DanShenGuiZu learnDemo tree master sessionCookie learn 1 现象 同一域名 同一个服务 不同的端
  • STM32F103ZET6【标准库函数开发】------02.2 按键实现短按、长按、双击的效果(非中断方式)

    一 硬件介绍 正点原子战舰开发板 LED0 PB5 LED1 PE5 KEY0 PA4 二 实现目的 开机LED0 LED1均熄灭 单击KEY0 LED0点亮 LED1熄灭 双击KEY0 LED0熄灭 LED1点亮 长按 LED0 LED1
  • JDBC快速入门,mysql8.0版本+druid+spring jdbc使用,出现因版本错误的解决方法

    JDBC核心技术 JDBC概述 数据持久化 持久化 persistence 把数据保存到可掉电式存储设备中以供之后使用 大多数情况下 特别是企业级应用数据持久化意味着将内存中的数据保存到硬盘上加以 固化 而持久化的实现过程大多通过各种关系数
  • Java多线程两种实现

    在java中实现多线程的方式有两种 一种是继承Thread类 另一个是实现Runnable接口 对于两种实现 各有优缺点 接下来进行对比总结一下 这两种方法 都可以实现多线程 以下为两种实现的写法 继承Thread类的方式 package
  • Java原生代码连接MySQL数据库

    本章我们介绍 如何用java原生代码实现连接MySQL数据库并实现基本的增 删 改 查操作 为了便于演示 首先我们使用Navicat Premium新建一个user表并添加如下数据 我们需要导入连接MySQL所需要的jar包 jdbc驱动包
  • 关于elasticsearch与kibana、IK分词器

    初识elasticsearch 正向索引和倒排索引 什么是文档和词条 每一条数据就是一个文档 对文档中的内容分词 得到的词语就是词条 elasticsearch就是面对文档存储的 可以是数据库中的一条商品数据 一个订单信息 文档数据会被反序
  • Kafka3.1安装配置,配置Kafka集群,Zookeeper集群

    1 下载Kafka安装包 Kafka官网下载地址 https kafka apache org downloads 2 解压压缩包 tar zxvf kafka 2 12 3 1 0 tgz c kafka 3 进入配置文件目录 cd ka
  • 什么是Docker容器?一文带你了解,看完直接学会

    一 为什么需要Docker容器 1 引入 1 1麻烦的环境部署 1 在软件开发中 最麻烦的事情之一就是环境配置 在正常情况下 如果要保证程序能运行 我们需要设置好操作系统 以及各种库和组件的安装 2 举例来说 要运行一个Python程序 计
  • NotePad++安装HEX-Editor插件

    在菜单栏点击插件 插件管理 搜索HEX Editor并打钩 点击安装 然后重新打开notepad 会发现工具栏多了一个H的符号 此时点击H 即可以16进制的形式读取当前文件 还是没有的话建议多试几次
  • JAVA进阶(三)——注解和反射

    文章目录 三 注解和反射 3 1 注解的概念 什么是注解 Annotation Annotation的作用 Annotation的格式 Annotation在哪里使用 3 2 内置注解 Override 定义在java lang Overr
  • SpringBoot整合Druid-Mybatis&SpringSecurity使用

    SpringBoot整合JDBC 创建springBoot项目时首先需要导入JDBC的支持 以及MySQL驱动
  • java各种异常总结

    一 java异常汇总 1 Throwable 是所有异常的祖先 Throwable有两个子类 Error和Exception 2 Error是错误 表示运行应用程序中出现了严重错误 都是通过Error抛出的 一般程序无法处理 Excepti

随机推荐

  • linux 服务器搭建 elasticsearch(一)

    1 安装java jdk 环境 查看可安装版本 yum y list java 选择一个java版本进行安装 这里我们希望安装java1 8 因为我们的机器是64位的 所以选择安装java 1 8 0 openjdk devel x86 6
  • Linux编程复习(3)——信号与中断

    信号是响应某些状况而产生的事件 进程在接收到信号时会采取相应的行动 某些状况就是指某些条件错误 如内存段冲突 浮点处理器错误或者非法指令等 信号是在软件层次上对中断的一种模拟 所以信号也称为是软中断 信号与中断的相似点 1 都采用相同的额异
  • OpencvX.X中Mat与IplImage类型的相互转换

    1 Opencv4 x中Mat与IplImage的转换 1 Mat转IPLImage IplImage img cvIplImage mat 2 IplImage转Mat Mat cvarrToMat const CvArr arr boo
  • 从异步调用返回响应:多语言指南

    Asynchronous调用是现代编程的基础 可以有效地处理可能需要时间的任务 例如网络请求或文件操作 然而 response从这些asynchronous电话中获取信息可能会让新手感到困惑 在本指南中 我们将探讨如何从不同编程语言的异步调
  • 4款堪称神器的电脑黑科技软件,让人相见恨晚

    Syncthing 一款免费的开源跨平台文件同步客户端 服务器工具 支持Linux Windows OSX FreeBSD以及Solaris等系统 具有一个强大的响应式的网页管理界面 能够帮助用户简便地添加 删除和管理通过网络进行同步的文件
  • TX2上如何查看cuda版本

    如果知道安装的路径 一般都是在local下 可以直接查看 nvidia tegra ubuntu cat usr local cuda version txt CUDA Version 9 0 252 能看到机器上的CUDA版本是9 0 2
  • 国家级、省、市专精特新申报条件汇总

    国家级专精特新硬性条件 1 企业成立3年及以上 2 企业从业人员1000人以下或营业收入40000万元以下 3 已认定为省级专精特新 不硬性规定 有优先推荐权 4 截至上年末的近2 年主营业务收入或净利润的平均增长率达到5 以上 企业资产负
  • 构建方便安全的HttpClient工具类

    构建方便安全的HttpClient工具类 前言 开始 引入核心依赖 其它依赖 封装工具类 1 UrlEntity 2 HttpClientException 3 IoUtil 4 UrlUtil 5 SingletonUtil 开始构建 6
  • C语言—随机种子的设定

    计算是CPU和内存进行交互 运算是很快的 打印时CPU 内存和显示器进行交互 运算较慢 计算机在访问输入输出设备的时候 运算速度会大大降低 1 计算 n 的阶乘 int factor int n int result 1 for int i
  • 从gitHub当中更新项目synchronize Update fetch pull 项目的区别

    从gitHub更新项目 马克 to win 马克 java社区 防盗版实名手机尾号 73203 马克 to win 方法一 右击你的项目 team synchronize workspace 这样他就会去gitHub那fetch回最新的版本
  • iOS View Controller 全屏布局

    iOS View Controller 全屏布局 2014 09 08 自 iOS 7 以后苹果开始默认对 View Controller 采用全屏布局 全屏布局的意思就是 View Controller 的 layout 是填满整个屏幕的
  • MySQL——在Linux环境下安装(在线安装)

    MySQL的安装 在线安装 mysql的安装并不是比赛的内容 所以我们用比较方便的在线安装的方法 比起安装 我们更要知道如何去使用 首先看一下自己有没有安装MySQL的服务 或者自己的服务器上有没有自带的MySQL服务 rpe ga gre
  • Adapter理解

    这里也算回顾做Android开发时候遇到的一个问题吧 当时对Android中适配器的使用不是很了解 也不知道每一种适配器的局限性和用法 用的时候出现很多异 所以 适配器就我自己来看 我觉得这是一个非常重要的知识点 Adapter是用来帮助填
  • OpenGL-渲染光照球体

    3 光照 注意 a OpenGL至少会支持8个光源 即GL LIGHT0到GL LIGHT7 但是开启过多的光源会导致程序运行速度下降 b GL AMBIENT GL DIFFUSE GL SPECULAR这三种属性是光源和材质所共有的 如
  • 【华为OD机试真题 JAVA】查找众数及中位数

    JS版 华为OD机试真题 JS 查找众数及中位数 标题 查找众数及中位数 时间限制 1秒 内存限制 262144K 语言限制 不限 1 众数是指一组数据中出现次数量多的那个数 众数可以是多个 2 中位数是指把一组数据从小到大排列 最中间的那
  • python错误:AttributeError: 'list' object has no attribute 'sorted'

    列表学习的错误 AttributeError list object has no attribute sorted 没有注意sort 和sorted 的区别 sort 是方法 sorted 是函数 方法是调用 函数进行数据传递 So 区别
  • Shadow Mapping 的原理与实践

    早在上世纪七十年代末 Williams在他的 Casting Curved Shadows on Curved Surface 一文中提出了名为Shadow Map的阴影生成技术 之后 他人在此基础上针对相关问题做了许多改进 现在 Shad
  • Wireshark分析DHCP

    DHCP DNS和HTTP是3种常见的高层协议 一 动态主机配置协议DHCP 1 DHCP简介 DHCP Dynamic Host Configuration Protocol 动态主机配置协议 是一个应用层协议 当我们将客户主机ip地址设
  • Spring Boot获取登录用户IP

    控制器方法 RequestMapping value getIp method RequestMethod POST ResponseBody public String getIp HttpServletRequest request r
  • Tcp协议中的3次握手与4次挥手过程分析

    转载https blog csdn net u012824097 article details 52490091 客户端与服务端的通信中步骤 1建立Tcp连接 3次握手 2再进行数据传输 3数据传输完成后 断开连接 4次挥手 建立Tcp连