Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1591044
  • 博文数量: 441
  • 博客积分: 20087
  • 博客等级: 上将
  • 技术积分: 3562
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-19 15:35
文章分类

全部博文(441)

文章存档

2014年(1)

2012年(1)

2011年(8)

2010年(16)

2009年(15)

2008年(152)

2007年(178)

2006年(70)

分类: 系统运维

2007-08-08 09:21:26

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


阅读(1358) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~