最近在研究一个国产协议IGRS,貌似是根据UPNP改的
研究得不深,只是看了它的基础协议文档而已。
分享自己的一点小心得,向大家介绍一下,
如何实现局域网内的所有终端(phone/comper/TV...)能相互发现。
所谓相互发现就是指:不需要自己手动的输入IP来指定相应的电脑。
接下来,开始创建我们自己的设备发现协议:
1、协议在TCP/IP协议栈的实现位置
(应用层)借用HTTP的规范,在应用层实现我们的协议数据包。
(传输层)使用组播的方法,实现数据包在组播范围内发送。
(网络层)默认
(数据链路层)默认
2、实现的原理
当知道数据的发送是通过组播的方式时,聪明的你可能已经猜出答案了,
那就是定时发送自己的“在线宣告”告诉组内的所有成员我“在线”,
“在线宣告”就是我们要定义的第一个数据包(后文再说)。
当组内的其他成员在收到你的“在线宣告”后,就能知道你的设备信息了,
其他的设备可以回复你,也可以不回复你,这里为了简化就当做不回复处理了。
当你完成了“在线宣告”后,接下来就是接收其他成员的信息,
在大多数情况下都会接收到其他成员的“在线宣告”,
这时你要做的事情就是——记录,这样一段时间后局域网内所有设备信息你都会知道了。
设备在线的时候会不停的发送“在线宣告”,所以你知道他一直在线,
但不可能所有设备都是24小时处于开机状态的,
所以当设备关机,也就是离线的时候需要告知局域网内的其他成员,他下线了
这时他就需要发送一个“离线宣告”,
当其他成员再收到“离线宣告”后,就需要将这台离线设备的信息删除(或标注离线)。
以上都是在理想的状态下的在线与离线,
但网络这东西经常会出错,所以必须考虑发生错误后如何处理,
这里我们进行简化,假设只会出现:设备异常离线(断电、死机...)这个错误情况
设备异常离线会导致“离线宣告”无法发出,不能通知其他成员自己已经下线。
所以此处需要添加一个设备在线的超时操作,超时后将该设备判断为异常离线,
当接收到一个“在线宣告”时,就开始记录这个设备的在线状况,比如:最大生存时间(单位s)
在最大生存期内,再次接到相同设备的“在线宣告”就刷新最大生存时间,
当最大生存时间没能得到及时刷新,就可能变为0(时间不断减少),、
当为0时可以判断此设备已经异常离线。
这样的超时操作可以比较好的判断设备是否异常离线了,
但需要不停的发送“在线宣告”,用来刷新最大生存时间。
3、协议数据包的实现
基于HTTP协议的实现方法
在线宣告:告知网内的其他设备自己的在线状况,刷新生存时间
NOTIFY * HTTP/1.1\r\n //头部
01-MessageType:DeviceOnline\r\n //消息类型
01-MaxAge:60\r\n //60秒的生存时间
01-PipeIp:192.168.0.1\r\n //自己设备的ip地址
01-PipePort:3880\r\n //通信用的端口号
01-DeviceName:dev\r\n //设备名称
在线宣告发送的时间间隔要小于生存时间
离线宣告:告知网内的其他设备自己离开网络
NOTIFY * HTTP/1.1\r\n //头部
01-MessageType:DeviceOffline\r\n //消息类型
4、用途
当你可以通过实现了此协议的程序,获得其他设备的信息时,
你会发现可以让很多过去很麻烦的事情变得简单,
最简单的实例就是:不同设备间的资源共享(指不同操作系统间)。
其他的由你自由发挥啦。
今天太累了,就到这吧,还有没考虑到的地方以后再补充吧。
分享到:
相关推荐
应用嵌入式芯片构建网络安全设备的设计研究.pdf
在电信设备领域,移动端应用的开发与优化是一个关键的话题,特别是在当今互联网技术飞速发展的时代。标题中的"电信设备-一种移动端应用构建方法、移动端及系统"表明了这个压缩包内容涉及的是关于如何构建和设计...
网络体系构建是云计算应用的一个重要方向。云计算应用于网络体系构建,不仅可以加快构建速度,还能够保证系统的稳定运行。在网络体系构建中,云计算能够优化网络拓扑结构,降低构建成本。例如,通过采用低造价的...
### 配电网CIM综合模型的构建与应用 #### 一、引言 随着电力系统的不断发展,对于配电网的管理与分析变得越来越重要。配电网作为电力系统的重要组成部分,不仅承担着电力分配的任务,还涉及到复杂的设备管理和维护...
每个应用程序都有一个唯一的包名(Package Name),它在整个Android系统中是独一无二的,类似于应用的身份标识。应用名称是用户在界面上看到的名称,而图标则是用户在主屏幕上识别应用的视觉元素。 获取这些信息...
总的来说,《构建自己的FUZZ系统》探讨的是如何克服FUZZ测试的局限性,通过创新的系统设计和工具集成,构建一个强大且高效的模糊测试平台。这个平台不仅可以帮助安全研究人员更快地发现漏洞,还能为软件安全提供更为...
《JavaScript构建Web和ArcGIS Server应用实战》是一本深度探讨如何使用JavaScript开发Web GIS应用程序的专业书籍。这本书籍的源代码提供了丰富的示例和实践项目,帮助读者深入理解JavaScript在Web GIS开发中的应用。...
当一个UPnP设备接入网络时,它会广播一个“ alive”消息到网络上的所有设备,声明自己的存在和提供的服务。其他设备收到这个广播后,就能识别出新加入的设备。反之,如果设备离开网络,它会发送一个“byebye”消息。...
在IT行业中,Feed流应用是常见的信息聚合与推送服务...综上所述,构建电信设备上的Feed流应用涉及到多个层面的技术和策略,需要综合考虑用户体验、网络条件、设备性能及数据安全等因素,以提供高效、个性化的信息服务。
本文介绍了一种应用Scratchbox构建嵌入式Linux系统的新方法,该方法详细论述了应用Scratchbox和Busybox等开源软件在CF卡上构建一个嵌入式Linux操作系统的全过程。 知识点一:嵌入式Linux系统的构建方法 嵌入式Linux...
面向数控设备的实Linux系统构建与应用.pdf
1)基本要求: (1)熟悉交换机、路由器等网络设备的功能和使用; (2)掌握网络规划与设计,掌握网络安全与管理技术; (3)初步掌握网络应用程序设计技术和互联网应用技术。
在蓝牙设备查找过程中,一个蓝牙设备会广播自己的信号,其他设备可以通过扫描周围的蓝牙信号来发现可用的设备。这个过程通常涉及到蓝牙设备的配对,即两个设备之间建立安全连接的过程。在Windows操作系统中,用户...
在当前的移动应用开发领域,跨平台开发是一个热门话题,因为它允许开发者用一套代码库同时为iOS、Android和Web等多个平台构建应用程序。本教程将深入探讨如何利用HTML5技术和PhoneGap框架来构建这样的跨平台应用。 ...
资源名称:快速构建Windows 8风格应用文档汇总资源目录:【】快速构建Windows8风格应用1-开发工具安装及模拟器使用【】快速构建Windows8风格应用10-设备方向【】快速构建Windows8风格应用11-语义缩放【】快速构建...
该框架用于构建Android、iOS和网页应用程序。它整合了移动和网络领域的最佳实践,为开发人员提供了强大的工具和功能...Expo还提供了许多重要功能,如热重载、设备访问、推送通知等,使应用程序开发变得更加高效和便捷。
部分应用示例中含有多个模块,开发者可以选择对单个模块进行编译构建,生成一个HAP应用安装包,也可以对整个工程进行编译构建,生成多个HAP应用安装包。安装运行后,即可在设备上查看应用示例运行效果,以及进行相关...
总结来说,创建一个连接多个BLE设备的Android应用涉及到蓝牙适配器的管理、设备扫描、连接建立、服务发现、数据接收等多个步骤。在实际开发中,还需考虑性能优化、错误处理和用户体验等因素。通过学习和实践这些知识...
这是一个示例 React Native App,演示了使用 EnableX ( ) 平台服务器 API 和 React Native Toolkit 来构建 1-to-1 RTC(实时通信)应用程序. 它允许开发人员通过在自己的设备上托管来加速应用程序开发。 此应用程序...
总结来说,这个压缩包提供了一个基础的ONVIF设备发现功能的实现,包括客户端用于搜索设备,以及服务器端响应搜索请求。开发者可以通过研究和修改这些源代码,理解ONVIF协议的工作原理,并在此基础上开发自己的ONVIF...