TCP协议的学习(五)TCP中RST标志及其攻击

在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,并强制断开连接。
这里写图片描述
伪造TCP包
一个TCP连接都是四元组,由源IP、源端口、目标IP、目标端口唯一确定一个连接。服务器,IP和端口是公开的。
客户端1的源端口是随机的,可以找生成source port的规律。
序列号问题是与滑动窗口对应的,如果伪造的TCP包中的序列号不在服务器的滑动窗口内,服务器就会主动丢弃。TCP头部中,32位序列号,取值范围0-4294967296除以16位窗口大小(65535),最多只需要发65537(4294967296/65535=65537)个包就能有一个序列号落到滑动窗口内。

防御:
防火墙设置,防火墙带RST位的包丢弃

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值