基于STM32和W5500的UPnP自动端口映射功能实现

发布者:DelightWish123最新更新时间:2015-07-30 来源: eefocus关键字:STM32  W5500  端口映射 手机看文章 扫描二维码
随时随地手机看文章
文章开始之前让我们设想下面的几个情形:我们在办公室内就能访问到生产车间的网络摄像机,而无需到监控室查看生产情况;在下班之前,或在回去的路上,就可以先打开家里的空调器和厨房设备,等进入家门,立刻就是一个温度宜人的环境――厨房里的饭也做好了;我们想在电视机上回味一下几天前在景区拍的照片,把相机或者DV联网就可以了,无需再去拷贝。工作生活都如此方便,将是一个很惬意的事情。
实现这些场景的网络设备都要基于一种叫端口映射的网络技术。端口映射就是路由器将外网某一个端口与内网中某个设备的IP地址和端口号建立起一一对应关系。内网主动访问外网时,路由器主动建立了映射关系,内外网间就可以通信。但是外网要主动访问内网是不可行的,因为不知道内网的设备IP和端口,只能和路由器外网通信。路由器可以进行手动配置端口映射,但是便携式设备经常移动,内网的IP地址也是不是固定的,每次使用都要手动配置路由器显然是个麻烦的事情。本文就为你讲解如何使用UPnP协议实现网络设备自动配置路由器进行端口映射。

一、UPnP协议简介
UPnP(Universal Plug and Play,即插即用)是各种各样的智能设备、无线设备和个人电脑等实现遍布全球的对等网络连接(P2P)的结构。使用UPnP达到的效果是任何设备一旦连接上网络,所有在网络上的设备马上就能知道有新设备加入,这些设备彼此之间能互相通信,更能直接使用或者控制它,一切都不需要人工设置。
1.1 UPnP结构
服务、设备和控制点是UPnP网络的基本组件,如图1:

Image
图 1 UPnP组件图
 设备(Device):家电、手机、智能设备、无线设备、电脑等等都可以称之为设备。
 服务(Service):是指设备在不同情况下的动作和设备的状态。
 控制点(Control Point):指的是可以发现并控制其他设备的控制设备。在UPnP网络中,设备可以和控制点合并为同一台设备。

1.2 UPnP工作流程
UPnP定义了设备之间、设备和控制点、控制点之间通信的协议。完整的UPnP有设备寻址、设备发现、设备描述、设备控制、事件通知和基于HTML的描述等几部分构成。UPnP协议最底层是TCP/IP协议,UPnP实现的工作流程如图2所示:
Image
图2 UPnP实现的工作流程
寻址:就是找个可用IP地址。一般都采用DHCP服务,使设备自动得到一个IP地址。
发现:加入到网络中,设备会定期的以组播的方式表明自身的存在以及告知(Advertise)它提供的服务;控制点则是网络中广播search packets来发现具有某些服务的设备,具有该服务的设备以单播的方式应答。
描述:控制点可以从发现消息中得到设备描述的URL(可以认为是浏览器地址),通过URL取回设备描述的信息。
控制、事件和展示则是控制点获取描述之后进行的各种通信交互。其中控制是控制点对设备进行的操作;事件为设备向控制点定期发送其感兴趣的信息,展示可以认为是设备的一个功能,它给控制点一个URL,可以登录到设备的网页服务器。[page]

二、UPnP路由器端口映射控制点在W5500实现
2.1 实验硬件平台和实验目的
通过以上讲解,相信大家对UPnP也有一定认识了,下面就让我们开始我们实验之旅。我们选用的实验平台为WIZnet W5500EVB,它使用USB口进行供电和调试,单片机为STM32F103RCT6,网络芯片为WIZnet硬件TCP/IP的以太网芯片W5500。
我们的实验目的就是让W5500(Control Point)控制路由器(Device)执行端口映射服务(Service),让外网中的PC2可以与内网中的W5500EVB板建立连接。如图3所示 PC2往路由器36.36.141.53:12222 发送的信息,将被转发到内网192.168.1.110:5000。
Image
图3端口映射网络图

2.2 UPnP自动端口映射软件实现流程
本文中W5500将作为控制点的角色出现,并不需要实现展示的功能,在UPnP协议上仅实现了Search的过程,对网络中的Advertise消息不做处理。下面让我看看程序是如何实现的,首先看一下整个程序流程图如图4,对整个程序有个大致的了解:
Image 
图4 主程序流程图
如图所示:
程序首先进行初始化,初始化CPU资源和W5500然后使用DHCP协议自动获取IP,如果获取失败就设定为固定IP,DHCP的过程在此不再详细介绍。
获取IP地址后,先使用SSDP发现设备。W5500打开本地一个socket,再使用UDP组播地址(255.255.255.255)发送SSDP M-SEARCH信息搜索在相同子网中的IGD(Internet Gateway Device),设备收到SSDP M-SEARCH信息后会回复数据包。如图5 所示:
Image
图5发送SSDP广播包和收到回复信息

通过解析收到数据包我们可以得到:LOCATION:设备描述文件的URL。通过Location信息,我们能够获得IGD的IP地址和端口号。利用这个IP地址和端口号生成HTTP GET Header,W5500重新打开一个Socket,然后再将其发送给IGD来获取IGD的服务描述。当IGD接收到HTTP GET Header后,IGD将会让W5500_Control_Piont获知它的设备描述和服务描述。发送的数据包如图6。
图6还显示了设备回复的部分信息,从中我们可以看到设备描述和服务描述,WANIPConnection对应端口映射服务,可以看到该路由设备有该项服务。在WANIPConnection服务描述中可以得到Control URL和eventSubURL,一个用来控制,一个用来订阅。

Image
图6发送获取描述单播包和收到的回复信息
执行完上面的发现设备后在串口上为用户提供了一个菜单页面,通过在菜单中输入命令,我们可以交互添加端口和删除端口。
首先是添加端口,利用IGD的IP地址、端口号以及控制URL来完成XML,然后通过HTTP POST method-basedSOAP执行AddPortMapping操作。其执行过程如图7流程图所示:
Image
图7 AddPortProcess()函数流程图
在SOAP描述中可以看到ExternalPort、Protocol、InternalPort以及控制点IP地址等信息,如图8 AddPort的报文所示。
IGD在收到这样的控制请求后,会给出一系列应答,如果应答中包含收到“uuidAddPort Success!!”后,表明端口映射添加成功。添加端口映射成功后,就可以在外网访问内网中指定IP地址和端口了,如果添加了TCP端口映射,可以建立连接并发送数据测试。

Image
图8 AddPort的报文
删除端口与添加端口格式一样,都是通过HTTP POST method-basedSOAP执行DeletePortMapping操作,只需要ExternalPort和Protocol两个参数即可。在此不再详细叙述,请参考我们的程序代码下载链接:http://pan.baidu.com/s/1roc70

三 自动端口映射功能测试
程序讲解完毕后将讲解如何测试我们写的W5500EVB程序,看是不是能够达到我们的实现目的,实现控制路由器端口映射功能。[page]

第一步:开启路由器UPnP。登陆路由器控制界面,打开“转发规则->UPnP 设置”,如果UPnP状态没有开启,则需要开启一下。
第二步:将编译好的可执行文件下载到开发板中,接网线到路由器上,接USB调试线到PC端,打开串口助手对应的COM口以便查看调试信息和进入串口命令菜单。按复位键,程序开始执行,经过串口打印信息,我们看到DHCP获取正确IP地址,发现UPnP设备、获得描述,设置事件都已完成,如图9所示:
Image
图9 UPnP执行成功打印输出
接下来就是我们的串口操作菜单,如图10:
Image
图10 程序完成初始化后的菜单界面

第三步:基本命令输入。按照菜单提示进行命令输入,在此1-4就是基本的串口命令操作:打开/关闭led,设置/查看网络配置;5 、6步就是开启TCP 、UDP回环测试。TCP回环实际上就是开启了一个TCP Server,同一网段的TCP Client可以直接与其建立通信,可发送数据到此TCP Server,TCP Server会回复相同的数据。串口基本配置和内网回环测比较简单,在此不再贴图查看。

第四步:配置TCP端口映射。在串口调试助手上输入 7,进行配置选项,按照菜单提示,我们端口映射,外网端口号为12222,内网端口号为5000,添加成功后会提示AddPortSuccess。如图11所示:
Image
图11添加端口映射成功后串口打印出信息
刷新第一步进入的UPnP状态设置和设备列表,可发现控制节点W5500_Control_Point 已经加入内部端口号为5000,外部端口53F7为12222。可见我们已经成功用UPnP协议对路由器端口进行了映射。而且看到Thunder5在这里也有UDP /TCP 端口映射列表。如图12所示。在这里也说一下,我们常用的P2P软件,Thunder PPlive等都支持UPnP端口映射。
Image
图12添加端口映射后路由器端口映射表

第五步,用外网测试配置好的端口映射。
如图3端口映射网络图,W5500和PC2不在同一个网络中,如果不进行端口映射,PC2不可能连接到W5500 TCP Server。首先我们在串口界面上输入5进入TCP Server回环程序。接下来查看路由器的外网IP,可见外网IP为“36.36.141.53”,其为公网IP。我们任意找一台PC用网络调试助手建立一个TCP Client ,去连接我们刚才配置好的服务器IP为“36.36.141.53”端口为“12222”。连接成功后,发送LED_ON(红色为发送的数据),通过网络调试助手我们可以看到收到LED_ON(黑色为收到的数据),证明回环已建立。这就如同,无论我们在什么地方都能对我们的设备进行连接和控制。如图13所示:
Image
图13外网连接到内网并进行数据回环测试
同时通过EVB上的LED,我们可以发现,LED灯可以根据我们输入的指令执行亮灭动作。如图14 所示:
Image
图14 LED根据命令进行亮灭

第六步:删除已添加的端口。在菜单界面中输入8,然后按指示删除刚才的端口,刷新路由器映射表,发现已经没有这个应用了。

四 总结
目前,实现各种设备的互联互通已经成为人们的迫切需求,而实现这一目的的关键是家庭网络的中间件技术,最有前景的就是今天讲的UPnP,因此支持UPnP标准的设备越来越多。本文通过UPnP部分协议实现了设备的自动端口映射,方便设备直接部署在内网中,无需客户去配置,就能在外网中直接访问内网设备,查看或者配置设备信息。作为一个UPnP协议的一个简单应用,希望能给大家一个思路。
关键字:STM32  W5500  端口映射 引用地址:基于STM32和W5500的UPnP自动端口映射功能实现

上一篇:LPC2103之GPIO寄存器
下一篇:STM32-GPIO

推荐阅读最新更新时间:2024-03-16 14:26

STM32单片机GPIO口的工作模式解析
STM32单片机的每组IO口都有4个32位配置寄存器用于配置GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR和GPIOx_PUPDR,2个32位数据寄存器用于配置输入和输出寄存器GPIOx_IDR和GPIOx_ODR,1个32位置位复位寄存器GPIOx_BSRR,1个32位锁定寄存器GPIOx_LCKR和2个32位复用功能选择寄存器GPIOx_AFRH和GPIOx_AFRL。 GPIO的输出状态可以配置为推挽或开漏加上上拉或下拉。输出数据既可以来自输出数据寄存器,也可以由其他外围寄存器发出。每组IO口的速度都是可以配置的,可以配置为25MHz,50MHz或是100Mhz。数据输入同样也有几种模式
[单片机]
<font color='red'>STM32</font>单片机GPIO口的工作模式解析
STM32的OTA远程升级
上次发过SD卡的Bootloader离线升级后,应大家的要求,这次就讲一下STM32的OTA远程升级。 OTA又叫空中下载技术,是通过移动通信的空中接口实现对移动终端设备数据进行远程管理的技术,还能提供移动化的新业务下载功能。 要实现OTA功能,至少需要两块设备,分别是服务器与客户端。服务器只有一个,客户端可有多个。服务器通过串口与PC机连接,需要下载的镜像文件存放于PC机,命令执行器给服务器发命令及镜像文件。首先命令执行器控制服务器广播当前可用的镜像文件信息,客户端收到信息后进行对比,若有与自身相匹配的镜像,则向服务器请求数据。服务器收到请求后向命令执行器索取固定大小的块,再点对点传送给客户端。镜像传输完毕后,客户端进行
[单片机]
<font color='red'>STM32</font>的OTA远程升级
STM32入门学习经验总结
1、为什么要把时间花在“犹豫”上? 经验总结:每当我们在入门之前(ARM是这样,DSP也一样),总会会有很多疑问,会有很多顾虑。我们渴望知道学习STM32前景如何?需要啥基础?难不难?适不适合我?但是什么时候能心潮澎湃地、相当着急地开始学STM32?日子在一天一天过去!你开始行动了吗?没有行动的思索,永远都不可能入门!把这些时间用来看书吧,效果能好一万倍。 大家一般都是从51单片机过来的,回想一下,我们之前学单片机时如何入门呢?实际上都是先看书(理论),再玩板子(实践)。严格地说,应该是模仿实验。熟悉之后才会自己写程序代码实现某个功能。因此,如果你正在咨询STM32;如果你正对STM32心潮澎湃;如果你想入门STM
[单片机]
STM32信息安全—密码学基本原理(中)
本文的主要内容包括: 哈希函数 完整性和安全性 消息验证 常用算法 Hash/哈希/散列/摘要 函数 哈希函数的功能:对任意输入可以产生固定长度的摘要值 哈希函数的特点:输入的任何改变,都会导致摘要值变化;单向性;低碰撞性 常用哈希函数 消息的“狭义完整性”和“广义完整性” 哈希函数,仅能保证消息的狭义完整性 要保证数据确实是Alice发送的,需要消息认证机制 消息认证 哈希和对称加解密技术的结合之一:HMAC 前提:双方事先约好一个共享密钥 哈希和对称加解密技术的结合之二:AES-GCM AES counter模式+特殊的哈希 输出结果:加密后消息,该消息的认证码标
[单片机]
<font color='red'>STM32</font>信息安全—密码学基本原理(中)
STM32输入捕获(一)
今天,就参照芯片的数据手册,来编写程序,实现输入捕获功能,首先看一下输入捕获的实现原理:(这里只拿通道1为例,其他通道与之类似) 首先来看这张图 (图中的U代表更新事件,UI表示可以产生更新条件) 蓝色框出的部分就是一条完整的输入捕获通道,红色画出的就是信号采集后的路径,而这只是一个粗略的路径,我们来看下一幅图: (蓝色方框标注的是相应的控制位) 从上图可以很清晰的看出输入信号的流程:输入部分对相应的TI1输入信号采样(f_DTS是指采样频率),并产生一个滤波后的信号TI1F。然后,一个带极性选择的边缘检测器产生一个信号(TI1FP1),它可以作为从模式控制器的输入触发或者作为捕获控制。该信号通过预分频进入捕获
[单片机]
<font color='red'>STM32</font>输入捕获(一)
STM32启动文件详细解析
一、STM32启动文件详细解析 STM32启动文件详细解析(V3.5.0) 以:startup_stm32f10x_hd.s为例 view plain copy ;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** ;* File Name : startup_stm32f10x_hd.s ;* Author : MCD Application Team ;* Version : V3.5.0 ;* Date : 11-March-2011 ;* De
[单片机]
<font color='red'>STM32</font>启动文件详细解析
stm32按键 长按 短按 函数
在stm32工程中,长按和短按的代码书写, 调用的读取按键状态的底层函数。封装成的按键函数代码。下面是函数的头文件,和.c文件的代码。使用定时器来扫描按键。 #define KEY_ON 1 #define KEY_OFF 0 #define KEY_NULL 0 #define KEY_SHORT 1 #define KEY_LONG 10 #define SHORT_TIME 200 uint8_t Key_state(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin) { static uint8_t key_value = KEY_NULL; static uint16_t longtim
[单片机]
STM32直接驱动RGB接口的TFT数字彩屏设计
引言     随着工业技术的不断发展,人机界面的开发及应用空前火热,为了具有比较友好的人机界面,TFT数字彩屏被广泛的应用,但是TFT彩屏通常都不带有控制器,所以现在驱动彩屏的方案大致有2种:     ①采用ARM9或者更高级别的平台,芯片上带有TFT控制器,可以直接挂接TFT数字屏。     ②采用低端CPU处理器平台,外加TFT控制器模块,再挂接TFT数字屏。     对于方案①来说,系统的复杂度会莫名地增加,再加上该类的平台中主MCU多为BGA封装,对于需求很多小量多样化产品的客户来说,较难以接受这样的方案;而 ②方案平白无故添加了一个LCD控制器。这两种方案无论哪一种都增加了硬件成本,本文提出了一种由STM32的FSMC总线
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved