TCP协议的RST标志位
TCP首部字段有6个是flags,每个标志位有特殊的含义,它们可以单独存在,也可以同时存在。对于接收方,不同的标志位代表不同的意思,需要做正确的处理
Flags
可以在点击以太网报文结构查看各协议层协议首部字段及其含义
TCP协议首部格式
上图标注的红圈里有6个标志位,每个标志位占用一个比特
URG
紧急指针有效标识。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)
ACK
确认序号有效标识。只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效
PSH
标识接收方应该尽快将这个报文段交给应用层。接收到PSH = 1的TCP报文段,应尽快的交付接收应用进程,而不再等待整个缓存都填满了后再向上交付
RST
重建连接标识。当RST=1时,表明TCP连接中出现严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立连接
SYN
同步序号标识,用来发起一个连接。SYN=1表示这是一个连接请求或连接接受请求
FIN
发端完成发送任务标识。用来释放一个连接。FIN=1表明此报文段的发送端的数据已经发送完毕,并要求释放连接
RST
RST
Reset,复位标志,用于非正常地关闭连接。它是TCP协议首部里的一个标志位。发送RST包关闭连接时,直接丢弃缓冲区的包发送RST包(这个和发FIN包不同)。而接收端收到RST包后,也不必发送ACK包来确认
如何触发
正常地关闭连接用FIN标志位,但FIN标志位不能用来处理异常情况
举例
客户端和服务器TCP连接正常,突然服务器掉电重启,与客户端的TCP连接状态由于掉电而完全消失。之后,客户端发给服务器任何消息,都会触发服务器发RST作为回应。服务器之所以发RST,是因为连接不存在,通过Reset状态位,间接告诉客户端异常情况的存在。如果Reset顺利到达客户端,客户端意识到异常发生了,会立马释放该TCP连接所占用的内存资源(状态、数据)、以及端口号,且不会回复ACK
连接未监听的端口
连接一个未监听的端口,则被连接方会发送一个RST。也就是说主机传输层TCP程序接收到一个SYN包,而这个SYN包目的端口并没有socket监听,那么主机的协议栈会直接回复一个RST
目的主机或网络路径中的防火墙拦截
如果目的主机或者网络路径中显式的设置了对数据包的拦截
使用iptables对主机的防火墙添加了一条规则,对于目的端口是60000的TCP报文,丢弃并回复RST
socket接收缓冲区Recv-Q中的数据未完全被应用程序读取时关闭该socket
接收到的数据缓存在缓冲区Recv-Q,它们等待被上层应用取走,如果缓冲区Recv-Q有数据未被应用取走,而此时调用了socket.close()方法强行关闭TCP连接,那么TCP协议程序发送的就不是FIN,而是RST
向已关闭的socket发送数据
顾名思义,主机传输层TCP协议程序接收到一条TCP数据报,而目的端口并没有socket监听,那么主机的协议栈会直接回复一个RST
向已关闭的连接发送FIN
主机传输层TCP协议程序接收到一条FIN,而目的端口并没有socket监听,那么主机的协议栈会直接回复一个RST
向已经消逝的连接中发送数据
和上面的举例相同
请求超时后收到回复
主机创建socket,设置SO_RCVTIMEOUT选项为100ms,向对端发送SYN,过了100ms后才收到ACK+SYN,那么主机的协议栈会直接回复一个RST
SO_LINGER
socket设置SO_LINGER选项,socket调用close()函数时,会直接丢弃缓冲区Send_Q未发完的数据,并发送RST
Linux下启用TIME_WAIT快速回收
修改/etc/sysctl.conf中内核参数:
net.ipv4.tcp_tw_recycle = 1
当收到的SYN包的timestamp比上次的小时,就会发RST
TCP socket在任何状态下,只要收到RST包,即可进入CLOSED初始状态,不会有任何回应。至于是否通知上层应用,要根据应用程序是阻塞模式还是非阻塞模式:
阻塞模型下,内核无法主动通知应用层出错,只有应用层主动调用read()或者write()这样的IO系统调用时,内核才会利用出错来通知应用层对端RST
非阻塞模型下,select或者epoll会返回sockfd可读,应用层对其进行读取时,read()会报错RST
总结
FIN是客户端或服务器正常关闭tcp连接发的包,发送缓冲区Send-Q数据发完才会发FIN
RST是客户端或服务器异常关闭tcp连接发的包,通常都是主机收到不存在的tcp通道的tcp报文,主机“被迫”回复RST告知对方tcp连接异常,收到RST的一方就会关闭这个socket,释放所有socket信息,且不会回复ACK
TCP协议的RST标志位相关推荐
- TCP协议的RST标志
下文中的内容多数来自[参考]中的文章,这边进行一个整理和总结,后续会慢慢增加出现各个 RST 包的测试代码,便于理解. TCP的 "断开连接" 标志 RST 标志 Reset,复位 ...
- 笔记:TCP协议(PSH标志)
PSH标志位 单词PUSH,意思是"推". 接收缓冲区和发送缓冲区 进程A发送数据时,并不是直接发送,而是先写到自己的发送缓冲区.接收进程B接收到TCP报文时,会先将数据放入接收缓 ...
- TCP协议之RST与FIN
FIN 如下图所示,FIN表示正常关闭连接,没有数据丢失,缓冲区所有数据包都发送完成才会发送FIN包,这与RST不同. RST RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的.发送 ...
- TCP协议(标志位URG、PSH,定时器,连接的建立和断开)
目录 ●TCP段格式 ●TCP定时器 ●TCP三次握手和四次挥手 ●TCP段格式 6位标志位有紧急标志URG.推送标志PSH.确认标志ACK.复位标志RST.链接同步标志SYN以及结束标志FIN. ○ ...
- TCP标志位 FIN和RST的区别
大家都知道TCP释放连接需要四次挥手, 主动释放端会发送FIN包,并且因为TCP是双工的, 关闭一个方向上的数据流,从而TCP连接处于半关闭状态,这也是为什么需要"四次"挥手的原因 ...
- TCP标志位 RST作用、原理、攻击
TCP报头的标志位 TCP报头中一共有六个标志位:URG/ACK/PSH/RST/SYN/FIN. SYN TCP三次握手中,如果A是发起端,则A就对服务器发一个SYN报文.表示建立连接. ACK ...
- TCP协议中的URG和PSH位
相关背景知识 http://blog.csdn.net/double_happiness/article/details/74025156 在探讨TCP协议中的URG和PSH控制位时,我们先来简单的复 ...
- 计算机网络 | 传输层 :UDP与TCP协议详解
传输层 UDP UDP的协议格式 UDP的特点 基于UDP的应用层知名协议 UDP如何实现可靠传输 TCP TCP的协议格式 TCP的特点 连接管理机制 三次握手 四次挥手 保活机制 问题补充 可靠传 ...
- 关于TCP协议的几个问题
本文来说下关于TCP协议的几个问题. 文章目录 传输层 TCP/UDP DNS DNS 讲解 DNS 样例 TCP TCP 头部讲解 TCP 三次握手 TCP 数据传输大致流程 TCP 状态查询 TC ...
- Linux网络-UDP/TCP协议详解
Linux网络-UDP/TCP协议详解 零.前言 一.UDP协议 二.TCP协议 1.应答机制 2.序号机制 3.超时重传机制 4.连接管理机制 三次握手 四次挥手 5.理解CLOSE_WAIT状态 ...
最新文章
- 科大星云诗社动态20210329
- [BUUCTF-pwn]——ciscn_2019_n_8
- x265-创建encdata
- ssm旅游管理系统项目介绍_基于jsp的网络相册管理系统的设计与实现
- java中的正则操作总结
- 【EduCoder答案】时域采样定理
- 二叉树期权定价与BSM期权定价
- win10如何查看开机启动项
- 疯狂的世界,疯狂的人!
- 价值投资如何判断市场是否高估
- 【Ubuntu升级报错】“the following signatures couldn’t be verified because the public key is not available”
- AARRR模型的使用注意事项【防坑提醒】
- 枸杞“黑金”,养生效果就选它
- pycharm运行Project Interpreter是空的怎么办?
- 历代华为P系列主要参数对比,更新于2021年7月
- 苹果iOS系统最新市占率统计:iOS 11份额达到52%
- Android 仿京东淘宝 商品详情页 商品图片效果
- HDU 1506 解题报告 Largest Rectangle in a Histogram (单调栈)
- HashMap是什么
- 怎么卸载光速头条_我用这三招,整理了桌面并且屏蔽了广告弹窗
热门文章
- Airflow PythonOperator、BashOperator以及Xcom使用
- 新猿木子李:0基础学python培训教程 Python操作Redis
- MySQL具体解释(5)-----------函数超全总结
- 深入理解操作系统实验——bomb lab(作弊方法2)
- mmo mysql_一次MMO游戏服务器性能压测记录
- 浙江大学	找出直系亲属(java)
- matlab-线性代数 det 各阶主子式、余子式、代数余子式
- Windows——打印机错误(操作无法完成(错误 0x000006ba)。本地打印机后台处理程序服务没有运行。请重新启动打印机后台处理程序或重新启动计算机。)解决方案
- OnlyOffice快速入门
- 性能和稳定性测试报告模板