UPnP是通用即插即用(Universal Plug and
Play)的缩写,它主要用于实现设备的智能互联互通。使用UPnP协议不需要设备驱动程序,因此使用UPnP建立的网络是介质无关的,它可以运行在几乎
所有的操作系统平台之上,可以使用任何开发语言,使得在办公室、家庭和其他公共场所方便地构建设备相互联通的网络环境。UPnP实际上是扩展了传统单机的设备和计算机系统的概念,在"零配置"的前提下提供了连网设备之间的发现、接口声明和其他信息的交换等互动操作功能。
从UPnP的定义来看,它的功能不仅仅是能够实现端口映射。但是实现端口映射是它的一项重要的功能,也是我们最常利用的功能。端口映射,可以理解为就是网络地址的转换,即NAT,那么UPnP是如何实现这种转换的呢?
要实现UPnP,首先要操作系统支持这种协议,不过现在的操作系统,WinXP, Win2K, Vista都支持这个功能,不过系统默认不安装,需要手动安装。其次,路由器要支持UPnP协议,不过,现在的主流路由器都支持这个功能。最后,在程序中实现UPnP。下面的过程是程序利用UPnP协议实现端口映射:
1. 寻找UPnP设备
首先通过广播的形式发送UDP数据报,如果收到了应答消息,根据应答消息可以得到UPnP设备的端口和地址。
这里面的广播数据格式有严格的规定,可以查询相关的资料。成功的找到UPnP设备,会收到类似
HTTP/1.1 200 OK 的消息响应。
2. 根据第一步获得的路由器的IP和端口,和路由器建立Socket连接,获取路由器的控制URL.
3. 根据第二步的控制URL, 向路由器发送添加端口映射的控制信息。
4. 如果第3步添加成功,则可以向路由器发送查询映射项的信息。
5. 当程序退出的时候,需要发送删除端口映射的控制信息,删除端口映射。
参考资料:
http://www.ibm.com/developerworks/cn/linux/other/UPnP/part1/index.html
http://www.ibm.com/developerworks/cn/linux/other/UPnP/part2/index.html
http://blog.bc-cn.net/user22/155472/archives/2007/7520.shtml
阅读(1387) | 评论(0) | 转发(0) |