计算机网络学习:TCP握手挥手强制连接中断

news2024/11/13 9:45:11

之前系统学习过TCP协议,但很多地方并不是特别清晰,今天结合抓包情况,再拾一下拾一下>.<
![

首先看一下TCP数据包的标志位:
SYN:简写为S,同步标志位,用于建立会话连接,同步序列号;
ACK: 简写为.,确认标志位,对已接收的数据包进行确认;
FIN: 简写为F,完成标志位,表示我已经没有数据要发送了,即将关闭连接;
PSH:简写为P,推送标志位,表示该数据包被对方接收后应立即交给上层应用,而不在缓冲区排队;
RST:简写为R,重置标志位,用于连接复位、拒绝错误和非法的数据包;
URG:简写为U,紧急标志位,表示数据包的紧急指针域有效,用来保证连接不被阻断,并督促中间设备尽快处理;
ps:(赋值粘贴自:https://juejin.cn/post/6844904070000410631,写的很详细)

三次握手

第一次握手(SYN):客户端向服务器发送一个 SYN(Synchronize)报文段,用来请求建立连接。该报文段包含客户端的初始序列号 ISN©。

客户端 --> 服务器: SYN=1, Seq=ISN©=80830526

192.168.1.7.36268 > 192.168.1.9.22: Flags [S], cksum 0x01dc (correct), seq 80830526, win 62440, options [mss 4460,sackOK,TS val 3708280593 ecr 0,nop,wscale 7], length 0

第二次握手(SYN-ACK):服务器收到 SYN 报文后,返回一个 SYN-ACK 报文,表示同意建立连接,并向客户端发送自己的初始序列号 ISN(s)。ACK 字段确认了客户端的 ISN。

服务器 --> 客户端: SYN=1, ACK=1, Seq=ISN(s)=1265140446, Ack=ISN©+1=80830527

192.168.1.9.22 > 192.168.1.7.36268: Flags [S.], cksum 0x97c6 (incorrect -> 0x6c95), seq 1265140446, ack 80830527, win 62970, options [mss 4210,sackOK,TS val 591110811 ecr 3708280593,nop,wscale 7], length 0

第三次握手(ACK):客户端收到服务器的 SYN-ACK 报文后,发送一个确认报文段 ACK,确认服务器的 ISN,表示连接建立成功。

客户端 --> 服务器: ACK=1, Seq=ISN©+1, Ack=ISN(s)+1,二者均被tcpdump转换为了相对序列号:1

192.168.1.7.36268 > 192.168.1.9.22: Flags [.], cksum 0x9a32 (correct), seq 1, ack 1, win 488, options [nop,nop,TS val 3708280593 ecr 591110811], length 0

完整的三次握手过程见:

13:21:19.951917 00:00:00:00:01:01 > 00:00:00:00:01:02, ethertype IPv4 (0x0800), length 74: (tos 0x10, ttl 63, id 13722, offset 0, flags [DF], proto TCP (6), length 60)
    192.168.1.7.36268 > 192.168.1.9.22: Flags [S], cksum 0x01dc (correct), seq 80830526, win 62440, options [mss 4460,sackOK,TS val 3708280593 ecr 0,nop,wscale 7], length 0
13:21:19.951973 00:00:00:00:01:02 > 00:00:00:00:01:01, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
    192.168.1.9.22 > 192.168.1.7.36268: Flags [S.], cksum 0x97c6 (incorrect -> 0x6c95), seq 1265140446, ack 80830527, win 62970, options [mss 4210,sackOK,TS val 591110811 ecr 3708280593,nop,wscale 7], length 0
13:21:19.952050 00:00:00:00:01:01 > 00:00:00:00:01:02, ethertype IPv4 (0x0800), length 66: (tos 0x10, ttl 63, id 13723, offset 0, flags [DF], proto TCP (6), length 52)
    192.168.1.7.36268 > 192.168.1.9.22: Flags [.], cksum 0x9a32 (correct), seq 1, ack 1, win 488, options [nop,nop,TS val 3708280593 ecr 591110811], length 0

三次握手的协商:在三次握手过程中,双方会协商一些关键参数,例如初始序列号(ISN),窗口大小(Window Size),以及一些 TCP 选项(如最大报文段长度 MSS)。这些参数的协商确保了后续的数据传输可以顺利进行。我们仔细看下刚才三次握手过程中,客服端服务端协商的信息:

  • 窗口大小 窗口大小(Window Size),表示接收方愿意接收的字节数,通常用于流量控制。

  • mss 4210: 最大报文段大小(Maximum Segment Size),表示单个 TCP 段允许的最大数据量,这里是 4210 字节。

  • sackOK: 选择性确认(Selective Acknowledgment)允许,表示接收方支持 SACK 选项,允许更有效地处理丢失的数据包。

  • TS val 591110811: 时间戳(Timestamp)值,用于 RTT 测量和防止序列号重用攻击。

  • ecr 3708280593: 时间戳回显回复(Echo Reply),表示时间戳的回复值,用于对方确认 RTT。

  • nop: No Operation,用于对齐 TCP 选项字段。

  • wscale 7: 窗口扩大因子(Window Scale),是一个用于扩大窗口大小的因子。这里的因子是 7,即窗口大小可以乘以 2^7。

传输过程

拓扑:192.168.1.7 ·············> 192.168.1.9
传输过程中,比较简单,通信双方分别确认对方的数据报文序列号

15:43:11.911729 IP 192.168.1.7.60704 > 192.168.1.9.ssh: Flags [P.], seq 33:1545, ack 43, win 502, options [nop,nop,TS val 531487780 ecr 3452696654], length 1512
15:43:11.911774 IP 192.168.1.9.ssh > 192.168.1.7.60704: Flags [P.], seq 43:1155, ack 1545, win 501, options [nop,nop,TS val 3452696655 ecr 531487780], length 1112
15:43:11.911839 IP 192.168.1.7.60704 > 192.168.1.9.ssh: Flags [.], ack 1155, win 501, options [nop,nop,TS val 531487780 ecr 3452696655], length 0
15:43:11.917012 IP 192.168.1.7.60704 > 192.168.1.9.ssh: Flags [P.], seq 1545:1593, ack 1155, win 501, options [nop,nop,TS val 531487785 ecr 3452696655], length 48
15:43:11.919997 IP 192.168.1.9.ssh > 192.168.1.7.60704: Flags [P.], seq 1155:1751, ack 1593, win 501, options [nop,nop,TS val 3452696663 ecr 531487785], length 596
15:43:11.920055 IP 192.168.1.7.60704 > 192.168.1.9.ssh: Flags [.], ack 1751, win 501, options [nop,nop,TS val 531487788 ecr 3452696663], length 0

四次挥手

截取了四次挥手的过程,如下:

16:00:35.625181 IP 192.168.1.7.60706 > 192.168.1.9.ssh: Flags [F.], seq 3361, ack 4015, win 501, options [nop,nop,TS val 532531491 ecr 3453740368], length 0
16:00:35.626116 IP 192.168.1.9.ssh > 192.168.1.7.60706: Flags [F.], seq 4015, ack 3362, win 501, options [nop,nop,TS val 3453740370 ecr 532531491], length 0
16:00:35.626173 IP 192.168.1.7.60706 > 192.168.1.9.ssh: Flags [.], ack 4016, win 501, options [nop,nop,TS val 532531492 ecr 3453740370], length 0

客户端 192.168.1.7 通过发送 FIN 数据包请求关闭连接。
服务器 192.168.1.9 确认了客户端的请求,并发送了自己的 FIN 请求,表示它也准备关闭连接。
客户端最后发送一个 ACK 数据包,确认服务器的 FIN 请求,至此连接关闭。

虽然这个过程可以用三个报文来表示,但它仍然遵循四次挥手的逻辑。特别是在服务器发送的第二个报文中,FIN 和 ACK 是同时发送的,所以看起来像是三次通信,但实际上包含了四次挥手的全部内容。

RST强制中断

发送 RST 报文是强制关闭 TCP 连接的方式,直接中断连接而不进行四次挥手的正常关闭过程。这种方法用于快速和直接地终止连接,通常在出现错误或异常情况下使用。比如连接超时、程序异常终止等。其行为如下:

  • 立即终止连接:RST 报文会立即终止连接,无论连接的状态如何。发送 RST 报文的一方(可以是客户端也可以是服务端)将直接通知对方,表示连接不能再继续进行。

  • 不进行四次挥手:与正常关闭连接时的四次挥手不同,RST 报文不需要等待确认,也不会进行正常的连接关闭过程。RST 报文会立即中断数据传输,并且不进行数据的有序释放。

  • 丢失未发送数据:由于 RST 报文强制关闭连接,任何在连接中尚未发送的数据都会被丢失。

尝试使用如下命令构造了RST报文的场景

apt install dsniff # 安装tcpkill
# 如果有从eth0 到192.168.1.9的连接就中断掉
tcpkill -i eth0 host 192.168.1.9
# 尝试和192.168.1.9建立连接
telnet 192.168.1.9 22

抓包来看

16:42:32.176289 IP 192.168.1.7.60722 > 192.168.1.9.ssh: Flags [S], seq 1907790919, win 64240, options [mss 1460,sackOK,TS val 535048037 ecr 0,nop,wscale 7], length 0
16:42:32.176301 IP 192.168.1.9.ssh > 192.168.1.7.60722: Flags [S.], seq 3539316215, ack 1907790920, win 65160, options [mss 1460,sackOK,TS val 3456256920 ecr 535048037,nop,wscale 7], length 0
16:42:32.176402 IP 192.168.1.7.60722 > 192.168.1.9.ssh: Flags [.], ack 1, win 502, options [nop,nop,TS val 535048037 ecr 3456256920], length 0
16:42:32.182200 IP 192.168.1.9.ssh > 192.168.1.7.60722: Flags [P.], seq 1:43, ack 1, win 510, options [nop,nop,TS val 3456256926 ecr 535048037], length 42: SSH: SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.10
16:42:32.182267 IP 192.168.1.7.60722 > 192.168.1.9.ssh: Flags [.], ack 43, win 502, options [nop,nop,TS val 535048043 ecr 3456256926], length 0
16:42:32.348727 IP 192.168.1.7.60722 > 192.168.1.9.ssh: Flags [.], ack 43, win 502, options [nop,nop,TS val 535048210 ecr 3456256926], length 0
16:42:32.348836 IP 192.168.1.7.60722 > 192.168.1.9.ssh: Flags [R], seq 1907790920, win 0, length 0
16:42:32.348836 IP 192.168.1.7.60722 > 192.168.1.9.ssh: Flags [R], seq 1907791430, win 0, length 0
16:42:32.348836 IP 192.168.1.7.60722 > 192.168.1.9.ssh: Flags [R], seq 1907792450, win 0, length 0

telnet尝试和192.168.1.9建立连接,但是连接建立完成后,客户端直接发送RST报文,强制终止了连接,期间并发生四次挥手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu20.4 微信的安装

一、背景 ubuntu作为常用系统了&#xff0c;微信少不了&#xff0c;但官方没有微信的linux版本 appImage类似于windows下免安装版本。 二、方法 1、下载appImage格式的开源微信版本 https://github.com/zydou/WeChat-AppImage/releases 2、改文件改属性 为什么使用ubuntu 作…

计算机技术基础 (bat 批处理)Note5

计算机技术基础 &#xff08;bat 批处理&#xff09;Note5 本节主要讲解 FOR 命令语句&#xff08;循环&#xff09;在 bat 批处理中的使用 (part 1) FOR 命令语句 在批处理中&#xff0c;for 是最为强大的命令语句&#xff0c;它的出现&#xff0c;使得解析文本内容、遍历文…

Python数值计算(18)——三次样条曲线概述

1. 概述 前面介绍到了多种插值方法&#xff0c;但是这些插值方法都无法避免龙格现象&#xff0c;即高阶多项式可能存在剧烈的振动&#xff0c;而且在区间的一个点处的微小扰动&#xff0c;都可能引起整个范围内的巨大振动&#xff0c;一种替代方式是使用类似线性插值的方式&am…

Python进阶 JSON数据,pyecharts制图

目录 json数据格式的转换 什么是json json本质 注意 pyecharts快速入门 画一个最简单的折线图 使用全局配置选项优化折线图 总结 json数据格式的转换 什么是json 一种轻量级的数据交换格式&#xff0c;可以按json指定的格式去组织和封装数据 json本质 带有特定格式的…

OpenSPG安装部署

文章目录 前言一、安装前准备安装docker安装docker compose 二、安装服务端下载 docker-compose.yml 文件启动服务端 三、安装客户端拉取镜像克隆OpenSPG源码 案例 前言 OpenSPG是以SPG框架为基础设计和实现的知识图谱开放引擎&#xff0c;它为领域图谱构建提供了明确的语义表…

数据结构1绪论

一、数据结构的绪论的思维导图 二、数据 1.数据是描述客观存在事务的符号&#xff0c;其能被计算机识别&#xff0c;处理。 数据不仅仅是整型&#xff0c;实型等数值类型&#xff0c;还包括声音&#xff0c;视频&#xff0c;图像等。 三、数据元素 1.数据元素是组成数据的有…

PTA—基础编程题目集(7-20)

7-20 打印九九口诀表 目录 题目描述 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 参考代码 总结 题目描述 下面是一个完整的下三角九九口诀表&#xff1a; 1*11 1*22 2*24 1*33 2*36 3*39 1*44 2*48 …

js基础-作用域与作用域链

什么是作用域&#xff1f; 简单说就是在代码中定义的变量或者函数能起作用的范围 什么是作用域链&#xff1f; 简单说就是JavaScript 在执行时查找变量的过程&#xff0c;它按照从当前作用域到全局作用域的顺序逐层向上搜索&#xff0c;直到找到变量或到达作用域的顶…

C#进阶-轻量级ORM框架Dapper的使用教程与原理详解

本文详细介绍了Dapper在C#中的使用方法&#xff0c;包括Dapper的基本概念、与其他持久层框架的比较、基本语法和高级语法的使用&#xff0c;并通过实例讲解了如何在项目中集成和使用Dapper。Dapper以其高效的性能和简洁的API受到开发者的青睐&#xff0c;适用于各种数据库操作需…

基于环形拓扑的多目标粒子群优化算法(MO_Ring_PSO_SCD)求解无人机三维路径规划(MATLAB代码)

一、无人机多目标优化模型 无人机三维路径规划是无人机在执行任务过程中的非常关键的环节&#xff0c;无人机三维路径规划的主要目的是在满足任务需求和自主飞行约束的基础上&#xff0c;计算出发点和目标点之间的最佳航路。 1.1路径成本 无人机三维路径规划的首要目标是寻找…

怎么智能化管理公司众多电脑?公司电脑太多怎么管控!智慧运维,精准管控的它来啦!

俗语称&#xff1a;“团结则强&#xff0c;分散则弱&#xff1b;集腋成裘&#xff0c;聚沙成塔。” 面对公司里如繁星般的电脑大军&#xff0c;你是否曾感到管理无力&#xff0c;仿佛在与一群“不羁的野马”较劲&#xff1f;别担心&#xff0c;智慧运维的浪潮已经席卷而来&…

Mybatis学习(3)

目录 一、JDBC vs Mybatis 二、Mybatis Plugin 三、Dao接口和xml文件的sql如何建立关联 四、Mybatis如何将sql执行结果封装为目标对象并返回的&#xff1f;都有哪些映射形式&#xff1f; 五、动态SQL 六、一级缓存和二级缓存 七、接口绑定的实现 八、Mybatis vs Hiberna…

Mybatis的注解开发学习笔记

学习视频:5001 Select注解_哔哩哔哩_bilibili~5009 案例&#xff1a;基于MyBatis注解的学生管理程序_哔哩哔哩_bilibili 目录 1.基于注解的单表增删改查 1.1Select注解 1.2Insert注解 1.3Update注解 1.4Delete注解 1.5Param注解 2.基于注解的关联查询 2.1一对一查询 2.2…

[Meachines] [Easy] nibbles Nibbleblog-Upload

信息收集 IP AddressOpening Ports10.10.10.75TCP:22,80 $ nmap -p- 10.10.10.75 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 c4:f8:ad:e8:f8:04:…

实践致知第17享:电脑忽然黑屏的常见原因及处理方法

一、背景需求 小姑电话说&#xff1a;最近&#xff0c;电脑忽然就黑屏了&#xff08;如下图所示&#xff09;&#xff0c;但是等待几十秒甚至一分钟&#xff0c;电脑就能自然恢复了&#xff0c;这种状况一天能出现三四次&#xff0c;怎么办&#xff1f; 二、分析诊断 电脑黑屏…

C++从入门到起飞之——string类用法 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1. 为什么学习string类&#xff1f; 1.1 C语言中的字符串 1.2 两个面试题(先不做讲解) 2. 标准库中…

IMYAI智能助手介绍:全能AI工具箱,AI爱好者AIGC系统的首选。

IMYAI系统官方网站&#xff1a;https://new.imyai.top 引言&#xff1a; IMYAI系统是一款集多种先进AI技术于一身的创作工具箱&#xff0c;为用户提供无限的创作可能。不论您是想创作精彩的文章&#xff0c;还是创作精美的绘画作品&#xff0c;IMYAI系统都能满足您的需求。它集…

不想要反馈的错误遮挡页面,,想让它在控制台提示

开始页面是这样的 然后在vue.config.js 中修改 devServer: {client: {//当出现编译错误或警告时&#xff0c;在浏览器中是否显示全屏覆盖。 示例为只显示错误信息overlay: {runtimeErrors: false,},},},然后关闭服务&#xff0c;重新运行项目。 结果

【Netty】netty启动流程源码解析

文章目录 Netty整体架构一个启动流程源码解析new NioEventLoopGroup(1)构建线程池基础信息构建线程选择策略 groupchannelhandlerchildHandlerbindinitAndRegister反射创建 NioServerSocketChannel 对象init 注册channeldoBind0 流程图思考 Netty整体架构 是什么&#xff1a; N…

【学习方法】高效学习因素 ① ( 开始学习 | 高效学习因素五大因素 | 高效学习公式 - 学习效果 = 时间 x 注意力 x 精力 x 目标 x 策略 )

文章目录 一、高效学习因素1、开始学习2、高效学习因素五大因素3、高效学习公式 - 学习效果 时间 x 注意力 x 精力 x 目标 x 策略 一、高效学习因素 1、开始学习 对于 学习差 , 调皮捣蛋 的学生 , 不要把 学习成绩差 的 原因 归因为 不爱学习 / 没有学习方法 , 可能是 还没有 …