服务器连接永远都应设计为“被动”关闭?
来源:互联网 发布:万方数据库医学网 编辑:程序博客网 时间:2024/05/01 15:26
邓立波 深圳,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个连接,按在windows上1G内存
大约最多建立10万个连接经验值估算(这个值主要受未分页内存池与单个应用程序锁定内存限制,具体可以看相关资料),相信互联网上大多数服务器都崩溃了。
- 服务器连接永远都应设计为“被动”关闭?
- 基础连接已经关闭: 服务器关闭了本应保持活动状态的连接
- 基础连接已经关闭: 服务器关闭了本应保持活动状态的连接。(附带截图)
- 基础连接已经关闭: 服务器关闭了本应保持活动状态的连接。
- TCP连接的终止----被动关闭
- 游戏服务器之被动连接线程池
- 游戏服务器之被动连接线程池
- C# 基础连接已经关闭: 服务器关闭了本应保持活动状态的连接的错误
- .NET HttpWebResponse.GetResponse() 基础连接已经关闭: 服务器关闭了本应保持活动状态的连接。
- 游戏服务器之服务器之间的被动连接
- 如何为被动模式 FTP 服务器配置 Windows 防火墙
- 如何为被动模式 FTP 服务器配置 Windows 防火墙
- 每天进步 之 被动的改变永远是被动的
- [win32] Winsock 中应使用 DisconnectEx 关闭连接
- 资源永远都不够
- 多接口设计应以接口为个体进行设计
- IP地址为140.123.0.0的地址是B类地址,若要切割为10个子网,而且都要连接上Internet,请问子网掩码应设为
- 利用listen函数将已经绑定的套接字设置为被动连接监听状态
- JRE is selected, but the path is invalid
- 谈谈IOCP发送数据时的一些误区及技巧
- PHP-redis中文文档
- minicom移植到ARM板
- 2012/12/13
- 服务器连接永远都应设计为“被动”关闭?
- java两个字符串的相似度
- JavaScript类和继承:constructor属性
- 编写大容量和健壮的服务器系列—处理IOCP资源释放
- 在linux下用tomcat部署java web项目的过程与注意事项
- Tomcat一步步实现反向代理、负载均衡、内存复制
- OpenCV中的HOG+SVM物体分类
- Android系统手机重启与恢复出产设置源代码跟踪
- Nagios:用门户邮箱+mailx+139邮箱实现实时短信报警