简单说说TCP(5) --- RST
来源:互联网 发布:手机频率对讲机软件 编辑:程序博客网 时间:2024/06/13 05:37
RST是什么
TCP首部组成如下图:
RST是TCP首部6个标志位之一,表示复位,用于非正常地关闭连接。
发送RST包关闭连接时,直接丢弃缓冲区的包发送RST包。而接收端收到RST包后,也不必发送ACK包来确认。
什么情况下会出现RST包
GFW(Great Firewall of China,中国国家防火墙)
GFW一旦发现数据包中有敏感信息,就会伪造RST数据包,分别发送给连接双方。访问非LISTENING状态的端口
A向B发起连接,但B之上并未监听相应的端口,这时B操作系统上的TCP处理程序会发RST包。注意:如果服务器的BACKLOG已满,客户端的SYN包只是被简单丢弃,客户端表现为连接超时,服务器并不会发RST包。
在请求超时后,又收到对方的包
A创建socket,设置SO_RCVTIMEO选项为100ms,向B发送SYN包请求连接。B正常回复SYN-ACK包,但是A在接收到这个包时,已经超过了100ms的超时时间。此时,A会给B发送一个RST包。当recv buffer还有数据时应用程序关闭连接
A、B建立连接后,A发送5000字节的数据给B,但是B只读了4096字节,之后就调用closesocket()
,此时,B会向A发送一个RST包。在已关闭的socket上收到数据包
A、B成功建立连接,通讯中,突然A断电,此时B并不知道。等A重新启动后,之前的连接信息都已丢失,当他接收到来自B的数据包时,他一脸懵逼,只能回复B一个RST包。NAT超时
我们的设备大多数挂在NAT设备下,通讯双方一段时间没有数据交互后,NAT设备会切断链路。当再次向对方发送数据包时,会收到RST包。注意:中国移动2G、3G的NAT超时时间是5分钟,中国电信3G大于28分钟。
SO_LINGER选项
给socket设置该选项后,调用closesocket()
时,会直接丢弃send buffer中未发完的数据,并向对方发送RST包关闭连接。- 优点
- 节省资源,不需要繁琐的断开连接四次握手
- 没有烦人的TIME_WAIT状态
- 缺点
- 由于会直接丢弃send buffer中的数据,可能造成业务逻辑错误
- 优点
Linux下启用TIME_WAIT快速回收
修改/etc/sysctl.conf中内核参数:net.ipv4.tcp_tw_recycle = 1
当收到的SYN包的timestamp比上次的小时,就会RST。
参考资料
http://blog.csdn.net/softwave/article/details/50997545
http://www.cnblogs.com/lulu/p/4149562.html
http://blog.csdn.net/wireless_tech/article/details/6405755
- 简单说说TCP(5) --- RST
- tcp rst
- TCP RST
- 简单说说TCP(2) --- 数据传输
- tcp rst packet
- TCP 的RST 报文
- TCP segment RST
- tcp rst 出现场景
- TCP协议---RST
- 浅析TCP RST
- RST包 - TCP/IP
- TCP中的RST
- TCP协议-RST报文
- 简单说说TCP(4) --- SYN攻击
- TCP协议RST:RST介绍、什么时候发送RST包
- autoRST - Automated TCP RST Exploit
- TCP的RST分节解析
- TCP的FIN/RST Cookie
- LeetCode 260 Single Number III
- 我的“VLC for Android” 编译之旅
- python错误汇总3:安装MySQLdb时:EnvironmentError: mysql_config not found
- LeettCode 29. Divide Two Integers
- DICOM-RT:放疗流程与参与角色
- 简单说说TCP(5) --- RST
- 往Oracle数据库中插入日期型数据(to_date的用法)
- java注解
- jvm----GC回收机制
- [MySQL]Mysql常用命令-20160410
- OD快捷键使用大全。非常详细(游戏逆向分析必看)
- 最近改完的富文本编辑器
- Leetcode - Valid Sudoku
- TCP/IP卷一(第一章学习)