TCP协议的学习(五)TCP中RST标志及其攻击
2016-04-15 01:05
375 查看
在TCP协议中有6个标志位
RST表示请求重新建立连接,带有RST标志的报文,称为复位报文段。TCP处理程序会在异常时刻发送RST包
TCP中出现RST的几种场景:
1.在连接建立时
端口未打开
向一个不存在的端口发送数据,目的端口没有被进程正在监听,而客户端来connect。对于UDP,当一个数据报到达目的端口时,该端口没在使用,它将产生一个ICMP端口不可达的信息
请求超时
客户端连接服务器时,connect系统调用返回失败,而且出现了错误信息,但ping没有出现丢包现象,使用抓包工具查看,客户端在收到服务器发送的同步报文段之后,发送了RST复位报文段
2.发送数据
数据出现错误,不是按照既定序列号发送数据时
3.连接关闭
发送rst报文段关闭连接时,不必等待缓冲区的数据包发送出去,而是直接丢弃,紧接着发送rst报文段,接收端收到rst报文段也不必发送ack回应报
在一个已关闭的socket上收到数据
就像上一篇所说的四次挥手如果没有TIME_WAIT状态下,就会产生RST。连接关闭后,网络中游离的数据到达目的端,目的端发现连接已经关闭,就会回应一个RST
提前关闭连接
服务器关闭或异常终止了连接,由于网络问题,客户端没有收到服务器的关闭请求,这称为TCP半打开连接。就算重启服务器,也没有连接信息。如果客户端向提其写入数据,对方就会回应一个RST报文段。
异常终止一个连接
在数据交换完成之后,一方给另一方发送结束报文,同时TCP提供了异常终止一个连接的方法,就是给对方发送一个rst复位报文段,一旦发送复位报文段,发送端所有排队等待发送的数据都被丢弃,应用程序可使用套接字选项来发送复位报文段
向处于listen的端口发送数据,发送端会收到对端发送的rst复位报文段
异常终止一个程序对应用程序的优点:
可以丢弃任何待发送的数据,并发送RST复位报文段
RST的接收方会区分另一端执行的是异常关闭还是正常关闭
RST攻击
客户端1和服务器连接时,客户端2扔来一个伪造的TCP包,让它们两之间的连接断开,这就是RST攻击。
假如伪造包是一个RST包,那么客户端1和服务器就会强制断开连接并丢弃缓冲区的数据。
假如伪造包是一个SYN包,表示客户端1又要和服务器建立连接,其实早已建立连接,这是服务器就会回应RST给客户端1,并强制断开连接。
![](http://img.blog.csdn.net/20160415010317143)
伪造TCP包
一个TCP连接都是四元组,由源IP、源端口、目标IP、目标端口唯一确定一个连接。服务器,IP和端口是公开的。
客户端1的源端口是随机的,可以找生成source port的规律。
序列号问题是与滑动窗口对应的,如果伪造的TCP包中的序列号不在服务器的滑动窗口内,服务器就会主动丢弃。TCP头部中,32位序列号,取值范围0-4294967296除以16位窗口大小(65535),最多只需要发65537(4294967296/65535=65537)个包就能有一个序列号落到滑动窗口内。
防御:
防火墙设置,防火墙带RST位的包丢弃
RST表示请求重新建立连接,带有RST标志的报文,称为复位报文段。TCP处理程序会在异常时刻发送RST包
TCP中出现RST的几种场景:
1.在连接建立时
端口未打开
向一个不存在的端口发送数据,目的端口没有被进程正在监听,而客户端来connect。对于UDP,当一个数据报到达目的端口时,该端口没在使用,它将产生一个ICMP端口不可达的信息
请求超时
客户端连接服务器时,connect系统调用返回失败,而且出现了错误信息,但ping没有出现丢包现象,使用抓包工具查看,客户端在收到服务器发送的同步报文段之后,发送了RST复位报文段
2.发送数据
数据出现错误,不是按照既定序列号发送数据时
3.连接关闭
发送rst报文段关闭连接时,不必等待缓冲区的数据包发送出去,而是直接丢弃,紧接着发送rst报文段,接收端收到rst报文段也不必发送ack回应报
在一个已关闭的socket上收到数据
就像上一篇所说的四次挥手如果没有TIME_WAIT状态下,就会产生RST。连接关闭后,网络中游离的数据到达目的端,目的端发现连接已经关闭,就会回应一个RST
提前关闭连接
服务器关闭或异常终止了连接,由于网络问题,客户端没有收到服务器的关闭请求,这称为TCP半打开连接。就算重启服务器,也没有连接信息。如果客户端向提其写入数据,对方就会回应一个RST报文段。
异常终止一个连接
在数据交换完成之后,一方给另一方发送结束报文,同时TCP提供了异常终止一个连接的方法,就是给对方发送一个rst复位报文段,一旦发送复位报文段,发送端所有排队等待发送的数据都被丢弃,应用程序可使用套接字选项来发送复位报文段
向处于listen的端口发送数据,发送端会收到对端发送的rst复位报文段
异常终止一个程序对应用程序的优点:
可以丢弃任何待发送的数据,并发送RST复位报文段
RST的接收方会区分另一端执行的是异常关闭还是正常关闭
RST攻击
客户端1和服务器连接时,客户端2扔来一个伪造的TCP包,让它们两之间的连接断开,这就是RST攻击。
假如伪造包是一个RST包,那么客户端1和服务器就会强制断开连接并丢弃缓冲区的数据。
假如伪造包是一个SYN包,表示客户端1又要和服务器建立连接,其实早已建立连接,这是服务器就会回应RST给客户端1,并强制断开连接。
伪造TCP包
一个TCP连接都是四元组,由源IP、源端口、目标IP、目标端口唯一确定一个连接。服务器,IP和端口是公开的。
客户端1的源端口是随机的,可以找生成source port的规律。
序列号问题是与滑动窗口对应的,如果伪造的TCP包中的序列号不在服务器的滑动窗口内,服务器就会主动丢弃。TCP头部中,32位序列号,取值范围0-4294967296除以16位窗口大小(65535),最多只需要发65537(4294967296/65535=65537)个包就能有一个序列号落到滑动窗口内。
防御:
防火墙设置,防火墙带RST位的包丢弃
相关文章推荐
- 从网络上下载文件的两种方法
- xcode7.1上http报错
- 卷积神经网络学习
- 在克隆环境上分离httpd和subversion。
- [置顶] Android开发之java代码工具类。判断当前网络是否连接并请求下载图片
- TCP之深入浅出send和recv
- linux网络相关命令
- XMLHttpRequest statu 4000 s = 0
- http的无状态无连接到底是什么含义
- 基于heartbeat v1配置mysql和httpd的高可用双主模型
- nginx搭建支持http和rtmp协议的流媒体服务器
- android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件
- 利用nginx搭建http和rtmp协议的流媒体服务器
- TCP和UDP的区别
- Python网络编程-主机-虚拟机之间TCP协议简单通信实例
- http协议详解之请求篇
- 神经网络学习笔记
- 安装office,错误1706。安装程序找不到所需文件。请检查网络连接或CD-ROM驱动器。
- ASP.NET MVC 4 运行时异常,System.Web.Http.Description找不到
- The type javax.servlet.http.HttpServletRequest cannot be resolved.