原创 基于W5500的NetBIOS应用实例

2015-2-4 10:19 1708 17 18 分类: 消费电子

已刊登在《无线电》2月刊

 

一 实例背景

最近一个做智能家居的朋友面临这样的一个烦恼,他想让用户通过智能手机在家里方便地控制家居设备,又想让用户免除下载安装App的麻烦,通过浏览器直接打开设备内嵌的网页便可实现控制。但是设备的IP地址都是通过家里的路由器自动获得的,设备上又没有屏幕来显示其IP地址。问我有没有办法不输入IP地址来实现浏览器访问该设备网页的办法,就是类似DNS之类,但是无需连外网,只在家庭网络内能访问即可。

这使我想起一个古老的协议,NetBIOS(Network Basic Input/Output System)。这个在上世纪80年代由IBM开发的协议,主要用于数十台左右计算机组成的小型局域网,该协议的主要用途之一就是把计算机名称解析为相应IP地址。如果每个设备有一个固定名字,在实现了NetBIOS的前提下,用户在浏览器里输入该设备的名字,然后通过NetBIOS解析,便可实现访问该设备网页的这个功能了。而且NetBIOS占用系统资源少,在单片机上运行不成问题。于是推荐这个朋友在他的设备上实现了NetBIOS协议,解决了他的烦恼。

除了智能家居,在当下物联网时代,想必还有其他应用也会遇到类似问题,就拿手头的WIZnet-W5500评估板实现了一下NetBIOS,希望能对做网络设备开发的朋友有所帮助。在用W5500实现之前,我们还是先在PC上看一下NetBIOS到底是一个什么东西。

NetBIOS协议

我们知道在DOS 命令下可以通过PING主机名获得另外一台电脑的IP地址,实际上就是通过 NETBIOS进行的。在Windows操作系统中,默认情况下在安装TCP/IP协议后会自动安装NetBIOS。查看方法如下:本地连接属性的中“高级TCP/IP设置”窗口中选择“WINS”选项卡,在“NetBIOS设置”区域中就可以设置相应的NetBIOS,如图1

图1 PC中NetBIOS影子

1 WINS下的NetBIOS设置

Ping主机名的第一个数据包就是NBNSNetBIOS Name Server),协议包,它是 TCP/IP 上的 NetBIOS (NetBT) 协议族的一部分,它在基于 NetBIOS 名称访问的网络上提供主机名和地址映射方法。NBNS是动态DNS的一种,MicrosoftNBNS实现称为WINSNetBIOS的报文类型较多、结构复杂,不同的网络环境及不同的用途中,会使用不同报文,可用端口进行区分,WINS协议中,NetBIOS名字报文、数据报报文及会话报文分别使用TCP 137138139端口。

NetBIOS 数据报有很多不同格式,主要取决于服务和信息类型,以及用以传送 NetBIOS 数据报的传输协议。 NetBIOS 协议架构可见图2,其中包含三种基本服务: NAMESESSION DATAGRAM ,其中NAME所用协议就是NBNS协议。 

图2 NetBIOS层次结构

2NetBIOS协议架构

下面看一下WINS协议使用的报文NETBIOS的名字报文(NAME)的总体格式如表1

1 NetBIOS名字报文格式

事物ID2bytes 通用标志(2bytes
问题记录个数(2bytes 回答记录个数(2bytes
权威记录个数(2bytes 附加记录个数(2bytes
问题记录(若干字节)
回答记录(若干字节)
权威记录(若干字节)
附加记录(若干字节)

 

报文的前12字节总称为NETBIOS名字报文的首部,通过首部我们可以判断出是否为名字查询的报文。

NETBIOS名字报文中最常见的是携带问题记录的报文,问题记录的格式如表2

2 NetBIOS名字报文中问题记录格式

 

问题名称(若干字节)

问题类型(2 bytes

问题类别(2bytes

 

通过携带问题记录的报文,我们可以得到要查询的名字字符,如果和本机名相符,就发送报文响应,响应中带有IP地址,发送广播的主机就会得到该IP地址。

W5500EVB实现NETBIOS名字报文解析

了解了NETBIOS协议之后,下面就让我们通过W5500EVB做一个嵌入NetBIOS的简单实验。

  1. 实验目的:通过在DOSping该设备名“WIZNRTW5500”,可以得到开发板的IP地址。
  2. 硬件环境
  1. 单片机:STM32F103RC256K字节Flash48K字节SRAM2K字节EEPROM
  2. 以太网控制器:W5500SPI接口与单片机相连
  3. 电源:USB供电
  4. 硬件外设:板载LED
  1. 开发工具: Keil
  2. 测试软件:串口调试助手,网络调试助手看代码之前,我们还是先来了解一下整个的程序流程,如图3所示整个程序采用查询方式,通过DHCP子程序成功获取IP后可执行NBNS服务。同时W5500EVB设置成HTTP Server,可以接收,并处理TCP Client发来的数据

     图4NBNS流程图

    3:主程序流程图

    本文主要讨论如何在单片机上实现NETBIOS名字解析服务,DHCPTCP Server相关部分子程序在此不再详细介绍,根据NETBIOS名字解析服务子程序流程图(如图4示),我们可以得知当查询到137端口收到网络的UDP数据包时,读取数据包并进行判断是否为NETBIOS名字报文,如果是就将解析出的名字与本机名比较,如果一致就回复报文。

    图3 主程序流程图

    4NBNS程序流程图

  1. 在此贴出NETBIOS部分代码,要获取完整代码,请到http://pan.baidu.com/s/1nt9MQKh上进行下载。
  2. void do_netbios(void)

{

  unsigned char state;

  unsigned int len;

1  state = getSn_SR(NETBIOS_SOCK);

  switch(state)

  {

  case SOCK_UDP:

2    if((len=getSn_RX_RSR(NETBIOS_SOCK))>0)

    {

      unsigned char rem_ip_addr[4];

      uint16 rem_udp_port;

3     char netbios_name[NETBIOS_NAME_LEN+1];

继续阅读:http://blog.csdn.net/wiznet2012/article/details/43451805

 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1647523 2015-2-12 15:16

Matrixtsl 开发了一系列电子积木板,同时提供多种单片机:PIC,AVR及ARM搭配使用。其中一款电子积木板,使用了WIZnet产品 W5100 和 WizFi610提供网络连接。 另外,电子积木可以使用IDE开发,将使用流程图的方法(Flowcode)来代替编程语言。

用户1649053 2014-7-14 14:01

不错呀

用户1705428 2014-7-14 10:31

我跟你专业差不多,自动化,去年7月毕业的,也参加过全国机器人大赛等各种比赛,听你一说我就感觉找到同行了,哈哈。只是我学校是二流的二本,我也是喜欢电子。现在在一家外企从事电子硬件设计。我个人觉得择业比就业更重要,先择业再就业,至少要选对行,朝着自己的理想前进。只有一直朝着一个方向努力,总会成功的。一万小时定律,而当你从错误的行业再转过来,就已经浪费了太多时间。除非像自己创业,再每个相关行业多了解多学习吸取经验。

用户1678053 2014-7-14 09:30

??

用户1731488 2014-7-14 07:55

说的什么呀,自我感觉良好
相关推荐阅读
用户1647523 2018-01-09 16:09
教你如何通过MCU配置S2E为TCP Client的工作模式
在上两篇文章中分别讲述了通过MCU配置S2E为UDP、TCP Server的工作模式”,相信小伙伴们已经对S2E的基本功能了解了一些,现在就让我们再接再厉、更上一层楼吧:首先我们先了解一下MCU与S2...
用户1647523 2018-01-09 15:53
教你如何通过MCU配置S2E为TCP Server的工作模式
在上一篇文章中讲了“如何通过MCU配置S2E为UDP模式”,相信小伙伴们已经了解了S2E的基本功能,在这一篇中,我们再接再厉,继续学习一下“如何通过MCU配置S2E为TCP Server的工作模式”,...
用户1647523 2018-01-09 14:44
教你如何通过MCU将S2E配置为UDP的工作模式
​​W5500S2E-S1是一款工业级串口转以太网模块,支持TCP Server、TCP Client和UDP三种工作模式,串口波特率最高可达1.152Mbps,并提供配套的上位机配置软件,也可通过网...
用户1647523 2015-12-09 13:53
第四届韩合集成电路技术交流会成功举办
2015年12月2日,第四届韩合集成电路技术交流会在WESTIN酒店深圳世界之窗店顺利举办。本届交流会与会嘉宾主要是韩合集成电路项目的主要领导、驻在深圳的9家韩合IC企业以及相关企业代表,主要围绕...
用户1647523 2015-12-09 13:46
第四届韩合集成电路技术交流会成功举办
2015年12月2日,第四届韩合集成电路技术交流会在WESTIN酒店深圳世界之窗店顺利举办。本届交流会与会嘉宾主要是韩合集成电路项目的主要领导、驻在深圳的9家韩合IC企业以及相关企业代表,主要围绕...
用户1647523 2015-10-16 14:47
WIZnet芯片在智能家居市场的应用
2014年是智能家居和可穿戴设备集中发力的一年。传统家电厂商、互联网企业和智能终端企业都虎视眈眈的盯着这个巨大的蛋糕,初创企业也借助各种众筹平台将自己的新奇创意转换为实际产品并推进市场,各种智能家...
我要评论
1
17
关闭 站长推荐上一条 /3 下一条