TCP中的RST标志(Reset)详解【转】

7 篇文章 1 订阅
订阅专栏

本来只是查下RST的作用,但发现这篇文章中的三次握手和四次挥手讲的不错,所以转过来记录下!
文章要点:
1.Reset为重置操作,Reset包不用等所有包都发送完在发送,随时可以发送,发送时会丢弃发送缓冲区的数据
2.FIN会等缓冲区的数据包发送完后再发送
3.理论上TCP包每个seq的包都要收到Ack确认后才会发送后续的包,但有了win(滑动窗口)后可以不必每次都收到确认再发,只要新包的seq与没有得到确认的seq之间的差值下win之内就可以继续发包
4.对于RST报文段,另一端不需要发送任何响应,因为发送完RST报文后,这条tcp连接就关闭了,也就没有必要确认了

在一些情况下,我们可能想让服务端把数据发送完,然后再关闭tcp连接,而不是马上发送RST报文终止这条连接,那么可以在套接字编程中使用SO_LINGER选项SO_LINGER选项是用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成,但是并不保证数据一定会被对方接收,只是等待一段时间后,再正常关闭tcp连接。如果SO_LINGER设置为0,则会清除队列中的所有数据,直接发送RST报文关闭连接(关于这个实验可参考:10-在accept之前中止连接(连接异常))。
版权声明:本文为CSDN博主「songly_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35733751/article/details/80205158

原文链接:TCP中的RST标志(Reset)详解
在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是怎么传输数据的、TCP的flag标志位里RST在哪些情况下出现。下面我会画一些尽量简化的图来表达清楚上述几点,之后再了解下RST攻击是怎么回事。

1、TCP是什么?

TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输。我来用土语解释下上面的几个关键字:

port到port:IP层只管数据包从一个IP到另一个IP的传输,IP层之上的TCP层加上端口后,就是面向进程了,每个port都可以对应到用户进程。

可靠:TCP会负责维护实际上子虚乌有的连接概念,包括收包后的确认包、丢包后的重发等来保证可靠性。由于带宽和不同机器处理能力的不同,TCP要能控制流量。

字节流:TCP会把应用进程传来的字节流数据切割成许多个数据包,在网络上发送。IP包是会失去顺序或者产生重复的,TCP协议要能还原到字节流本来面目。
在这里插入图片描述
从上面我用PowerPoint画的TCP协议图可以看到,标志位共有六个,其中RST位就在TCP异常时出现,也是我这篇文章重点关注的地方。

2、通过三次握手建立连接

下面我通过A向B建立TCP连接来说明三次握手怎么完成的。
在这里插入图片描述
为了能够说清楚下面的RST攻击,需要结合上图说说:SYN标志位、序号、滑动窗口大小。

建立连接的请求中,标志位SYN都要置为1,在这种请求中会告知MSS段大小,就是本机希望接收TCP包的最大大小。

发送的数据TCP包都有一个序号。它是这么得来的:最初发送SYN时,有一个初始序号,根据RFC的定义,各个操作系统的实现都是与系统时间相关的。之后,序号的值会不断的增加,比如原来的序号是100,如果这个TCP包的数据有10个字节,那么下次的TCP包序号会变成110。

滑动窗口用于加速传输,比如发了一个seq=100的包,理应收到这个包的确认ack=101后再继续发下一个包,但有了滑动窗口,只要新包的seq与没有得到确认的最小seq之差小于滑动窗口大小,就可以继续发。

3、滑动窗口

滑动窗口毫无疑问是用来加速数据传输的。TCP要保证“可靠”,就需要对一个数据包进行ack确认表示接收端收到。有了滑动窗口,接收端就可以等收到许多包后只发一个ack包,确认之前已经收到过的多个数据包。有了滑动窗口,发送端在发送完一个数据包后不用等待它的ack,在滑动窗口大小内可以继续发送其他数据包。举个例子来看吧。
在这里插入图片描述
大家看上图,标志位为.表示所有的flag都为0。标志位P表示flag为PSH的TCP包,用于快速传输数据。
前三个包是三次握手,客户端表示自己的滑动窗口大小是65535(我的XP机器),服务器端表示滑动窗口是5840(屏幕宽了,没截出来)。从第四个包开始,客户端向服务器发送PSH包,数据长度是520字节,服务器发了ack确认包。注意此时win窗口大小发生了改变哈。以此类推。
倒数第二、三包,服务器在滑动窗口内连续向客户端发包,客户端发送的ack 124同时确认了之前的两个包。这就是滑动窗口的功能了。
如果谈到TCP攻击就需要注意,TCP的各种实现中,在滑动窗口之外的seq会被扔掉!下面会讲这个问题。

4、四次握手的正常TCP连接关闭
先画张简单的正常关闭连接状态变迁图。
在这里插入图片描述
FIN标志位也看到了,它用来表示正常关闭连接。图的左边是主动关闭连接方,右边是被动关闭连接方,用netstat命令可以看到标出的连接状态。

FIN是正常关闭,它会根据缓冲区的顺序来发的,就是说缓冲区FIN之前的包都发出去后再发FIN包,这与RST不同。

5、RST标志位

RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。就像上面说的一样,发送RST包关闭连接时,不必等缓冲区的包都发出去(不像上面的FIN包),直接就丢弃缓存区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。

TCP处理程序会在自己认为的异常时刻发送RST包。例如,A向B发起连接,但B之上并未监听相应的端口,这时B操作系统上的TCP处理程序会发RST包。

又比如,AB正常建立连接了,正在通讯时,A向B发送了FIN包要求关连接,B发送ACK后,网断了,A通过若干原因放弃了这个连接(例如进程重启)。网通了后,B又开始发数据包,A收到后表示压力很大,不知道这野连接哪来的,就发了个RST包强制把连接关了,B收到后会出现connect reset by peer错误。

6、RST攻击

A和服务器B之间建立了TCP连接,此时C伪造了一个TCP包发给B,使B异常的断开了与A之间的TCP连接,就是RST攻击了。实际上从上面RST标志位的功能已经可以看出这种攻击如何达到效果了。

那么伪造什么样的TCP包可以达成目的呢?我们至顶向下的看。

假定C伪装成A发过去的包,这个包如果是RST包的话,毫无疑问,B将会丢弃与A的缓冲区上所有数据,强制关掉连接。

如果发过去的包是SYN包,那么,B会表示A已经发疯了(与OS的实现有关),正常连接时又来建新连接,B主动向A发个RST包,并在自己这端强制关掉连接。

这两种方式都能够达到复位攻击的效果。似乎挺恐怖,然而关键是,如何能伪造成A发给B的包呢?这里有两个关键因素,源端口和序列号。

一个TCP连接都是四元组,由源IP、源端口、目标IP、目标端口唯一确定一个连接。所以,如果C要伪造A发给B的包,要在上面提到的IP头和TCP头,把源IP、源端口、目标IP、目标端口都填对。这里B作为服务器,IP和端口是公开的,A是我们要下手的目标,IP当然知道,但A的源端口就不清楚了,因为这可能是A随机生成的。当然,如果能够对常见的OS如windows和linux找出生成source port规律的话,还是可以搞定的。

序列号问题是与滑动窗口对应的,伪造的TCP包里需要填序列号,如果序列号的值不在A之前向B发送时B的滑动窗口内,B是会主动丢弃的。所以我们要找到能落到当时的AB间滑动窗口的序列号。这个可以暴力解决,因为一个sequence长度是32位,取值范围0-4294967296,如果窗口大小像上图中我抓到的windows下的65535的话,只需要相除,就知道最多只需要发65537(4294967296/65535=65537)个包就能有一个序列号落到滑动窗口内。RST包是很小的,IP头+TCP头也才40字节,算算我们的带宽就知道这实在只需要几秒钟就能搞定。

那么,序列号不是问题,源端口会麻烦点,如果各个操作系统不能完全随机的生成源端口,或者黑客们能通过其他方式获取到source port,RST攻击易如反掌,后果很严重。

TCP协议的原理来谈谈rst复位攻击
iteye_10227的博客
02-06 4856
在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是怎么传输数据的、TCP的flag标志位里RST在哪些情况下出现。下面我会画一些尽量简化的图来表达清楚上述几点,之后再了解下RST攻击是怎么回事。   1、TCP是什么? TCP是在IP网络层之上的传输层协议,用于提供port到port面向连接的可靠的字节流传输。我来用土语解释下上面...
nginx 报错 connect() failed (111: Connection refused) while connecting to upstream
热门推荐
ljihe的博客
09-18 7万+
公司网站搬迁到新服务器后,发现站点访问不了,network里面提示502,查看相关的server配置,感觉没有什么问题,经过测试发现txt、html、等非php文件能够直接访问,也就是php访问不了,初步断定有可能是php-fpm没有安装或者没有启动导致。 首先判断php-fpm是否已经安装,没有安装的情况就需要先安装php-fpm,安装可以参数相关资料。 确定好服务器已经安装了php
TCP异常终止(reset报文)
韦编二绝
10-08 4万+
文章出处:http://www.vants.org/?post=22 TCP异常终止(reset报文) TCP的异常终止是相对于正常释放TCP连接的过程而言的,我们都知道,TCP连接的建立是通过三次握手完成的,而TCP正常释放连接是通过四次挥手来完成,但是有些情况下,TCP在交互的过程会出现一些意想不到的情况,导致TCP无法按照正常的四次挥手来释放连接,如果此时不通过其他的方式来
【Python3 网络编程】ConnectionRefusedError: [Errno 111] Connection refused
01-06
在网络通信,经常出现Connection Refused报错提示,不仅仅是socket编程,也有xshell连接时出现这种问题。在查阅资料后,把常见问题记入本文。 服务器拒绝,有几个可能性: 服务器没启动或未监听端口(用TCP工具连一下你的服务器,看下服务器是否正常监听端口。如果是Windows开发者也可以使用Windows的CMD命令行telnet测试下,格式是 telnet 地址 端口); 地址错误; 端口错误; 类型错误; 被防火墙拦截。 我觉得在Client请求连接的过程被Refused是因为HA尚未抓到包并Recognized,导致HA的跳变真实套接字并没有被bind
TCP连接重置,到底怎么回事?还是得网工大佬来分析!
最新发布
mengmeng_921的博客
09-03 1006
通过图7可以看出,服务器响应了SYN/ACK包,而立刻回复了一个RST,这是由于发送RST包的设备为间的安全设备,在进行旁路阻断时,只能通过发送RST进行阻断,而无法拦截服务器已发出的SYN/ACK包。除服务器外,在连接建立阶段,客户端也有可能发送RST包,如图3、图4所示,在连接建立已经经历了SYN包、SYN/ACK包的交互后,甚至三次握手完成后,客户端突然发送RST包,表示客户端拒绝连接。因此,当客户端或服务器的任意一方需要拒绝连接,或认为连接出现错误时,即可以发送RST包重置当前TCP连接。
Python ConnectionRefusedError: [Errno 111] Connection Refused 错误
迹忆客
12-04 1万+
当客户端无法连接到服务器时,会出现 Python 的 ConnectionRefusedError。几个原因包括客户端不知道 IP 或端口地址,以及当客户端想要连接时服务器未运行。上面提到的几种方法可以解决此连接问题。
ConnectionRefusedError: [Errno 111] Connection refused
LiuXiaoXueer的博客
10-28 2万+
运行代码时出现以下错误: raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8097): Max retries exceeded with url: /env/main (Caused by NewCon...
TCP协议RST标志详解:重要特性和下载资源
RSTReset标志位在TCP标志字段占据一席之地,当出现异常或需要终止连接时,这个标志会被置位。 TCP标志包括多个字段,如URG(紧急指针),用于指示是否有紧急的数据需要立即处理;ACK(确认号), 用于确认接收...
TCP协议RST标志位 作者文章电子版 需要的下载
06-04
TCP 协议RST 标志详解 TCP(Transmission Control Protocol,传输控制协议)是 Internet 协议簇的一种传输层协议,用于提供可靠的、面向连接的数据传输服务。TCP 协议有多种标志位,用于控制数据传输的...
TCP原理解析:RST攻击详解与三次握手过程
2. RST标志位:RSTTCP标志代表"Reset",用于断连接或报告错误。当连接无法正常进行,例如超时、非法数据、拒绝服务等情况,发送方可以发送一个带有RST标志的包来终止连接,而不是等待正常的四次挥手过程。 ...
TCP SYN ACK FIN RST PSH URG.doc
05-24
RSTReset,复位)标志用于复位相应的 TCP 连接。当主机需要尽快关闭连接(或连接超时、端口或主机不可达)时,会发送一个 RST 包。 PSH 标志 PSH(Push,推送)标志将数据推送到应用程序的缓冲区。该标志置位...
connect() failed (111: Connection refused) while connecting to upstream问题处理
企业实战系列集 ●●● https://ximenjianxue.blog.csdn.net
03-04 5万+
【问题描述】 今天巡检Web服务器时,发现Nginx的error日志里,有许多报错信息,其有一条如下显示: [error] 2334#2334: *253268 connect() failed (111: Connection refused) while connecting to upstream, client: 172.12.23.44, server: 212.65.12.29, r...
【Python】解决Python报错:OSError: [Errno 111] Connection refused
科技改变人类,技术成就未来
06-04 868
解决Python报错:OSError: [Errno 111] Connection refused
connect() failed (111: Connection refused) while connecting to upstream
weixin_40918145的博客
06-12 995
问题背景:使用docker,部署nginx,配置子域名,映射不同web项目,比如a.baicu.com访问 /home/a,而b.baidu.com访问 /home/b。因为使用的是docker部署,所以dockerfile文件也要映射端口。需要开启端口 8001的端口,包括防火墙和云服务器的8001端口。
ConnectionRefusedError: [Errno 111] 拒绝连接
stoneWang_L的博客
10-25 1万+
pip3 install --upgrade pip //结果 Exception: Traceback (most recent call last): File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connection.py", line 138, in _new_conn ...
connect() failed (111 Connection refused) while connecting to upstream
Léon
04-27 2535
connect() failed (111: Connection refused) while connecting to upstream 报错 Nginx代理Vue项目,访问基于Flask搭建的后台时,一直报出访问路径错误。查看Nginx错误日志,发现报错是connect() failed (111: Connection refused) while connecting to upstream。 $ cat /var/log/nginx/error.log 2022/04/26 17:46:26
nginx日志文件报错: connect() failed (111: Connection refused) while connecting to upstream
公众号shadow sock7
07-09 2万+
nginx日志文件报错: connect() failed (111: Connection refused) while connecting to upstream 网上搜到一篇类似的问题: http://corpus.hubwiz.com/2/node.js/29370360.html 而upstream为:http://127.0.0.1:8888 在Hawkeye的server目录发...
connect() failed (111: Connection refused) while connecting to upstream的解决
LY_Dengle的专栏
04-07 2万+
查看nginx进程运行很正常,但是网页访问的时候会报错,在错误日志找到报错connect() failed (111: Connection refused) while connecting to upstream. 一般情况下我们的upstream都是fastcgi://127.0.0.1:9000. 造成这个问题的原因大致有两个  1.php-fpm没有运行 执行如下
写文章

热门文章

  • [转]Clion2019破解-Jetbrains系列产品2019.1.1最新激活方法[持续更新] 24235
  • 独显分辨率不能调高的解决办法 9425
  • TCP中的RST标志(Reset)详解【转】 5370
  • mysql几种常见的阻塞问题 5122
  • matlab + mnist 调用训练好的caffe模型进行手写体识别 4196

分类专栏

  • linux
  • 笔记
  • docker 1篇
  • 算法训练 2篇
  • 内存管理 1篇
  • 中间件
  • 网络 7篇
  • C 5篇
  • QT
  • C++ 13篇
  • opencv 3篇
  • caffe学习 3篇
  • 机器学习 4篇
  • 深度学习 6篇
  • 数据结构 4篇
  • 算法 5篇
  • PAT 1篇
  • PC使用 1篇
  • 图像算法 1篇
  • python 1篇
  • 语音
  • 自动化测试 1篇
  • tensorflow 1篇
  • 数据库 4篇

最新评论

  • mysql几种常见的阻塞问题

    ——春风十里: 可是不想增加额外的操作。。。

  • mysql几种常见的阻塞问题

    休哥哥来啦: 用乐观锁是不是可以实现呀

  • mysql几种常见的阻塞问题

    ——春风十里: 想请教一个问题,两个事务同时 update 同一条数据,在第一个事务未提交之前,第二个事务在执行时如何避免被阻塞,直接返回更新失败或抛出异常都行,如何避免第二个事务一直等待第一个事务的情况

  • TCP中的RST标志(Reset)详解【转】

    ctotalk: 好好学习,天天向上.

最新文章

  • docker入门
  • 一个并发编程的系列故事
  • mysql几种常见的阻塞问题
2021年5篇
2020年8篇
2019年14篇
2018年5篇
2017年9篇
2016年3篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家河源玻璃钢吉祥卡通雕塑益阳市玻璃钢雕塑定制卡通人玻璃钢雕塑摆件市场报价玻璃钢果篮雕塑供应呈贡玻璃钢雕塑产品厂家哪里有湖南定制玻璃钢雕塑供应商玻璃钢花盆怕水沈阳玻璃钢雕塑价格多少玻璃钢雕塑修复报价明细表天津仿铜玻璃钢雕塑多少钱赣州人物玻璃钢雕塑忻州玻璃钢广场雕塑定制广西玻璃钢金属雕塑制作人物玻璃钢雕塑制作过程玻璃钢雕塑产品厂家哪里好池州景观玻璃钢雕塑商场内衣区域美陈佛山玻璃钢人物雕塑定制价格玻璃钢剪影人物雕塑蒙城商场新年美陈户外动物园玻璃钢雕塑厂家泰州儿童玻璃钢雕塑设计大旺玻璃钢卡通雕塑批发临沧玻璃钢雕塑批发商东莞玻璃钢牛雕塑公园景观玻璃钢卡通雕塑定制西青玻璃钢花盆花器玻璃钢动物雕塑园林小品玻璃钢雕塑的材料及工艺无锡玻璃钢雕塑定做香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化