Z-Stack学习笔记

Z-Stack学习笔记
Z-Stack学习笔记

学习Zstack之1

第一步:安装Zstack

默认安装路径为:C:\Texas Instruments\ZStack-1.4.3。安装之后在C:\Texas Instruments\ZStack-1.4.3目录下有各PDF文档为:Getting Started Guide CC2430.pdf,这个肯定是要看的。既然把它放到这么前面,说明它是入门中的入门文档。下面就简单介绍下这个文档:

1、介绍了安装ZStack-CC2430-1.4.3.exe需要的硬件软件条件:需要电脑、操作系统为Windows 2000或Windows XP。至于更高或更低版本的本人没有尝试。

2、讲了安装流程。这个有点多余了,这年月哪个有电脑的没有安装上百上千次的软件啊?但是需要强调的是安装路径----默认就好!

3、接下来就是让我们看的第一个文档为:

Start->Programs->Texas Instruments->ZStack-1.4.3->Z-Stack User’s Guide,

第二步:Z-Stack用户指导

1、介绍

1.1、适用范围

本文档适用于CC2430ZigBee开发板----CC2430ZDK。

2、产品包描述(TI提供的CC2430ZDK工具包)

2.1、安装包内容

这个就是上面提到的的ZStack-CC2430-1.4.3.exe安装之后的所有内容了。说白了就是包含Zstack开发所需要的所有软件和文档资料等。

2.2、开发板介绍

两块SmartRF04EB 评估版,每个都可以用于CC2430EM评估模块。如图1-1所示:

5块CC2430DB 评估板,如图1-2所示:

Figure 2: Chipcon CC2430DB Development Board

10个SOC_BB 评估板,每个都可以用于CC2430EM或CC2431EM。如图1-3

所示:

Figure 3: Chipcon SOC_BB Battery Board

2.3、电缆

也就是包含开发包所需要的电缆,如RS232串口线,USB线等等附属配件。3、安装配置

3.1、主机配置

一台个人计算机----也就是电脑哈。我想玩嵌入式的应该都有,而现今不过时的配置就可以:下面是最低配置

.NET 1.1 架构

Windows XP Service Pack 1 (i如果是Windows XP)

1个串口(也就是RS232接口)s

1 USB接口

个人认为要求已经相当低了,如果你的电脑没有这配置,个人强烈建议马上扔掉!不过如今笔记本电脑很少有串口的,所以建议使用台式电脑,而且装机的时候一定要把串口引出,否则就比较麻烦了!

3.2、目标板需求

其实也是开发环境需求--- IAR EW8051。目前需要的版本为7.30B及以上。要求还是比较高的,因为目前这个版本没有破解的。但是在https://www.360docs.net/doc/ce10767399.html,/上有30天评估版下载。这个版本使用一定要小心,因为如果30天之后仅仅是卸载IAR重新安装是没有用的,一般最笨的办法是重新安装操作系统。解决这个问题最好的办法就是买正版,呵呵,我想绝大多数像我这样的中国人都不会买的。除此之外最好的办法就是破解,但是目前这个破解极少,都是需要收费的,而且都是国外网站才有,所以我们就只好期望中国的高人抓紧破解并公开了!当然其他解决办法就相对来说很多了,比如安装后弄个还原点什么的;或者安装后我不停地使用(每天24小时),30天之后我觉得你也学会了,就不用IAR这个版本

了,说不定就移植到低版本上去了;等等类似之法我觉得都可以的。本人采用的

是本办法中相对比较聪明的,也是一位高人告诉我的:装个虚拟操作系统,在虚拟操作系统下时间可以随时更改,让它一直停留在某个时间,主要30天的试用就比较慢长了,只要你不要忘记改那时间。

4、产品安装过程

4.1、安装Z-Stack

这个也就是安装ZStack-CC2430-1.4.3.exe的过程。

4.2、IAR安装

一般来说安装选择默认路径,但是自定义路径也不会出问题的。注意IAR 版本7.30B及以上版本才可以运行1.4.3协议。

4.3、设备IEEE地址

每个CC2430DB, CC2430EM,和CC2431EM都已经排列了一个唯一的64位物理地址(IEEE地址),这个地址已经写到了CC2430内部FLASH里面,在CC2430DB, CC2430EM,和CC2431EM板的底部有这个地址标签。

这个地址被写入到FLASH的0x1FFF8地址中,注意这个地址也可以更改的,通过些FLASH软件,一般0xFFFFFFFFFFFFFFFF地址被认为是无效地址。

5、配置并试用Z-Stack

5.1、配置Z-Stack

这个详见5.3节。

5.2、逻辑类型

这里主要是介绍了ZIGBEE协议中的三种设备类型:

ZigBee 协调者(ZC):这个设备被配置为初始化并建立一个PAN网络

ZigBee 路由器(ZR):该设备被配置为加入一个存在的网络,可以加入一个协调求或路由器,然后允许其他设备加入它,在网络中路有数据信息。

ZigBee 终端节点(ZED):该设备被配置为加入一个存在的网络,可以加入一个协调求或路由器。

5.3、建立样品应用设备:SampleApp

基本上就是采用SampleApp应用中的Demo例子来演示整个流程,就是采用一个协调器和一个或多个路由器来形成一个ZigBee网络演示。在该例子中主要通过SmartRF04EB板上的某些跳线来完成设备类型的选型,当然这个方法在程序中是需要判断哪个按键被拉低或拉高,对于做个设计的来说应该是相当好理解的。

申明:由于本人很穷,所以没钱买TI原装开发包,当然也就没有上面提到的硬件,本人采用的是某家公司(为了避免广告,这里就不说明了)的硬件系统。

5.4、建立一个SampleLight协调器设备

至于提到的硬件连接这里一律省略。

无疑:首先要打开对应工程,如图1-4所示:

在工作窗口中选择DemoEB,如图1-5所示:

然后选择工程菜单(Project)下的全部编译(Rebuild All)选项,如图1-6所示:

然后选择工程菜单(Project)下的调试(Debug)选项,如图1-7所示:

图1-7

下载完之后就可以退出调试状态,通过选中调试菜单下的停止调试选项,如图1-8所示:

图1-8

按照此种方法下载至少两个CC2430EM模块,就可以进行Demo演示了。

6、Z-Stack 示范

至于详细的示范流程,这里先不说了,因为本人采用的硬件与原装有点差异,即使按照这个方法下载仍然不能演示,因为我这个不能用跳线来选择设备类型。

所以我必须进入程序把跳线判断程序进行简单必要的修改才能演示。

该文档介绍的演示结果及现象都是基于CHIPCON原厂评估板。

7.PanID和通道(Channel)选择

ZigBee协议规范规定,一个14位的个域网标志符(PAN ID)来标识唯一的一个网络。Z-Stack可以用两种方式由用户自己选择其PAN ID,当ZDAPP_CONFIG_PAN_ID值设置不为0xFFFF时,那么设备建立或加入网络的PAN ID由ZDAPP_CONFIG_PAN_ID指定;如果设置ZDAPP_CONFIG_PAN_ID 为0xFFFF;那么设备就将建立或加入它发现网络中的―最好‖的网络。关于这里提到的―最好‖的网络,我觉得可能是有些参数评估,只不过这里没有详细的介绍,在后续文档中应该有介绍的。

在2.4G频段上,IEEE 802.15.4/ZIGBEE规范规定了16各频道。用户可以通过选择DEFAULT_CHANLIST不同的值可以选择不同的频道,其频道如图1-9

所示。改协议默认频道为0xB及0x00000800。

图1-9

DEFAULT_CHANLIST 和ZDAPP_CONFIG_PAN_ID都作为IAR IDE中的编译选项可以进行设置,在应用文件中的…\Projects\Tools\CC2430DB目录下的f8wConfig.cfg文件中有相应设置,如图1-10所示。

图1-10

学习Zstack之2

上节基本上初步认识了Zstack的一些情况,今天继续我的学习,打开Sample 例子看看,究竟ZIGBEE是怎么回事。

毫无疑问:如果是第一次打开这个例子工程,肯定很迷糊,因为此时我迷

糊了。对图2-1我简直是相当迷糊。

图2-1

这么多文件夹,打开之后又有那么多文件,从何看起?不要着急,特别是有些人拿到之后,啥都不知道的人第一个问题就是:我要实现XXX,在哪修改或者在哪添加我的函数呢?凡是我遇到这样的客户,我就可以肯定他技术部咋的。就连我这个外行都知道,不把这些弄明白,就是实现XXX只需要修改一个字母,那也不知道在哪改啊?所以我不急,但是我也理解很多客户,因为有时候项目催的比较急,毕竟老板都是外行嘛!

两条路:1就是先看主函数,2就是看看TI提供例子说明文档没有。

我这里先看看主函数再说哈!因为我就知道从主函数看起.

没办法大概每个文件夹找啊,主函数的特征还是比较明明显的,见图2-2所示:

图2-2

下面把主函数复制过来简单看下:

ZSEG int main( void )

{

// Turn off interrupts------------关闭中断

osal_int_disable( INTS_ALL );

// Initialize HAL-----------初始化HAL,关于HAL是什么我想后面会有介绍的。HAL_BOARD_INIT();

// Make sure supply voltage is high enough to run----电压检测,最好是能保证芯片能正常工作的电压

zmain_vdd_check();

// Initialize stack memory-------------初始化stack存储区

zmain_ram_init();

// Initialize board I/O------------初始化板载IO

InitBoard( OB_COLD );

// Initialze HAL drivers-------------初始化HAL驱动

HalDriverInit();

// Initialize NV System--------------初始化NV系统,NV是什么后面我想也会有介绍的

osal_nv_init( NULL );

// Determine the extended address------------确定扩展地址(64位IEEE/物理地址)zmain_ext_addr();

// Initialize basic NV items----------------初始化基本NV条目

zgInit();

// Initialize the MAC----------------初始化MAC

ZMacInit();

#ifndef NONWK

// Since the AF isn't a task, call it's initialization routine

afInit();

#endif

// Initialize the operating system----------初始化操作系统,看样子这里面还有OS,麻烦了……..!

osal_init_system();

// Allow interrupts-------------允许中断

osal_int_enable( INTS_ALL );

// Final board initialization------------------最后的版在初始化

InitBoard( OB_READY );

// Display information about this device---------------显示设备信息

zmain_dev_info();

/* Display the device info on the LCD */------------液晶支持显示

#ifdef LCD_SUPPORTED

zmain_lcd_init();

#endif

osal_start_system(); // No Return from here-------------------这里没有返回,大概是进入OS了。

} // main()

可以看到基本上都是初始化函数,因为函数名称都基本上带了init字样的,呵呵,个人觉得TI的变成习惯比我好,一看名称就知道大概功能了。所以这里也奉劝各位像我这样菜鸟级的初学者,一开始一定就要养成规范化编程的习惯,据说这样维护以及以后升级或者移植兼容性都比较好。我就先不管各个初始化函数是怎么实现的,我先看看各个功能是什么,现掌握整体功能在细化,我觉得这样的学习方法比较好,因为代码是在太多了,从一开始就逐句看,我敢保证没几个人有耐心看完看明白!

幸好每个初始化函数都有一句说明,虽然是英文的,但是理解起来一点都不难的。关于每个函数的功能我就直接写在上面的程序里面,节省纸张哈!

一句话:主函数的功能就是初始化!

主函数看完了又开始模糊了,又从何看起呢?在无从下手之际,只有去寻

求TI说明文档的帮助了。上节不是漏掉了内容,是关于演示结果的,这里做上补充,怕因为缺调一点后面遇到什么不理解的就惨了!

Sample例子演示演示现象:

1、认识硬件------------按键和LED

上节提到了EM和DB两个板子,其硬件是不一样的。按键EM就有5各SW1~SW5,而DB只有1各方向键,但是他们有个对应关系,如图2-3所示.

图2-3

LED数量和颜色也不一样,EM有四个LED,如图2-4;而DB只有两个,如图2-5。

如图2-4

如图2-5

关于上面几个图2-4/5中出现的LEDx实际上是程序中出现的关键字。

2、初始化64位IEEE地址

实际上在主函数中有这么个初始化函数的:zmain_ext_addr()。这里说如果地址复位为0xFFFFFFFFFFFFFFFF的话,那么就会不停的闪烁LED1,一直等到

按键SW5按下后程序才能继续运行,意思就是说按下SW5后就把无效的地址初始化为有效地物理地址了,这个应该是程序上实现的,那么就来看看对应的程序zmain_ext_addr。

/******************************************************************** *

* @fn zmain_ext_addr

* @brief Makes extended address if none exists.确定扩展地址是有效的

* @return none

******************************************************************** */

static ZSEG void zmain_ext_addr( void )

{

uint8 i;

uint8 led;

uint8 tmp;

uint8 *xad;

uint16 AtoD;

// Initialize extended address in NV初始化NV里的扩载地址

osal_nv_item_init(ZCD_NV_EXTADDR,Z_EXTADDR_LEN, NULL );

osal_nv_read( ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, &aExtendedAddress ); // Check for uninitialized value (erased EEPROM = 0xFF)检查是否为无效值(地址)xad = (uint8*)&aExtendedAddress;

for (i =0;i < Z_EXTADDR_LEN; i++ )

if(*xad++ != 0xFF ) return;-----如果有一个字节不为0xFF,那么该地址有效返回#ifdef ZDO_COORDINATOR

tmp = 0x10;

#else

tmp = 0x20;

#endif

// Initialize with a simple pattern----------------简单初始化扩展地址

xad = (uint8*)&aExtendedAddress;

for ( i = 0; i < Z_EXTADDR_LEN; i++ )

*xad++ = tmp++;

// Flash LED1 until user hits SW5 ---------闪烁LED1直到SW5按下

led = HAL_LED_MODE_OFF;

while ( HAL_KEY_SW_5 != HalKeyRead() )---------------------SW5循环检测

{

MicroWait( 62500 );

HalLedSet( HAL_LED_1, led^=HAL_LED_MODE_ON );//Toggle the LED MicroWait( 62500 );

}

HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );

// Plug AtoD data into lower bytes

AtoD = HalAdcRead (HAL_ADC_CHANNEL_7, HAL_ADC_RESOLUTION_10);

xad = (uint8*)&aExtendedAddress;

*xad++ = LO_UINT16( AtoD );

*xad = HI_UINT16( AtoD );

#if !defined( ZTOOL_PORT ) || defined( ZPORT ) || defined( NV_RESTORE )

// If no support for Z-Tool serial I/O,

// Write temporary 64-bit address to NV些临时的64位物理地址进入NV

osal_nv_write( ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, &aExtendedAddress ); #endif

}

从程序中可以看出,一开始就检测FLASH中的物理地址,因为这个地址在FLASH中是固定的存储空间,一旦为有效地址就退出函数,一旦为无效地址(0xFFFFFFFFFFFFFFFF),那么就对其物理地址进行简单的初始化并检测SW5按键。还是比较好理解的!

3、运行例子

在这里提到了跳线,由于本人采用的非TI原装硬件,没有该跳线,所以必须对程序进行修改,否则检测不到跳线,连ZIGBEE的设备类型都不能确定,肯定不能正常运行了。所以这里就先暂时不说了,这里要说的是一切都正常的情况下,例子的验尸结果。小小跳跃一下。不然学习一直没有进展很麻烦的!

协调器:上电运行,地址检测如上面介绍的情况,通过之后呢-------就进行通道扫描,此时LED1闪烁,一旦协调器成功建立网络,此时LED1停止闪烁,而LED3被点亮。

路由器:上电运行,仍然是地址检测在前。之后就是通道扫描寻求是否又存在的网络,此时LED1闪烁,一旦检测到存在网络并成功加入该网络,LED1将停止闪烁,被替换的是LED3别点亮,也就表明路由器成功加入了网络。

那么此时能进行的操作控制是什么呢,也是最简单的表现手法---按键无线控制LED:

周期(5S)发送信息到网络中每个设备

SW1按下,发送一个信息到组1的设备

SW2按下,退出/加入组1

这个我是经过验证的。如:

按下协调器SW1,路由器的LED1狂闪几下;按下路由器的SW1,那么协调器的LED1也就狂闪几下;当然我是只有两个节点。

如果按1下协调器的SW2,在按下路由器的SW1,此时协调器就没有反应,表明协调器已经退出组1;但是再按下协调器SW2在按路由器的SW1就与上一步类似了。路由器与此类似可以通过SW2退出/加入组1.

终于把演示弄完了,接下来就来看看程序。在此之前还是来看看TI提供的Sample指导文档。这个文档个人觉得写的不错,要是没看之前就看程序的却很郁闷的!

但是本人英文很差,所以需要慢慢看,等点时间放上来!

Z-Stack之3

Sample Application分析(上)

1、Z-Stack CC2430DB and CC2430EB Sample Application

1.1、介绍

该文档时介绍TI协议入门的一个例子SampleApp的,适用EM和DB开发板。

1.1.1、描述

这个例子是非常简单的演示,每个设备都可以发送和接收两个信息

周期信息-----加入该网络的所有设备每隔10S(可能会加上一个随机数的mS)都发送一个周期信息,该信息的数据载荷为发送信息次数的计数。

闪烁控制信息---------通过按下SW1可以发送一个控制灯闪烁的广播信息,该广播信息只针对组1的所有设备。

所有设备初始化为加入组1,所以网络一旦成功建立/加入就可以进行闪烁控制。可以通过按下设备的SW2退出组1,所以可以通过退出组1可以不接受闪灯信息。通过按下SW2也可以让不在组1的设备加入近组1,从而又可以接受闪灯信息了。

这个理解应该不困难的,反正我理解没有什么障碍!

1.1.1.1、按键

SW1:发送闪烁信息到组1所有设备

SW2:转换推出/加入组1状态

1.1.2、用户应用开发

这里我基本上能看明白是什么,但是我不打算写出来,因为涉及到一些ZIGBEE的关键术语,不是很明白。

大概就是简单介绍了下用户怎么利用例子做自己的应用,但是实用价值不高,说的太笼统,全是概念性的说明。

1.2、OSAL任务

1.2.1、初始化

因为Z-Stack是在OS下运行的,所以在之前必须调用osalAddTasks()初始化任务。

1.2.2、组织

关于OS的API函数介绍请看文档:Z-Stack OSAL API (F8W-2003-0002),应该说协议栈的每层或者说每部分都有相关的API说明文档。osalAddTasks()初始化任务,osalTaskAdd()函数添加任务,都可以到API文档或程序中详细分析函数功能。

1.2.3、系统服务

OSAL和APL系统服务是唯一的,因为比如按键和串口类似事件处罚就只能用唯一的一个任务标识。这两个硬件都留给了用户自己定义使用。

1.2.4、应用设计

用户可能为每一个应用对象都创建一个任务,或者为所有的应用对象只创建一个任务。当选择上述的设计的时候,下面是一些设计思路:

1.2.4.1、为许多应用对象创建一个OSAL任务

下面是正面和反面(pros & cons)的一些叙述:

- Pro:接受一个互斥任务事件(开关按下或串口)时,动作是单一的。

- Pro:需要堆栈空间保存一些OSAL任务结构。

- Con:接收一个AF信息或一个AF数据确认时,动作是复杂的-----在一个用户任务上,分支多路处理应用对象的信息事件。

- Con:通过匹配描述符(如:自动匹配)去发现服务的处理过程更复杂-----为了适当的对ZDO_NEW_DSTADDR信息起作用,一个静态标志必须被维持。

1.2.4.2、为一个应用对象创建一个OSAL任务

一对一设计的反面和正面(pros & cons)是与上面一对多设计相反的:

- Pro:在应用对象试图自动匹配时,仅仅一个ZDO_NEW_DSTADDR被接收。

- Pro:已经被协议栈下层多元处理后的一个AF输入信息或一个AF数据确认。

- Con:需要堆栈空间保存一些OSAL任务结构。

- Con:如果两个或更多应用对象用同一个唯一的资源,接收一个互斥任务事件的动作就更复杂。

1.2.5、强制方法

任何一个OSAL任务必须用两种方法执行:一个是初始化,另一个是处理任务事件。

1.2.5.1、任务初始化

在例子中调用如下函数执行任务初始化:

―Application Name‖_Init(如SAPI_Init)。该任务初始化函数应该完成如下功能:

变量或相应应用对象特征初始化,为了使OSAL内存管理更有效,在这里应该分配永久堆栈存储区。

在AF层登记相应应用对象(如:afRegister())。

登记可用的OSAL或HAL系统服务(如:RegisterForKeys())

1.2.5.2、任务事件处理

调用如下函数处理任务事件:

―Application Name‖_ProcessEvent (e.g. SAPI_ProcessEvent()).除了强制的事件之外,任一OSAL任务能被定义多达15个任务事件。

1.2.6、强制事件

一个任务事件SYS_EVENT_MSG (0x8000), 被保留必须通过OSAL任务设计。

2.2.6.1、SYS_EVENT_MSG (0x8000)

任务事件管理者应该处理如下的系统信息子集,下面只列出了部分信息,但是是最常用的几个信息处理,推荐根据例子复制到自己项目中使用。

1.2.6.1.1、AF_DATA_CONFIRM_CMD

调用AF_DataRequest()函数数据请求成功的指示。Zsuccess确认数据请求传输成功,如果数据请求设置AF_ACK_REQUEST标志位,那么,只有最终目的地址成功接收后,Zsuccess确认才返回。如果如果数据请求没有设置AF_ACK_REQUEST标志位,那么,数据请求只要成功传输到下跳节点就返回Zsuccess确认信息。

1.2.6.1.2、AF_INCOMING_MSG_CMD

AF信息输入指示

1.2.6.1.3、KEY_CHANGE

键盘动作指示

1.2.6.1.4、ZDO_NEW_DSTADDR

匹配描述符请求(Match Deor Request)响应指示。(例如:自动匹配)

1.2.6.1.5、ZDO_STATE_CHANGE

网络状态改变指示

1.3、网络格式化

示例应用程序编译为协调器的在default_chanlist指定的通道上形成一个网络,协调器将建立一个随机编号源于自身的IEEE地址或由zdapp_config_pan_id 指定的网络PAN ID(如果zdapp_config_pan_id不为0xFFFF)。

示例应用程序编译为路由器或结束设备的将尝试加入网络在default_chanlist指定的通道上,如果zdapp_config_pan_id没有定义为0 xFFFF ,路由器将受到限制,只有加入参数zdapp_config_pan_id规定的网络PAN ID。1.3.1、自动启动

设备自动开始尝试组建或加入网络。如果设备设置为等待计时器或其他外部事件发生后才启动,那么HOLD_AUTO_START必须被定义。为了稍后以手动启动方式启动设备,那么需要调用ZDApp_StartUpFromApp(函数

1.3.2、软件启动

为了在形成网络过程中节省所需的设备类型,那么所有的路由器设备可以被通过soft_star定义作为一个协调器。如果自动启动是需要的话,那么auto_soft_start必须被定义。

1.3.3、网络恢复

通过设置NV_RESTORE和/或NV_INIT,可以让设备断电或者意外掉电重新启动后重新回复网络。

1.3.4、加入通告

当设备形成或加入网络后会发通报到ZDO_STATE_CHANGE信息事件。

学习Z-Stack之4

Sample Application分析(下)

上节介绍了建立一个应用需要做的几个必须的事情,现在就来通过分析Sample Application来具体看看需要做哪些事情,才能建立一个ZIGBEE应用功能。当然这里只是做点简单的必须的工作。

The Sample Application (SampleApp)

1、介绍

主要是介绍一个应用建立的结构及需要进行的程序流程。

1.1、程序流程

1.1.1、初始化

首先需要调用初始化函数SampleApp_Init()。

SampleApp_TaskID = task_id;

初始化应用建立的任务ID号,其实用过OS的人都应该晓得这个是干啥的,我没用过,不是很理解,但是我知道是必须的,就相当于一个任务的标识,这样才能区分运行过程中不同任务中的不同事件。我是这么认为的,ID说白了就是给该任务取了各名字,就向人名字一样,区分不同的人,就是一个代号。人名可以重复,重复了有时候叫起来就容易混淆;所以才程序中为了避免这种混淆,就

强制性的规定任务ID不能重复。要是哪天国家或者联合国姓名管理委员会规定,人民不能重复,那么这个人名就需要全球统一管理了。那给娃取个名字就要向联合国姓名管理委员会申请了。呵呵!

SampleApp_NwkState = DEV_INIT;

初始化应用设备的网络状态。怎么说呢,据说是设备类型的改变都要产生一个事件,叫ZDO_STATE_CHANGE,从字面理解为ZDO状态发生了改变。所以在设备初始化的时候一定要把它初始化为什么状态都没有。那么它就要去检测整个环境,看是否能重新建立或者加入存在的网络。但是有一种情况例外,就是当NV_RESTORE被设置的时候(NV_RESTORE是把信息保存在非易失存储器中),那么当设备断电或者某种意外重启时,由于网络状态存储在非易失存储器中,那么此时就只需要恢复其网络状态,而不需要重新建立或者加入网络了。我也是从文档中这么理解的,至于为什么只有有待进一步考证。

SampleApp_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent;

SampleApp_DstAddr.endPoint = 0;

SampleApp_DstAddr.addr.shortAddr = 0;

看见这几句话从字面理解为:初始化不标设备地址模式及目标设备EP号和网络地址。从代码可以看出,这些地址或EP均为0。也就是说目标设备为协调者的ZDO,这个意义就很明显了,就是设备建立后可以直接与协调器的ZDO交互信息。

SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;

----- SampleApp EP描述符的EP号

SampleApp_epDesc.task_id = &SampleApp_TaskID;------ SampleApp EP描述符的任务ID

SampleApp_epDesc.simpleDesc =------------------ SampleApp EP简单描述符SimpleDeionFormat_t *)&SampleApp_SimpleDesc;

SampleApp_https://www.360docs.net/doc/ce10767399.html,tencyReq = noLatencyReqs;

//在AF层中登记注册改应用EP

afRegister( &SampleApp_epDesc );

这里其实是对SampleApp的EP描述符进行初始化。

本人理解:要对改应用进行初始化并在AF进行登记,告诉应用层有这么一个EP已经可以使用,那么下层要是有关于改应用的信息或者应用要对下层做哪些操作,就自动得到下层的配合,至于这个配合是怎么回事,那么就需要好好研究下层的协议了。当然在这里肯定是没那时间精力和能力研究了!

其实在这个应用中,只是让AF配合SAMPLEAPP_PROFID / SAMPLEAPP_ENDPOINT这两个应用。那么通过什么呢,通过发送OSAL SYS_EVENT_MSG消息中的(AF_INCOMING_MSG_CMD)事件到SampleApp任务ID。

RegisterForKeys( SampleApp_TaskID );

登记按键事件到SampleApp_TaskID,在前面已经说了按键这个是唯一的,也就是所有任务中有且只有各任务能登记键盘事件。前面还说了还有一个也是唯一,你猜是什么?

SampleApp_Group.ID = 0x0001;

osal_memcpy( SampleApp_https://www.360docs.net/doc/ce10767399.html,, ―Group1‖ );

aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );

闪灯信息被发送到组1,同样也只有在组1的设备才能接收这个信息。设备启动时已经被设定为组1设备了,但是可以通过按SW1推出/加入组1。这里提到了组的概念,我反正暂时不是很清楚这个是什么东西,在程序中怎么实现也很模糊,但是应用中的好处还是不难想象的,不外呼是就是想控制谁可以事先规定好,还可以动态更改。

1.2、事件处理

玩过OS的人都知道,OS中最重要的概念不外呼就是任务啦,消息啦,事件啦等。从我们自己平时的工作中也不难想象,如果老板安排了某项工作,那么我们就需要做的,这个工作可能是预先计划好的,也有可能是临时的,那么这些预先定好或者临时的工作可以称之为事件。而老板让您做的方式,比如通过文件下达,或者叫:某某你把XXX做下。那么让老板下达的文件内容或者说的内容我这里可以称之为消息。老板给了你不同的消息那么就需要干不同的事件,至于任务可以理解为公司的不同的员工,呵呵!我简直是理解的天才,这样举例居然也能忽悠通过!!!o(∩_∩)o…哈哈

在Z-Stack中,每个应用任务都通过SampleApp_ProcessEvent()函数来处理任务中的事件。一旦SampleApp_TaskID任务的某个OSAL事件发生,那么就可以通过调用SampleApp_ProcessEvent()函数来处理。在SampleApp_ProcessEvent()中有一个事件处理循环,循环检测是哪个事件发生。

if ( events & SYS_EVENT_MSG )

{

MSGpkt = (afIncomingMSGPacket_t*)osal_msg_receive( SampleApp_TaskID ); while ( MSGpkt )

{

可以看到是通过检测SYS_EVENT_MSG是否有事件信息发生。

switch ( MSGpkt->hdr.event )

这里是判断SYS_EVENT_MSG事件类型,不同的SYS_EVENT_MSG类型需要不同的处理。

case KEY_CHANGE:

SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state,

((keyChange_t *)MSGpkt)->keys );

break;

比如这里判断是否是键盘事件,如果键盘事件就调用键盘处理函数。

如果一个OSAL任务已经被登记组侧,那么任何键盘事件都将接受一个KEY_CHANGE事件信息。可能有如下几种方式得到键盘事件信息1)、HAL检测到键盘按下(中断或者查询检测)

2)、HAL的OSAL任务检测到一个键盘状态改变调用回叫函数产生

3)、OSAL键盘改变回叫函数发送一个OSAL系统事件信息(KEY_CHANGE)。

case AF_DATA_CONFIRM_CMD:

// The status is of ZStatus_t type [defined in ZComDef.h]

// The message fields are defined in AF.h

afDataConfirm = (afDataConfirm_t *)MSGpkt;

sentEP = afDataConfirm->endpoint;

sentStatus = afDataConfirm->hdr.status;

NETFLOW配置及软件

一、测试环境介绍 1、硬件1台6509交换机,1台3745路由器 IOS (tm) c6sup2_rp Software (c6sup2_rp-JS-M), Version 12.1(22)E6, RELEASE SOFTWARE (fc1) System image file is "disk0:c6sup22-js-mz.121-22.E6.bin" IOS (tm) 3700 Software (C3745-IS-M), Version 12.2(13)T5, RELEASE SOFTWARE (fc1) System image file is "flash:c3745-is-mz.122-13.T5.bin" 2、软件solarwinds NetFlow Traffic Analysis 3.0、 ManageEngine_NetFlowAnalyzer_7002、 二、硬件配置 1、NETFLOW配置文档。 2、6509配置 mls netflow mls flow ip destination-source mls nde sender version 5 (我们的设备只有版本5) ip flow-export source Loopback0 (如果有L0接口用其他接口也可以) ip flow-export version 5 ip flow-export destination 192.168.4.165 2055 (2055是SOLAR公司的NETFLOW端口,9996端口是manangeengine公司的端口。两个端口号都是UDP 协议) 到此配置结束通过下面命令显示配置结果 CAT6509_1#show mls nde Netflow Data Export enabled Exporting flows to 192.168.4.165 (2055) Exporting flows from 218.30.64.33 (57965) Version: 5 Include Filter not configured Exclude Filter not configured Total Netflow Data Export Packets are: 612381 packets, 0 no packets, 16537978 records Total Netflow Data Export Send Errors: IPWRITE_NO_FIB = 0

CCNA安全笔记

CCNA Security笔记 Cisco ASA5500(VTM)集成了PIX、VPN3000、IPS功能 硬件IPS:(4240)入侵防护系统 CSA:基于主机的IPS 功能:限制用户行为,对应用程序进行控制 ISR增强特性:(ISR1800/2800/3825/3845) 1、无线模块 2、硬件IPS模块 3、Web Cache 4、NAM(网络分析模块) Role-based CLI views配置: 1、激活AAA:aaa new-model 2、配置enable secret:enable secret huda 3、进入Root View模式R1#enable view root Password:cisco 4、配置View“test”:R1(config)#parser view test定义用户 5、R1(config-view)#secret huda定义密码 6、R1(config-view)#command exec include ping定义可使用的命令

IOS安全保护,防止恶意删除,命令配置: Router(config)secret boot-image(加密隐藏保护IOS)Router(config)secret boot-config(加密备份配置) 注意:只有Console口才能禁用和恢复。 Rommon1>bootflash:c2800nm-adventerprisek9-mz.124.15. T5.bin Secure boot-config restore flash:/secure.cfg Router#copy flash:/secure.cfg running-config Cisco IOS Login Enhancements(防止恶意猜密码,DOS攻击)配置实例: Login block-for600attempts3with60(任何人60S内密码输错3次将挂起600S),只有permit用户不受这个限制 Login delay2 Login quiet-mode access-class block.ssh.new Login on-failure trap every3 Login on-success trap Ip access-list standard block.ssh.new Permit137.78.5.5

实验二、Wireshark的使用与PackerTracer的使用

实验二 Wireshark的使用与PackerTracer的使用 实验目的:掌握网络协议分析软件Wireshark的常用操作和网络模拟器PackerTracer的常用操作。 实验环境:计算机若干、直通双绞线若干、小型非管理交换机10台。 实验步骤: 1、配置对等局域网 2、Wireshark的使用 (1)启动系统。点击“Wireshark”图标,将会出现如图1 所示的系统界面。 图1 Wireshark 系统界面 其中“俘获(Capture)”和“分析(Analyze)”是Wireshark 中最重要的功能。 (2) 分组俘获。点击“Capture/Interface”菜单,出现如图2 所示界面。 图2 俘获/接口界面 如果该机具有多个接口卡,则需要指定希望在哪块接口卡俘获分组。点击“Options”,则出现图3 所示的界面。

图3 俘获/接口/选项界面 在该界面上方的下拉框中将列出本机发现的所有接口;选择一个所需要的接口;也能够在此改变俘获或显示分组的选项。 此后,在图2 或者图3 界面中,点击“Start(开始)”,Wireshark 开始在指定接口上俘获分组,并显示类似于图4 的界面。 当需要时,可以点击“Capture/Stop” 停止俘获分组,随后可以点击“File/Save”将俘获的分组信息存入踪迹(trace)文件中。当需要再次俘获分组时,可以点击“Captuer/Start”重新开始俘获分组。 (3) 协议分析。系统能够对Wireshark 俘获的或打开的踪迹文件中的分组信息(用 File/Open 功能)进行分析。如图4 所示,在上部“俘获分组的列表”窗口中,有编号(No)、时间(Time)、源地址(Source)、目的地址(Destination)、协议(Protocol)、长度(Length)和信息(Info) 等列(栏目),各列下方依次排列着俘获的分组。中部“所选分组首部的细节信息”窗口给出选中协议数据单元的首部详细内容。下部“分组内容”窗口中是对应所选分组以十六进制数和ASCII 形式的内容。 若选择其中某个分组如第255 号帧进行分析。从图4 中的信息可见,该帧传输时间为俘获后的15.129546 秒;从源IP 地址119.147.41.101 传输到目的IP 地址222.95.175.235;帧的源MAC 地址和目的MAC 地址分别是00.e0.fc.65.73.59 和00.16.35.aa.f3.75 (从中部分组首部 信息窗口中可以看到);分组长度74 字节;是TCP 携带的HTTP 报文。

作为初学者学习CINEMA 4D 的体会与建议以及利用到的参考资料

作为初学者学习CINEMA 4D 的体会与建议以及利 用到的参考资料 ------从室内建模得出的体会 教育技术学王晓琳 我并不是CINEMA 4D 的大神,我仅仅从一个初学者的角度来跟大家分享一下我从自己的室内建模中所得出的体会与技巧。说实话,我的这个建模做了一个多月了。真正做完以后,我发现以前的时间都用在了重复性的返工,重复性的改变上了。在对于于房子的构造上我就用了好长时间,那么我就仔细的来跟大家分享一下我所反思到的,以及希望大家注意的问题。 那么单从房间的构造来说,我觉得大家脑子里要有东西,我要怎么建?我的布局是什么样子的?怎么样的布局才合理?仅仅是这一个方面我就参考了许多设计师的房间设计。在实际的操作过程中,又有许多新的问题,怎么挤压?多出来的边、点、面怎么处理?如何分区域上色?…… 1.保持冷静与细心 千万不要慌,如果做了一步,感觉自己做的不对就要马上重做。不要到最后,才想到修改。后面修改的工作量才是巨大的。 2.视图的利用 最大的体会就是能在三视图上完成的工作,就在三视图上完成。三视图上的选择无疑是最简洁明了的。摄像机里可以调节视图,不同的视图都可以进行切换。绝大部分的工作都可以进行。

3.可以高效的利用显示部分的内容 快速着色可以用在材质的添加上,可以快速的进行修改、调整。线条又可以用在对于物体的位置调整,总不能让他们一直飘在天空中,我们又不是生活在太空中的外星人。 4.理解点线面的使用,以及纹理轴的利用 做模型的时候我总有这样的问题,模型的中心坐标不在物体中心上,进行移动、缩放的时候总是很费劲。那么,只要从对象轴进行对中心坐标的移动就可以了,移到他本来应该在的位置,物归原位。 纹理轴的利用当然是在材质贴图的时候,进行对所要贴图的物品的贴图进行旋转、缩放的操作。具体的呢,参考资料里的视频里有讲。 5.群组对象以及多边形对象的使用 在整个建模的过程中,我对不同的东西都进行了打组,及分类。基本上所有的几何体我都转换成了可编辑对象(快捷键C),这样的话方便对整体进行缩放,不会出现物体变形,

wireshark代码解析1

Wireshark学习笔记 1.简介 2.Wireshark功能模块 下图给出了wireshark功能模块: a)GTK1/2 处理用户的输入输出显示,源码在gtk目录. b)Core 核心模块,通过函数调用将其他模块连接在一起,源码在根目录 c)Epan wireshark Packetage Analyzing,包分析引擎,源码在epan目录 ●Protocol-Tree:保存数据包的协议信息,wireshark的协议结构采用树形结构,解析 协议报文时只需要从根节点通过函数句柄依次调用各层解析函数即可。 ●Dissectors:在epan/dissector目录下,各种协议解码器,支持700+种协议解析,对 于每种协议,解码器都能识别出协议字段(field),并显示出字段值(field value) 由于网络协议种类很多,为了使协议和协议间层次关系明显,对数据流里的各个层 次的协议能够逐层处理,wireshark系统采用了协议树的方式。 ●Plugins:一些协议解码器以插件形式实现,源码在plugins目录 ●Display-Filters:显示过滤引擎,源码在epan/dfilter目录 d)Capture 捕包引擎,利用libpcap/WinPcap从底层抓取网络数据包,libpcap/WinPcap提供了通用的抓包接口,能从不同类型的网络接口(包括以太网,令牌环网,ATM网等)获取数据包。 e)Wiretap 从文件中读取数据包,支持多种文件格式,源码在wiretap目录 f)Win-/libpcap Wireshark抓包时依赖的库文件

wireshark功能模块 3.wireshark流程分析 1)初始化 Wireshark的初始化包括一些全局变量的初始化、协议分析引擎的初始化和Gtk相关初始化,显示Ethereal主窗口,等待用户进一步操作。重点就是Epan模块的初始化。 Epan初始化: ?tvbuff初始化:全局变量tvbuff_mem_chunk指向用memchunk分配的固定大小的 空闲内存块,每个内存块是tvbuff_t结构,从空闲内存块中取出后,用来保存原始 数据包。 ?协议初始化: ◆全局变量: ●proto_names ●proto_short_names ●proto_filter_names 以上三个全局变量主要用来判断新注册的协议名是否重复,如果重复,给出提 示信息,在协议解析过程中并没有使用。 ◆协议注册:

Libnids学习笔记

Libnids学习笔记 一、Libnids概述 Libnids(Library Network Intrusion Detection System)是网络入侵检测开发的专业编程接口,实现了网络入侵检测系统的基本框架,提供了一些基本的功能。Libnids是基于Libpcap和Libnet而开发的,其主要功能包括捕获网络数据包、IP碎片重组、TCP数据流重组以及端口扫面攻击检测和异常数据包检测等。 二、Libnids安装 Libnids需要支持库Libpcap和Libnet,此外,编译过程还需要byacc、flex 和glib(2.2+)。在CentOS 6.5下安装Libnids的步骤: 1.安装byacc、flex和glib # yum install byacc # yum install flex # yum -y install glib2-devel 2.安装Libpcap开发包 # tar –xzvf libpcap-x.y.z.tar.gz # ./configure # make # make install 3.安装Libnet开发包 # tar –xzvf libnet-x.y.z.tar.gz # ./configure # make # make install 4.安装Libnids开发包 # tar –xzvf libnids.x.y.tar.gz # ./configure # make # make install

三、Libnids编程模型 在Linux下使用libnids开发应用程序,源文件中需要包含头文件nids.h,并且拥有libnids库libnids.a或libnids.so.x.x。程序的main函数通常采用以下结构:main() { 与libnids无关的程序私有过程 设置libnids参数(可选) 初始化libnids,if (!nids_init()) 失败处理 注册libnids回调函数 运行libnids,nids_run() } 四、Libnids编译 libnids 1.24版本下,使用到的开发包是libnids、libpcap、libnet、libgthread-2.0和libnsl,它们的库名分别为nids、pcap、net、gthread-2.0和nsl。 在Linux下使用gcc链接编译时,要注意先后顺序,越是底层库,位置越后,因此的编译命令如下: # gcc x.c -o x -lnids -lpcap -lnet -lgthread-2.0 -lnsl 五、Libnids状态 Libnids中TCP连接的状态主要有如下6种: #define NIDS_JUST_EST 1:表示TCP连接刚刚建立,在此状态下可以通过连接参数(IP地址、端口号等)决定是否对此TCP连接后来的数据进行分析,并且可以指定接收数据的类型(共四种,分别是给客户端、给服务器以及给二者的带外数据); #define NIDS_DATA 2:表示新的TCP数据已到达,数据存储在tcp_stream 的half_stream结构中; #define NIDS_CLOSE 3:表示TCP连接正常关闭; #define NIDS_RESET 4:表示TCP连接被重置关闭; #define NIDS_TIMED_OUT 5:表示由于超时TCP连接被关闭; #define NIDS_EXITING 6:表示Libnids正在退出,在此状态下可以最后一次使用存储在half_stream结构中的数据。

c4d教程

c4d教程 1、首次启动C4D R19看到的工作区为默认的透视视图,可以按F5快捷键切换为4视图模式(分别为透视图,顶视图,右视图和正视图)。 坐标以红、绿、蓝(对应的X,Y,Z)三条线性箭头显示。每个视图右上有4个小图标按钮,从左到右分别是移动、缩放、旋转切换视图。 2、菜单栏下方是常用工具和对象。常用工具从左到右分别是选择、移动、缩放、旋转工具。这里要分清一点,这4个工具针对的是对象的操作。而视图右上角的4个为对视图的操作。 界面左侧一栏为常用的各种模式切换栏,包括最常用的“点”模式,”线“模式,”面“模式。 3、点一下基本对象按钮,就是工具栏中立方体的图标。这时工作区中会添加一个立方体对象。如果想要操作某一对象,必须保证此对象是被选中状态。 界面右侧是对象栏。在对象栏中点一下想要选中对象,即可选中该对象,接下来的操作会对被选中对象起作用。 4、在对象栏下方是属性栏,对象在被选中时会显示该对象属性参数。属性栏显示的不仅是对象属性还有工具属性。所以属性栏中显示的属性就由最后的选取来决定。比如选中立方体后又点了下“选择”工具,那么此时属性栏中显示的则是“选择工具”属性,而非立方体对象属性。 5、在C4D中对象大致分2种。

第一种叫基本对象或参数对象,例如立方体。 第二种叫可编辑对象。 在说可编加对象之前,我们先来看刚刚添加的立方体对象。选中立方体对象,属性栏中切换到对象标签,这里我们可以看到有尺寸.X.Y.Z。其后框显示200CM。这是立方体对象默认尺寸,我们可以通过修改这一值,来改变立方体的大小。这个值我们可以叫做参数。这也就是参数化对象名称的由来。 需要注意的是,基本对象通过参数修改的只是基于基本对象外形,例如立方体对象不管怎么修改值,始终还是立方体。 6、接下来我们就来看看可编辑对象。所谓可编辑对象是通过命令,把基本对象转化成可以修改基本形态的对象。在选中立方体的状态下点一下模式栏最上方“转化为可编辑对象”按钮,此时立方体就变成了可编辑象。 一旦基本对象被转化为可编辑对象后,就不能再转为基本对象了,也就是此操作是不可逆的。所以基本对象在被转化为可编辑对象前一定保证所有基本对象参数已调节完成。 当基本对象转化为可编辑对象后会失去原来的参数,而同时会得到“点”,“线”,“面”三种新的操作。 7、如果要进行“点”,“线”,“面”操作,我们必须要把模式改为对应的模式。可以点击模式栏“点”模式,“线”模式,“面”模式。如果要对“点”进行操作,首先切换为“点”模式。

netflow安装过程

Netflow安装步骤 一、安装linux 操作系统,安装是要把apche(www服务器)组件和development tools(编译安装工具)选上 二、部署flow-statcgi Flow-statcgi是一个基于flow-tools的browse/server结构(cgi)的NetFlow数据分析工具。 2.1cisco设备的设置 cisco设备的NetFlow支持,首先要培植cisco设备,使之产生NetFlow数据,输出到服务器的2055端口上。 2.2安装flow-tools 0.56 使用flow-tools来接收NetFlow数据,并保存成文件。 为了顺利编译flow-statcgi,要将flow-tools的源文件解压缩到/root下: 1.将flow-tools-0.56.tar.gz复制到服务器的/root目录下。 2.cd /root ; tar zxvf flow-tools-0.56.tar.gz ; cd flow-tools-0.56(这是三个命令用一行执行) 3../configure 4.make 5.make install 2.3安装apache server 使用apache server来做http服务器。 由于各apache server的配置不一样,在flow-statcgi中假设cgi-bin目录为/var/www/cgi-bin,www目录为/var/www/html。如果有变动,需要修改flow-statcgi.c中的“DEBUGFILENAME”、make_flow_cgi.sh中的“/var/www/cgi-bin/” 三、编译和安装flow-statcgi 3.1预处理 1.将flow-statcgi.c复制到/root/flow-tool-0.56/src/,将flow-statcgi.temple.html复制到/var/www/cgi-bin/(cgi所在目录),将flow-statcgi.log.html复制到 /var/www/html/(html所在目录),注意要在这里把flow-statcgi.log.html的属性 加个可写属性。 2.修改flow-statcgi.c中的“DEBUGFILENAME”(要改成html文件所在的位置)、“DataDir”(要改成flow-tool数据所在目录) 3.修改flow-statcgi.c中的“isip”部分,同时修改“ISIPCOUNT ”、“isipdesc”,“isip”。 详细说明见《Flow-statcgi使用说明》中的“预定义条件”。 3.2编译、安装 把make_flow_cgi.sh这个文件拷贝到/root目录下,修改make_flow_cgi.sh中的“/var/www/cgi-bin”为cgi所在目录。执行一下命令进行编译、安装“sh make_flow_cgi.sh flow-statcgi”,这样会在cgi目录下面生成一个flow-statcgi的cgi文件。其中编译之后会出现警告信息,可以忽略不管。 四、运行flow-tools 1.把startflowreceive.sh和starflowcapture.sh这两个shell命令文件拷到/root目录下2.执行“sh startflowreceive.sh”命令 3.执行“sh startflowcapture.sh”命令

libpcap学习笔记

struct pcap_pkthdr { struct timeval ts; /* time stamp */时间戳 bpf_u_int32 caplen; /* length of portion present */在线抓到包的长度,无符号整形bpf_u_int32 len; /* length this packet (off wire) */离线包长度 }; pcap_pkthdr是.pcap文件中包的头部 1.入门使用篇 本篇讲述如何抓包 最简单的libpcap抓包程序只要有以下几句就可以了 char ebuf[PCAP_ERRBUF_SIZE]; pcap_t *pd = pcap_open_live("eth0", 68, 0, 1000, ebuf); 建立libpcap捕捉句柄,若出错,ebuf返回错误字串.ebuf可以为NULL(以后同) struct bpf_program fcode; pcap_compile(pd, &fcode, NULL, 1, 0); 添写过滤规则串fcode,可以为空(即第三个参数,格式在后面讲到) pcap_setfilter(pd, &fcode); 给 pd 设置上过滤规则 pcap_loop(pd, 10, eth_printer, NULL); 主循环,开始抓包,共抓10个(由第二个参数指定),抓到包后就进入函数 eth_printer pcap_close(pd); 结束 这个就是最简单的程序了,其中还有个不明, 在pcap_loop参数 eth_printer的类型是pcap_handler,pcap_handler定义如下:

第1讲: CINEMA 4D的基础操作

第1讲: CINEMA 4D的基础操作 中国.太原任老师 一、CINEMA 4D的概述 CINEMA 4D简称为C4D,翻译为4D电影。它是一款由德国MAXON公司出品的三维软件。从其前身FastRay 于1993年正式更名CINEMA 4D 1.0起至今已有25年历史。 CINEMA 4D有着强大的功能和扩展性,但操作却极为简易,一直是国外视频设计领域的主流软件。随着功能的不断加强和更新,CINEMA 4D的应用范围也越来越广,包括影视制作、平面设计、建筑包装和创意图形等多个行业。在我国CINEMA 4D更多应用于平面设计和影视后期包装这两个领域。 近年来,CINEMA 4D已经成为了设计行业里的主流软件之一,越来越多的设计师进入到CINEMA 4D的世界,为行业带来了更多不同风格的作品。 CINEMA 4D最初应用于工业建模、广告和栏目包装,后来扩展到影视特效和建筑设计,在国内则更多的应用于工业建模、平面设计、广告和栏目包装。虽然在建筑设计上也有用CINEMA 4D的,但相对于强大的3ds Max还是少数。 C4D R20虽然很多插件都还不兼容这个新版本,但C4D是可以同时多个版本并存的哦!你可以在安装了R19的基础上,再正常安装一个R20,来感受一下R20新功能带来的更高效和更强大的工作体验。 二、CINEMA 4D的操作界面 CINEMA 4D的操作界面分为10部分,分别是“菜单栏”“工具栏”“模式工具栏”“视图面板”“对象面板”“属性面板”“时间线”“材质面板”“坐标面板”和“界面”。

“撤销”工具用于撤销之前一步的操作,快捷键为Ctrl+Z。“重做”工具Ctrl+Y 用于进行重做。 “框选”工具是选择工具中的一种,长按该按钮不放,会在下拉菜单中显示其他选择方式。 CINEMA 4D提供了两种坐标系统,一种是“对象”相对坐标系统,另一种是“全局”绝对坐标系统。

基于NetFlow的网络流量采集技术和应用

第31卷 第23期 2009年12月武 汉 理 工 大 学 学 报JOURNA L OF WUHAN UNIVERSIT Y OF TECHN OLOG Y Vol.31 No.23 Dec.2009DOI :10.3963/j.issn.167124431.2009.23.037 基于N etFlow 的网络流量采集技术和应用 孟晓蓓 (武汉大学计算机中心,武汉430072) 摘 要: 针对计算机网络状况监控领域的实际需要,提出了基于Net Flow 的流量采集技术。相比其它的流量采集工具,Net Flow 的流量采集技术具有配置方便,费用低,占用资源小的优点。分析了Net Flow 交换技术采集网络流量信息的实现原理。并从计算机网络的网络层和传输层2个方面,讨论了Net Flow 网络流量采集技术在网络信息安全方面的相关应用。 关键词: 流量采集; Net Flow ; 网络攻击 中图分类号: TP 393.06文献标识码: A 文章编号:167124431(2009)2320155204 N et work Flux Collection T echnique B ase on N etFlow and Its Application M EN G Xiao 2bei (Computer Center ,Wuhan University ,Wuhan 430072,China ) Abstract : This paper proposes the network flux collection technique based on net flow according to practical requirements in the field of monitoring the status of computer https://www.360docs.net/doc/ce10767399.html,pared to other flux collection tools ,Net Flow has advantages of con 2venient configuration ,low cost and small occupied resources.This paper analyses the principle of realization of Net Flow ex 2change technique collecting network flux information.Then both from the network layer and transport layer ,the paper discuss 2es some relevant applications of Net Flow network flux collection technique using in network information security areas. K ey w ords : flux collection ; Net Flow ; network attack 收稿日期:2009207209. 作者简介:孟晓蓓(19572),女,高级实验师.E 2mail :meng1025@https://www.360docs.net/doc/ce10767399.html, 随着Internet 和Intranet 的发展,网络用户、接入设备日益增长,对计算机网络的安全运行产生了压力。因此,计算机网络状况的实时监控的工作,显得十分必要。计算机网络状况的实时监控的一个重要环节,就是网络上的数据流量进行统计和分析。由于各种各样的应用对网络带宽的需求越来越高,传统的网络流量统计和数据采集方式开销大、对数据传输延时的影响大,已经不能满足现在的需求,因此,需要一种新的流量统计技术来适应现在的网络环境。Net Flow 技术正是这样的能适应新环境的流量采集方法。 1 网络流量采集的特点和方法 理想的数据采集方式应该具备以下一些特点[1]: 1)不影响数据流转发的速度 在整个数据流的采集过程中,不能有明显影响数据流转发速度的状况发生。如果在数据采集的过程中,数据流转发的速度明显下降,不能真实地反映网络流量状况,这违背数据采集的根本目的。 2)占用资源小 对数据流进行采集的过程中,可能需要在路由器(交换机)中进行流量统计,并且储存所

Openflow Switch 测试方法学

Contents 1. Test case 1:测试Openflow 交换机的流表容量 (1) 2. Test case 2:测试Openflow 交换机的流表学习速率 (5) 3. Test case 3:测试Openflow 交换机的吞吐量,时延,抖动和丢包率 (12) 4. Test case 4:测试Openflow 交换机的流表震荡 (14) 1.Test case 1:测试Openflow交换机的流表容量 ?测试目的:测试Openflow交换机最多能支持的流表数量 ?测试拓扑: ?预配置(请注意,预配置部分是写本文需要,在OpenvSwitch上所做的配置。读者在用OVS做实验时候可参考此配置,实际测试则不需要进行此部分) 设置br1 的flow table 0 表项容量为100 Step 1:在OVS 的ovsdb中,在Bridge 表中,把br1 条目的flow_tables列中关联br1 的 flow_table 0, 并且在Flow_Table表中创建一行。 ovs-vsctl set Bridge br1 flow_tables:0=@table0 -- --id=@table0 create Flow_Table name=table0 查看Bridge表和Flow_Table表: [root@localhostmrzhao]# ovs-vsctl list bridge _uuid : c5601237-6574-465b-843f-ac52c61d5bad

Controller : [bca3710d-1280-44eb-8436-20bbe5c8161c] datapath_id : "0000000c2992086a" datapath_type : "" external_ids : {} fail_mode : [] flood_vlans : [] flow_tables : {0=bebe5b02-6216-4a8a-af5d-27f1dde2bf48} ipfix : [] mirrors : [] name : "br1" netflow : [] other_config : {} ports : [358480c2-0709-476d-8446-3020584454d0, 4f1a7238-d611-4345-8b06-83a62d414952, 5dd30471-07c4-4eac-90a1-0cf7d96e7b07, a4c3be4c-bda5-4686-af08-4e59d51040bd, eaf6eb05-0d95-4775-9abb-1b139469a9b9] protocols : [] sflow : [] status : {} stp_enable : false [root@localhostmrzhao]# ovs-vsctl list Flow_table _uuid : bebe5b02-6216-4a8a-af5d-27f1dde2bf48 external_ids : {} flow_limit : [] groups : [] name : "table0" overflow_policy : [] prefixes : [] Step 2:设置br1 的table0 的流表大小是100条流表项 ovs-vsctl set Flow_Table table0 flow_limit=100 查看流表项设置:

Winpcap学习笔记

说明:本系列文章是我阅读winpcap手册后整理的一个学习笔记。文章中出现的所有代码是我根据winpcap手册中的示例代码进行了学习,并调试通过,其中对部分代码作了修改,关于代码的版权我尊重winpcap手册中的版权说明,如果你使用了本系列文章中的代码而引起任何的版权或造成安全威胁等问题,我将不负任何责任。 下载好了WpdPack_3_2_alpha1.zip(下载地址:https://www.360docs.net/doc/ce10767399.html,/install/bin/WpdPack_3_2_alpha1.zip),解压后除了有文档,例子外还有Include和lib,于是想用TC2来做开发环境,但是编译的时候老是出问题,于是放弃。后来阅读了Winpcap手册后才知道因为是在windows上开发,所以它推荐用VC++6.0,于是改用VC。 第一个试验是: #include #include int main() { pcap_if_t *alldevs; pcap_if_t *d; int i = 0; char errbuf[PCAP_ERRBUF_SIZE]; /* Retrieve the device list from the local machine*/ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1) { printf("Error in pcap_findalldevs_ex: %s\n", errbuf); exit(1); } /* Print the list */ for (d = alldevs; d != NULL; d = d->next) { /* Print the device’s name */ printf("%d. %s", ++ i, d->name); /* Print the device’s dscription */ if (d->description) { printf("(%s)\n", d->description); } else { printf("(No description available)\n");

Netflow网络流量分析手册

Netflow网络流量 分析手册 作者:聂晓亮(毛蛋哥)

目录 一、作者简介 (4) 二、为什么会有这本书 (5) 三、流量分析原理 (6) (一)原始流量分析方式 (6) (二)Netflow分析方式 (6) 四、流量采样 (8) (一)在网络设备上开启Netflow功能 (8) (二)网络设备不支持Netflow (9) 1.部署方式 (9) 2.安装Fprobe (11) 3.启动Fprobe (11) 4.镜像流量至Fprobe服务器 (12) 5.检测是否收到Netflow数据 (12) 五、部署服务器 (13) (一)硬件需求 (13) (二)安装FreeBSD (13) (三)安装Nfsen (14) 1.安装apache22 (14) 2.安装php5 (14) 3.安装nfsen (15) (四)安装PortTracker (15)

(五)访问Nfsen (16) 六、抓贼攻略 (18) (一)了解网络运行状况 (18) (二)什么协议吞了带宽 (22) (三)抓出罪魁祸首 (25) 七、感谢 (30)

一、作者简介 本书作者聂晓亮,网名毛蛋哥。2004 年毕业于北京联合大学信息工程学院,热 爱网络相关知识及摄影,机缘巧合参加了 Cisco认证培训,并获得了一些成绩。本 书写于2008年10月,作者目前状态工 作较为舒适,故有空闲时间完成此书。 聂晓亮(毛蛋哥)拥有自己的Blog及Wiki空间,其中记录了作者的工作、生活、学习。作者希望通过此书以及Blog、Wiki同全世界的网络爱好者分享其知识与快乐。 聂晓亮(毛蛋哥)的Blog:https://www.360docs.net/doc/ce10767399.html, 聂晓亮(毛蛋哥)的Wiki:https://www.360docs.net/doc/ce10767399.html, 欢迎交流:pharaohnie@https://www.360docs.net/doc/ce10767399.html,

NetFlow学习笔记

NetFlow是一种数据交换方式。Netflow提供网络流量的会话级视图,记录下每个TCP/IP事务的信息。也许它不能象tcpdump那样提供网络流量的完整记录,但是当汇集起来时,它更加易于管理和易读。Netflow由Cisco创造。 工作原理:NetFlow利用标准的交换模式处理数据流的第一个IP包数据,生成NetFlow缓存,随后同样的数据基于缓存信息在同一个数据流中进行传输,不再匹配相关的访问控制等策略,NetFlow缓存同时包含了随后数据流的统计信息。NetFlow有两个核心的组件:NetFlow缓存,存储IP流信息;NetFlow的数据导出或传输机制,NetFlow利用此机制将数据发送到网络管理采集器。 概念:一个NetFlow流定义为在一个源IP地址和目的IP地址间传输的单向数据包流,且所有数据包具有共同的传输层源、目的端口号。 确定Flow的标识:SIP+DIP+SPORT+DPORT +Layer 3 protocol type + TOS byte() + Router or switch interface 数据采集格式 NFC(Cisco NetFlow Collector) 可以定制多种NetFlow数据采集格式,下例为NFC2.0采集的一种流量数据实例,本文的分析都基于这种格式。 61.*.*.68|61.*.*.195|64917|Others|9|13|4528|135|6|4|192|1 数据中各字段的含义如下: 源地址|目的地址|源自治域|目的自治域|流入接口号|流出接口号|源端口|目的端口|协议 类型|包数量|字节数|流数量 cache缓存空间

NETFLOW技术介绍

1. 流量流向监测技术 1.1 概述 传统的网络流量监测技术的局限性 SNMP采集端口的数据主要是在网元层用来监控网络流量和设备的性能,而且SNMP采集的数据是基于端口的,无法提供端到端的准确的流量信息,因此对流向的统计手段不明确。 利用RMON探针对运营商网络进行流量和流向管理可以部分弥补SNMP的技术局限性,其业务分析和协议分析功能较强。但是,采用RMON探针建设的流量监测系统也有处理性能不足和难以在大型网络普遍部署的局限性。 提出新的流量监测技术 为克服现有网管系统对网络流量和流向分析功能的技术局限性,运营商迫切需要寻找一种功能丰富、成熟稳定的新技术,对现有管理系统中流量信息的采集和分析方式进行改造和升级。新的流量信息采集和分析技术应具备对运营商的运行网络影响小、无需对网络拓扑进行改变就能平滑升级的技术特征,既可以对网络中各个链路的带宽使用率进行统计,又可以对每条链路上不同类型业务的流量和流向进行分析和统计。 本文主要介绍应用广泛的Cisco NetFlow技术、华为Netstream技术、Sflow 、Cflowd 和IPFIX 以及支持上述流监测技术的厂家和设备情况。 1.2 相关厂家及设备

2Netflow 2.1 流原理 netflow 的信息单元是flow。flow是一个单向的带有唯一标识字节组的传输流。基本的标识为:source-IP-address, source-port, destination-IP-address, destination-port, IP-protocol, TOS, input interface ID。当路由器接收到一个没有flow入口的数据包时,一个flow的结构将被初始化以保存其状态信息如:交换的字节数、IP地址、端口、自治区域等。随后所有满足这个flow结构的数据包都将增加flow结构的字节计数和包计数,直至这个flow中止并输出。 Netflow功能是在一个路由器内独立完成,它不涉及路由器之间的任何连接设置协议,也不要求对数据包本身或其它任何网络设备进行任何外部修改。Netflow交换中要创建一个信息高速缓存,第一个数据包到来时,路由器利用标准的快速交换处理信息包,同时生成一个Netflow高速缓存,随后到来的数据包即可以依据高速缓存信息被交换,对于所有活动信息流,在Netflow高速缓存中保留相应的信息流信息。当一定时间内没有相应的数据包通过,则结束这个数据流的交换和统计,并释放高速缓存,数据输出的条件在后续部分描述。 在netflow中到期的flow被绑在UDP数据报中发出。在V5的版本中最多30个flow记录,V1中25个记录,V8中28个记录。至少每秒钟发一次flow。

SDU计算机网络课程设计实验指导

计算机网络课程设计课程项目指导 计算机学院 2011.9

目录 实验前自我检查(划勾或填写)2011-03-24 我使用的虚拟机:vmware( ) virtulabox( ) 其他(______)无() 我安装的Windows:XP( )2003( )2008( )vista( )win7()其他(_____)无( ) 我安装的Linux:Ubuntu( )Debian( )Redhat( )CentOS( )其他(_____)无( ) 我的虚拟机目录有多大(G):Windows( )Linux( ) 实验1 网上调研:主流网络技术和设备的性能与市场

1.实验目的 熟悉当前各个领域中使用的主流网络技术和设备,了解近期网络技术和市场的发展方向。 2.实验内容 (1)通过查询网络,了解当前如下领域:(1)家庭用户(2)企业桌面(3)校园网(4)企业网(5)互联网骨干网等领域使用的网络技术和参数,包括(1)线路形式(2)带宽(3)接入方式(4)费用(5)设备类型和型号(6)典型性能指标(7)服务器配置(8)典型服务和应用等。 (2)了解主要的网络技术、设备提供商、产品特色、典型产品举例等。 (3)尝试了解专用网络(比如银行、证券、政府等)使用的网路技术和安全手段。 3.实验指导 首先,通过网络查询了解当前主要的网络技术的进展,比如以太网的进展,40G/100G的标准已有,但是10G以太网卡价格还在万元以上。 其次,通过查询主要网络技术厂商的资料,可以看到未来一段时间的技术发展方向。 再次,可以了解一下某些大学校园、大型行业/企业/城域网,以及网络运营商使用的技术和设备状况,也能够帮助了解网络技术的发展和应用现状。 从探索身边的网络做起。可以使用tracert、telnet等工具尝试发现自己的机器是如何连接到网络的。比如用traceroute发现到https://www.360docs.net/doc/ce10767399.html,.经过某路由器的IP 202.194.0.42,用telnet连接提示显示MX960-1-re0,查询网络得知该MX960是一款Juniper产的以太网业务边缘路由器,从厂商的可以进一步了解到其主打产品、性能、特色、适用场合等描述。

相关文档
最新文档