代码之家  ›  专栏  ›  技术社区  ›  DomBat

ASP.NET是多线程的(它如何执行请求)

  •  16
  • DomBat  · 技术社区  · 17 年前

    这可能是一个有点愚蠢的问题,但是;

    我对网站登录遭到拒绝服务攻击感到好奇。服务器的速度慢是因为它有大量的登录队列,还是因为它有10亿次同时登录!

    4 回复  |  直到 17 年前
        1
  •  20
  •   falstro    17 年前

    这与ASP.NET本身无关(我在这方面的知识很少),但通常与web服务器有关。大多数web服务器都使用线程(或进程)来处理请求,因此基本上,您拥有的任何代码片段都将对两个连接并行执行。当然,如果您访问一个数据库或某个放置了锁的其他后端系统,只允许一个会话执行查询,那么您可能已经隐式地序列化了所有请求。

    Web服务器通常具有最小和最大数量的工作人员,这些工作人员根据当前硬件(CPU、内存等)进行调整。如果这些连接耗尽,新请求将排队等待工作进程可用,或者直到达到挂起请求的最大队列长度,此时它将忽略新连接,从而有效地拒绝服务(如果这是故意的,则称为拒绝服务或DoS攻击)。

    所以,用你的话来说,这是一个组合,大量的同时请求填满了队列。

        2
  •  4
  •   GEOCHET S.Lott    17 年前

    它应该使用线程池。请注意,它们仍然在同一个应用程序中,因此应用程序级别的项(如静态变量)仍然在它们之间共享。

        3
  •  1
  •   Joel Martinez    17 年前

    从…起 this article

    " 记住ISAPI是多线程的 因此,请求将 在多个线程中加入 通过ApplicationDomainFactory.Create()返回的引用。清单1显示了IsapiRuntime.ProcessRequest方法中的反汇编代码,该方法接收ISAPI ecb对象和服务器类型作为参数。该方法是线程安全的,因此多个ISAPI线程可以安全地同时调用此单个返回的对象实例。”

    因此,是的,在DOS攻击的情况下,由于大量的连接,速度会很慢

        4
  •  1
  •   Dario Solera    17 年前

    此外,ASP.NET为每个会话处理一个请求,但恶意用户可以打开任意多个会话。

    据我所知,除了设置最大排队请求数(等待处理)之外,没有一种内置的方法来限制ASP.NET请求。理想情况下,这个数字应该非常小。您可以使用性能计数器监视排队的ASP.NET请求数。假设你发现,在交通高峰期,这个数字是100。然后,您可以更新应用程序,使其在该数字超过100时拒绝登录尝试,这样数据库就不会被命中(从来没有这样做过,只是一个想法)。

    推荐文章