扫描在线设备(优化)
来源:互联网 发布:网络搜索引擎优化 编辑:程序博客网 时间:2024/04/29 20:42
icmp是目前最便捷通用的判断主机是否在线的方式。说更浅显一点就是ping.
自己写一个ping,就是使用socket向目标发送icmp数据包,根据收到的icmp数据包中的类型,代码字段判断ping的主机是否在线。(在线的含义为,与请求主机在互相可达的网络中,并且tcp/ip协议正常安装运行)
实现上面这个步骤是基础。下面要优化获取一个网段的主机了!
使用逐一ping的方式固然可以完成这个工作。但是,试想,如果一个192.168.1.0/24的网络,只有192.168.1.254在线,二其他主机都不可达,那么要每一个读等到超时后,再判断下一个主机在线?
这种令人不快的结果似乎在tcp协议中就有现成的解决方案。没错——滑动窗口。
滑动窗口的精髓,就是在发送出去一个package之后,异步的发送下一个package,直到发送数量达到窗口大小;等收到一个Package之后,就可以移动窗口,继续发送下一个package了。以此来避免阻塞,等待。
OK,基于这样的设计,可以使用fd_set这样的读写选择结构,源码中可以看到fd_set的空间限制是64个file_handle,所以一次开启的读监听socket为64个以内。当收到其中一个的回响后,发送新的icmp包,继续在fd_set上阻塞。那么之前的假设便是:1-64耗费4秒钟(4秒钟超时),65-128耗费4秒钟,129-192耗费4秒钟,193-254耗费4秒钟。并最终成功得到254在线的信息。
使用先人的智慧,运用在今天的问题上。
0 0
- 扫描在线设备(优化)
- 在线扫描
- 在线扫描
- platform设备驱动之按键扫描(cdev设备)
- platform设备驱动之按键扫描(misc设备)
- 多线程扫描在线主机
- Qt检测设备是否在线(Ping)
- PCI设备扫描
- Android BLE设备扫描
- 通过SetupAPI扫描/禁用/恢复设备(转)
- 关于zbar扫描条形码,所搭载的设备(ios)
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- Unity设备唯一性验证(二维码扫描)
- 稳压电源(16) 参考电路及电路模板
- c++学习总结(第五篇)
- Hadoop的日志分析
- Lempel-Ziv算法
- HDU 2844 Coins 多重背包
- 扫描在线设备(优化)
- nyoj49(01背包)
- java中抽象类和接口的区别
- IIS7 部署 MVC3
- js获取当前网址 选不同的栏目给颜色都变
- 利用硬链接和truncate降低drop table对线上环境的影响
- 【最长公共前缀】Longest Common Prefix
- 稳压电源(17) 符号索引
- Oracle 执行计划(Explain Plan) 说明