服务器连接永远都应设计为“被动”关闭?

邓立波 深圳,2007-8

作者联系方式:

email:         libodeng@gmail.com

msn:           libodeng@gmail.com

tel:              13510275799

版权/著作权所有 (C) 2007 邓立波 保留所有权利

警告:未经作者许可,任何人或组织不得转载,公开发布,拷贝,传播本文献的全部或部分

 

       针对《编写大容量和健壮的服务器系列-处理连接关闭》一文,一位网友这样认为:

[当服务器程序主动关闭连接时,刚发往客户端的包有时出现丢失 
--------------------------- 
从来不考虑这种情况,服务器主动关闭,服务器永远都设计成为被动关闭。应该将服务器成功发送后关闭连接模式设计成客户端成功收到数据后关闭连接,如果你设计成第一种模式,除非特殊需要否则设计就是错误的。我这么以为。]

         你觉得呢,你实现的服务器也从没做过“服务器主动关闭连接吗”?

 

不过我对此倒存在一点不同见解,因为我觉得,原则上,任何依赖客户端控制流程的设计都是不安全的,比如按这位网友说的去做,如果万一出现客户端强制关闭连接但reset包丢失或者网络中断,服务器的连接应该何时释放呢?是不是还需要一种连接检测机制,更不用说在处理大量爆发性短连接的场合。

换一个角度,从系统安全上来说,这种依赖客户端的机制也很不安全,攻击者只需要不断连接你,处理正常流程后不断无声无息的关闭连接,而不发出FIN或者RESET,对攻击者而言,根本不需要消耗资源,却可以使服务器不断的消耗资源(这里主要是socket分配的资源),这是典型的Dos攻击。这里不妨详细计算一下,攻击者使用一台单机,假如每秒建300个连接,10分钟后 300 x 60 x 10 = 180000个连接,按在windows1G内存

大约最多建立10万个连接经验值估算(这个值主要受未分页内存池与单个应用程序锁定内存限制,具体可以看相关资料),相信互联网上大多数服务器都崩溃了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值