文档库 最新最全的文档下载
当前位置:文档库 › CycloneTCP协议栈移植与使用简介

CycloneTCP协议栈移植与使用简介

Arda Technology

Arda Tech P.F.FU 2014-12-19 Ver 0.1

#elif defined(USE_XXXXXX)

#include "os_port_xxxxxx.h"

NicType type;//控制器类型。0:以太网接口,1:PPP接口,2:6LowPan接口

NicInit init;//控制器初始化函数指针

NicTick tick;//控制器周期性事务处理函数指针

NicEnableIrq enableIrq;//打开控制器中断函数指针

NicDisableIrq disableIrq;//关闭控制器中断函数指针

NicEventHandler eventHandler;//控制器中断响应函数指针,这个是下半段的中断处理部分。

NicSetMacFilter setMacFilter;//配置多播MAC地址过滤函数指针

NicSendPacket sendPacket;//发送包函数指针

NicWritePhyReg writePhyReg;//写PHY寄存器函数指针

NicReadPhyReg readPhyReg;//读PHY寄存器函数指针

bool_t autoPadding;//是否支持自动填充

bool_t autoCrcGen;//是否支持自动生成CRC校验码

bool_t autoCrcCheck;//是否支持自动检查CRC错误

NicSendControlFrame sendControlFrame;//发送控制帧函数指针

NicReceiveControlFrame receiveControlFrame;//接收控制帧函数指针

NicPurgeTxBuffer purgeTxBuffer;//清除发送缓冲函数指针

NicPurgeRxBuffer purgeRxBuffer;//清除接受缓存函数指针

xxxxEthInitGpio(...)//用于在init中初始化GPIO。

xxxxEthInitDmaDesc(...)//用于在init中初始化DMA任务描述符列表。

XXXX_Handler(...)//用于MAC中断的上半段处理。

xxxxEthReceivePacket(...)//用于在eventHandler中收包,把数据从dma的缓冲复制到外部缓冲。xxxxEthCalcCrc(...)//计算CRC值,这个函数基本上是固定的。

xxxxEthDumpPhyReg(...)//用于调试的打印PHY寄存器列表值。

PhyInit init ;//物理层初始化函数指针

PhyTick tick ;//周期性事务处理函数指针 PhyEnableIrq enableIrq ;//打开物理层中断 PhyDisableIrq disableIrq ;//关闭物理层中断 PhyEventHandler eventHandler ;//物理层中断处理函数

#include"core/tcp_ip_stack.h"//必须要有的协议栈头文件

#include"drivers/tm4c129x_eth.h"//MAC驱动头文件,如果用了片外PHY,还要包含PHY的驱动头文件#include"dhcp/dhcp_client.h"//使用DHCP的话需要此头文件

#include"ipv6/slaac.h"//使用IPV6本地短地址的话需要此头文件

#include"common/debug.h"//如果你用了CycloneTCP的调试输出函数,则需要包含此头文件

//Application configuration

#define APP_MAC_ADDR"00-11-22-33-44-55"//定义MAC地址

#define APP_USE_DHCP ENABLED//DHCP开关,使用DHCP

#define APP_IPV4_HOST_ADDR"192.168.1.20"//静态地址时的IPV4 IP

#define APP_IPV4_SUBNET_MASK"255.255.255.0"//静态地址时的IPV4 子网掩码

#define APP_IPV4_DEFAULT_GATEWAY"192.168.1.1"//静态地址时的IPV4 网关IP

#define APP_IPV4_PRIMARY_DNS"8.8.8.8"//静态地址时的IPV4 主DNS IP

#define APP_IPV4_SECONDARY_DNS"8.8.4.4"//静态地址时的IPV4 从DNS IP

#define APP_USE_SLAAC DISABLED//SLAAC开关,禁用SLAAC

#define APP_IPV6_LINK_LOCAL_ADDR"fe80::407"

#define APP_IPV6_PREFIX"2001:db8::"

#define APP_IPV6_PREFIX_LENGTH 64

#define APP_IPV6_GLOBAL_ADDR"2001:db8::407"

#define APP_IPV6_ROUTER"fe80::1"

#define APP_IPV6_PRIMARY_DNS"2001:4860:4860::8888"

#define APP_IPV6_SECONDARY_DNS"2001:4860:4860::8844"

//Constant definitions

#define APP_SERVER_NAME"https://www.wendangku.net/doc/089608543.html,"//应用层访问的地址

#define APP_SERVER_PORT 80//应用层访问的端口

#define APP_REQUEST_URI"/test.php"//应用层访问的远端文件路径

DhcpClientSettings dhcpClientSettings;//DHCP客户端配置DhcpClientCtx dhcpClientContext;//DHCP客户端上下文,运行时变量SlaacSettings slaacSettings;//短地址配置

SlaacContext slaacContext;//短地址上下文,运行时变量

error_t error;

NetInterface *interface;//网络接口结构指针

MacAddr macAddr;//MAC地址变量

#if (APP_USE_DHCP == DISABLED)

Ipv4Addr ipv4Addr;//IPV4地址变量

#endif

#if (APP_USE_SLAAC == DISABLED)

Ipv6Addr ipv6Addr;//IPV6地址变量

#endif

//Start-up message

TRACE_INFO("\r\n");

TRACE_INFO("***********************************\r\n");

TRACE_INFO("*** CycloneTCP HTTP Client Demo ***\r\n");

TRACE_INFO("***********************************\r\n");

TRACE_INFO("Copyright: 2010-2014 Oryx Embedded\r\n");

TRACE_INFO("Compiled: %s %s\r\n", __DATE__, __TIME__);

TRACE_INFO("Target: EK-TM4C1294XL\r\n");

TRACE_INFO("\r\n");

printf("HTTP Client Demo");

//TCP/IP stack initialization 初始化协议栈

error =tcpIpStackInit();

//Any error to report?

if(error)

{

//Debug message

TRACE_ERROR("Failed to initialize TCP/IP stack!\r\n");

}

//Configure the first Ethernet interface 配置首个网络接口

interface = &netInterface[0];

//Set interface name 设定网络接口名称

tcpIpStackSetInterfaceName(interface,"eth0");

//Set host name 设定主机名称

tcpIpStackSetHostname(interface,"HTTPClientDemo");

//Select the relevant network adapter 设定网络适配器nic驱动

tcpIpStackSetDriver(interface, &tm4c129xEthDriver);

//Set host MAC address 设定主机MAC地址

macStringToAddr(APP_MAC_ADDR, &macAddr);

tcpIpStackSetMacAddr(interface, &macAddr);

//Initialize network interface 初始化网络接口

error =tcpIpStackConfigInterface(interface);

//Any error to report?

if(error)

{

//Debug message

TRACE_ERROR("Failed to configure interface %s!\r\n", interface->name);

}

#if (IPV4_SUPPORT == ENABLED)//当使能IPV4时

#if (APP_USE_DHCP == ENABLED)//当使用DHCP时

//Get default settings 载入默认的DHCP参数

dhcpClientGetDefaultSettings(&dhcpClientSettings);

//Set the network interface to be configured by DHCP 设定DHCP线程操作的网口 dhcpClientSettings.interface = interface;

//Disable rapid commit option 禁用快速提交

dhcpClientSettings.rapidCommit = FALSE;

//DHCP client initialization 初始化DHCP客户端

error =dhcpClientInit(&dhcpClientContext, &dhcpClientSettings);

//Failed to initialize DHCP client?

if(error)

{

//Debug message

TRACE_ERROR("Failed to initialize DHCP client!\r\n");

}

//Start DHCP client 启动DHCP客户端

error =dhcpClientStart(&dhcpClientContext);

//Failed to start DHCP client?

if(error)

{

//Debug message

TRACE_ERROR("Failed to start DHCP client!\r\n");

}

#else//如果不使用DHCP时

//Set IPv4 host address 转换并设定主机IP

ipv4StringToAddr(APP_IPV4_HOST_ADDR, &ipv4Addr);

ipv4SetHostAddr(interface, ipv4Addr);

//Set subnet mask 转换并设定网络掩码

ipv4StringToAddr(APP_IPV4_SUBNET_MASK, &ipv4Addr);

ipv4SetSubnetMask(interface, ipv4Addr);

//Set default gateway 转换并设定网关

ipv4StringToAddr(APP_IPV4_DEFAULT_GATEWAY, &ipv4Addr);

ipv4SetDefaultGateway(interface, ipv4Addr);

//Set primary and secondary DNS servers 转换并设定主从DNS

ipv4StringToAddr(APP_IPV4_PRIMARY_DNS, &ipv4Addr);

ipv4SetDnsServer(interface,0, ipv4Addr);

ipv4StringToAddr(APP_IPV4_SECONDARY_DNS, &ipv4Addr);

ipv4SetDnsServer(interface,1, ipv4Addr);

#endif

#endif

#if (IPV6_SUPPORT == ENABLED)//如果使用IPV6

#if (APP_USE_SLAAC == ENABLED)//如果使用SLAAC

//Get default settings 加载默认SLAAC参数

slaacGetDefaultSettings(&slaacSettings);

//Set the network interface to be configured 设定SLAAC使用的网络接口 slaacSettings.interface = interface;

//SLAAC initialization 初始化SLAAC

error =slaacInit(&slaacContext, &slaacSettings);

//Failed to initialize SLAAC?

if(error)

{

//Debug message

TRACE_ERROR("Failed to initialize SLAAC!\r\n");

}

//Start IPv6 address autoconfiguration process 启动IPV6地址自动获取进程 error =slaacStart(&slaacContext);

//Failed to start SLAAC process?

if(error)

{

//Debug message

TRACE_ERROR("Failed to start SLAAC!\r\n");

}

#else//不使用SLAAC时

//Set link-local address 转换并设定主机IP

ipv6StringToAddr(APP_IPV6_LINK_LOCAL_ADDR, &ipv6Addr);

ipv6SetLinkLocalAddr(interface, &ipv6Addr, IPV6_ADDR_STATE_VALID);

//Set IPv6 prefix

ipv6StringToAddr(APP_IPV6_PREFIX, &ipv6Addr);

ipv6SetPrefix(interface, &ipv6Addr, APP_IPV6_PREFIX_LENGTH);

//Set global address

ipv6StringToAddr(APP_IPV6_GLOBAL_ADDR, &ipv6Addr);

ipv6SetGlobalAddr(interface, &ipv6Addr, IPV6_ADDR_STATE_VALID);

//Set router

ipv6StringToAddr(APP_IPV6_ROUTER, &ipv6Addr);

ipv6SetRouter(interface, &ipv6Addr);

//Set primary and secondary DNS servers

ipv6StringToAddr(APP_IPV6_PRIMARY_DNS, &ipv6Addr);

ipv6SetDnsServer(interface,0, &ipv6Addr);

ipv6StringToAddr(APP_IPV6_SECONDARY_DNS, &ipv6Addr);

ipv6SetDnsServer(interface,1, &ipv6Addr);

#endif

#endif

error_t error;

size_t length;

IpAddr ipAddr;//DNS解析得到的地址

Socket *socket;//Socket套接字

static char_t buffer[256];

//Debug message

TRACE_INFO("\r\n\r\n Resolving server name...\r\n");

//Resolve HTTP server name 解析地址

error =getHostByName(NULL, APP_SERVER_NAME, &ipAddr,0);

//Any error to report?

if(error)

{

//Debug message

TRACE_INFO("Failed to resolve server name!\r\n");

//Exit immediately

return error;

}

//Create a new socket to handle the request 创建新的socket连接

socket =socketOpen(SOCKET_TYPE_STREAM, SOCKET_IP_PROTO_TCP);

//Any error to report?

if(!socket)

{

//Debug message

TRACE_INFO("Failed to open socket!\r\n");

//Exit immediately

return ERROR_OPEN_FAILED;

}

//Start of exception handling block 此处的do/while用于快速跳过错误后面的代码do

{

//Debug message

TRACE_INFO("Connecting to HTTP server %s\r\n",ipAddrToString(&ipAddr, NULL));

//Connect to the HTTP server 连接到HTTP服务器

error =socketConnect(socket, &ipAddr, APP_SERVER_PORT);

//Any error to report?

if(error)break;

//Debug message

TRACE_INFO("Successful connection\r\n");

//Format HTTP request 生成HTTP请求字符串

length =sprintf(buffer,"GET %s HTTP/1.0\r\n Host: %s:%u\r\n\r\n",

APP_REQUEST_URI, APP_SERVER_NAME, APP_SERVER_PORT);

//Debug message

TRACE_INFO("\r\n HTTP request:\r\n%s", buffer);

//Send HTTP request 发送HTTP请求

error =socketSend(socket, buffer, length, NULL,0);

//Any error to report?

if(error)break;

//Debug message

TRACE_INFO("HTTP response header:\r\n");

//Parse HTTP response header 解析HTTP服务器响应头

while(1)

{

//Read the header line by line 从socket中读取一行

error =socketReceive(socket, buffer,sizeof(buffer) -1, &length,

SOCKET_FLAG_BREAK_CRLF);

//End of stream?

if(error)break;

//Properly terminate the string with a NULL character 缓冲结尾填充0

buffer[length] ='\0';

//Dump current data

TRACE_INFO("%s", buffer);

//The end of the header has been reached? 检查是http响应头否结束

if(!strcmp(buffer,"\r\n"))

break;

}

//Debug message

TRACE_INFO("HTTP response body:\r\n");

//Parse HTTP response body 解析响应数据

while(1)

{

//Read response body 读取响应数据

error =socketReceive(socket, buffer,sizeof(buffer) -1, &length,0);

//End of stream?

if(error)break;

//Properly terminate the string with a NULL character 缓冲结尾填充0

buffer[length] ='\0';

//Dump current data

TRACE_INFO("%s", buffer);

}

//End of exception handling block

}

while(0);

//Close the connection 关闭socket链接

socketClose(socket);

//Debug message

TRACE_INFO("\r\n Connection closed...\r\n");

GPLv2RF

https://www.wendangku.net/doc/089608543.html,/

ZigBee协议栈OSAL介绍

讨论ZigBee协议栈的构成以及内部OSAL的工作机理。 ZigBee协议栈OSAL介绍 操作系统抽象层 OSAL常用术语: 1.资源(Resource):任何任务所占用的实体都叫资源,如变量、数组、结构体 2.共享资源(Shared Resource):两个或两个以上任务使用的资源,为防止破坏资源,任务在操作共享资源时是独占状态。 3.任务(Task):即线程,简单的程序的执行过程。任务设计时将问题尽可能分成多个任务,每个任务独立完成某项功能,同时赋予优先级、CPU寄存器和堆栈空间。一般一个任务设计为一个无限循环。 4.多任务运行(Muti-task Running):其实同一时刻只有一个任务运行。 5.内核(Kernel):内核负责管理各个任务。包括:分配CPU时间;任务调度;任务间的通信。 6.互斥(Mutual Exclusion):多任务通信最常用方法是共享数据结构。 保护共享资源常用的方法: 关中断; 使用测试并置位指令(T&S指令); 禁止任务切换; 使用信号量; 7.消息队列(Message Queue):用于任务间传递消息。 OSAL提供如下功能: 任务注册、初始化和启动; 任务间的同步、互斥; 中断处理; 储存器分配和管理; OSAL运行机理: OSAL就是一种支持多任务运行的系统资源分配机制。 OSAL是一种基于事件驱动的轮询式操作系统。、 void osal_start_system(void)是ZigBee协议栈的灵魂,不断的查看事件列表,如果有事件发生就调用相应的事件处理函数。 SYS_EVENT_MSG是一个事件集合,是由协议栈定义的事件,即系统强制事件(Mandatory Events),它的定义为: #define SYS_EVENT_MSG 0x8000; 它包含如下事件: AF_INCOMING_MSG_CMD 收到一个新的无线数据

CycloneTCP协议栈移植与使用简介

Arda Technology Arda Tech P.F.FU 2014-12-19 Ver 0.1 #elif defined(USE_XXXXXX) #include "os_port_xxxxxx.h"

NicType type;//控制器类型。0:以太网接口,1:PPP接口,2:6LowPan接口 NicInit init;//控制器初始化函数指针 NicTick tick;//控制器周期性事务处理函数指针 NicEnableIrq enableIrq;//打开控制器中断函数指针 NicDisableIrq disableIrq;//关闭控制器中断函数指针 NicEventHandler eventHandler;//控制器中断响应函数指针,这个是下半段的中断处理部分。 NicSetMacFilter setMacFilter;//配置多播MAC地址过滤函数指针 NicSendPacket sendPacket;//发送包函数指针 NicWritePhyReg writePhyReg;//写PHY寄存器函数指针 NicReadPhyReg readPhyReg;//读PHY寄存器函数指针 bool_t autoPadding;//是否支持自动填充 bool_t autoCrcGen;//是否支持自动生成CRC校验码 bool_t autoCrcCheck;//是否支持自动检查CRC错误 NicSendControlFrame sendControlFrame;//发送控制帧函数指针 NicReceiveControlFrame receiveControlFrame;//接收控制帧函数指针 NicPurgeTxBuffer purgeTxBuffer;//清除发送缓冲函数指针 NicPurgeRxBuffer purgeRxBuffer;//清除接受缓存函数指针 xxxxEthInitGpio(...)//用于在init中初始化GPIO。 xxxxEthInitDmaDesc(...)//用于在init中初始化DMA任务描述符列表。 XXXX_Handler(...)//用于MAC中断的上半段处理。 xxxxEthReceivePacket(...)//用于在eventHandler中收包,把数据从dma的缓冲复制到外部缓冲。xxxxEthCalcCrc(...)//计算CRC值,这个函数基本上是固定的。 xxxxEthDumpPhyReg(...)//用于调试的打印PHY寄存器列表值。

2020年Zigbee协议栈中文说明免费

1.概述 1.1解析ZigBee堆栈架构 ZigBee堆栈是在IEEE 802.15.4标准基础上建立的,定义了协议的MAC和PHY层。ZigBee设备应该包括IEEE802.15.4(该标准定义了RF射频以及与相邻设备之间的通信)的PHY和MAC层,以及ZigBee堆栈层:网络层(NWK)、应用层和安全服务提供层。图1-1给出了这些组件的概况。 1.1.1ZigBee堆栈层 每个ZigBee设备都与一个特定模板有关,可能是公共模板或私有模板。这些模板定义了设备的应用环境、设备类型以及用于设备间通信的簇。公共模板可以确保不同供应商的设备在相同应用领域中的互操作性。 设备是由模板定义的,并以应用对象(Application Objects)的形式实现(见图1-1)。每个应用对象通过一个端点连接到ZigBee堆栈的余下部分,它们都是器件中可寻址的组件。 图1-1 zigbe堆栈框架 从应用角度看,通信的本质就是端点到端点的连接(例如,一个带开关组件的设备与带一个或多个灯组件的远端设备进行通信,目的是将这些灯点亮)。 端点之间的通信是通过称之为簇的数据结构实现的。这些簇是应用对象之间共享信息所需的全部属性的容器,在特殊应用中使用的簇在模板中有定义。图1-1-2就是设备及其接口的一个例子:

图1-1-2 每个接口都能接收(用于输入)或发送(用于输出)簇格式的数据。一共有二个特殊的端点,即端点0和端点255。端点0用于整个ZigBee设备的配置和管理。应用程序可以通过端点0与ZigBee 堆栈的其它层通信,从而实现对这些层的初始化和配置。附属在端点0的对象被称为ZigBee设备对象 (ZD0)。端点255用于向所有端点的广播。端点241到254是保留端点。 所有端点都使用应用支持子层(APS)提供的服务。APS通过网络层和安全服务提供层与端点相接,并为数据传送、安全和绑定提供服务,因此能够适配不同但兼容的设备,比如带灯的开关。APS使用网络层(NWK)提供的服务。NWK负责设备到设备的通信,并负责网络中设备初始化所包含的活动、消息路由和网络发现。应用层可以通过ZigBee设备对象(ZD0)对网络层参数进行配置和访问。 1.1.2 80 2.15.4 MAC层 IEEE 802.15.4标准为低速率无线个人域网(LR-WPAN)定义了OSI模型开始的两层。PHY层定义了无线射频应该具备的特征,它支持二种不同的射频信号,分别位于2450MHz波段和868/915MHz 波段。2450MHz波段射频可以提供250kbps的数据速率和16个不同的信道。868 /915MHz波段中,868MHz支持1个数据速率为20kbps的信道,915MHz支持10个数据速率为40kbps的信道。MAC层负责相邻设备间的单跳数据通信。它负责建立与网络的同步,支持关联和去关联以及MAC 层安全:它能提供二个设备之间的可靠链接。 1.1.3 关于服务接入点 ZigBee堆栈的不同层与802.15.4 MAC通过服务接入点(SAP)进行通信。SAP是某一特定层提供的服务与上层之间的接口。 ZigBee堆栈的大多数层有两个接口:数据实体接口和管理实体接口。数据实体接口的目标是向上层提供所需的常规数据服务。管理实体接口的目标是向上层提供访问内部层参数、配置和管理数据的机制。 1.1.4 ZigBee的安全性 安全机制由安全服务提供层提供。然而值得注意的是,系统的整体安全性是在模板级定义的,这意味着模板应该定义某一特定网络中应该实现何种类型的安全。 每一层(MAC、网络或应用层)都能被保护,为了降低存储要求,它们可以分享安全钥匙。SSP是通过ZD0进行初始化和配置的,要求实现高级加密标准(AES)。ZigBee规范定义了信任中心的用

Zigbee协议栈原理基础

1Zigbee协议栈相关概念 1.1近距离通信技术比较: 近距离无线通信技术有wifi、蓝牙、红外、zigbee,在无线传感网络中需求的网络通信恰是近距离需求的,故,四者均可用做无线传感网络的通信技术。而,其中(1)红外(infrared):能够包含的信息过少;频率低波衍射性不好只能视距通信;要求位置固定;点对点传输无法组网。(2)蓝牙(bluetooth):可移动,手机支持;通信距离10m;芯片价格贵;高功耗(3)wifi:高带宽;覆盖半径100m;高功耗;不能自组网;(4)zigbee:价格便宜;低功耗;自组网规模大。?????WSN中zigbee通信技术是最佳方案,但它连接公网需要有专门的网关转换→进一步学习stm32。 1.2协议栈 协议栈是网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。 1.2.1Zigbee协议规范与zigbee协议栈 Zigbee各层协议中物理层(phy)、介质控制层(mac)规范由IEEE802.15.4规定,网络层(NWK)、应用层(apl)规范由zigbee联盟推出。Zigbee联盟推出的整套zigbee规范:2005年第一版ZigBeeSpecificationV1.0,zigbee2006,zigbee2007、zigbeepro zigbee协议栈:很多公司都有自主研发的协议栈,如TI公司的:RemoTI,Z-Stack,SimpliciTI、freakz、msstatePAN 等。 1.2.2z-stack协议栈与zigbee协议栈 z-stack协议栈与zigbee协议栈的关系:z-stack是zigbee协议栈的一种具体实现,或者说是TI公司读懂了zigbee 协议栈,自己用C语言编写了一个软件—---z-stack,是由全球几千名工程师共同开发的。ZStack-CC2530-2.3.1-1.4.0软件可与TI的SmartRF05平台协同工作,该平台包括MSP430超低功耗微控制器(MCU)、CC2520RF收发器以及CC2591距离扩展器,通信连接距离可达数公里。 Z-Stack中的很多关键的代码是以库文件的形式给出来,也就是我们只能用它们,而看不到它们的具体的实现。其中核心部分的代码都是编译好的,以库文件的形式给出的,比如安全模块,路由模块,和Mesh自组网模块。与z-stack 相比msstatePAN、freakz协议栈都是全部真正的开源的,它们的所有源代码我们都可以看到。但是由于它们没有大的商业公司的支持,开发升级方面,性能方面和z-stack相比差距很大,并没有实现商业应用,只是作为学术研究而已。 还可以配备TI的一个标准兼容或专有的网络协议栈(RemoTI,Z-Stack,或SimpliciTI)来简化开发,当网络节点要求不多在30个以内,通信距离500m-1000m时用simpliciti。 1.2.3IEEE802.15.4标准概述 IEEE802.15.4是一个低速率无线个人局域网(LowRateWirelessPersonalAreaNetworks,LR-WPAN)标准。定义了物理层(PHY)和介质访问控制层(MAC)。 LR-WPAN网络具有如下特点: ◆实现250kb/s,40kb/s,20kb/s三种传输速率。 ◆支持星型或者点对点两种网络拓扑结构。 ◆具有16位短地址或者64位扩展地址。 ◆支持冲突避免载波多路侦听技术(carriersensemultipleaccesswithcollisionavoidance,CSMA/CA)。(mac层) ◆用于可靠传输的全应答协议。(RTS-CTS) ◆低功耗。 ◆能量检测(EnergyDetection,ED)。 ◆链路质量指示(LinkQualityIndication,LQI)。 ◆在2.45GHz频带内定义了16个通道;在915MHz频带内定义了10个通道;在868MHz频带内定义了1个通道。 为了使供应商能够提供最低可能功耗的设备,IEEE(InstituteofElectricalandElectronicsEngineers,电气及电子工程师学会)定义了两种不同类型的设备:一种是完整功能设备(full.functionaldevice,FFD),另一种是简化功能设备

TCPIP协议栈实践报告

《专业综合实践》 训练项目报告训练项目名称:TCP/IP协议栈

1.IP协议 IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制--这被认为是上层协议--TCP或UDP要做的事情。所以这也就出现了TCP是一个可靠的协议,而UDP就没有那么可靠的区别。这是后话,暂且不提 1.1.IP协议头如图所示

挨个解释它是教科书的活计,我感兴趣的只是那八位的TTL字段,还记得这个字段是做什么的么?这个字段规定该数据包在穿过多少个路由之后才会被抛弃(这里就体现出来IP协议包的不可靠性,它不保证数据被送达),某个ip数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同,这个数字也不一样,一般是32或者是64,Tracerouter这个工具就是用这个原理工作的,tranceroute 的-m选项要求最大值是255,也就是因为这个TTL在IP协议里面只有8bit。 现在的ip版本号是4,所以也称作IPv4。现在还有IPv6,而且运用也越来越广泛了。 1.2.IP路由选择 当一个IP数据包准备好了的时候,IP数据包(或者说是路由器)是如何将数据包送到目的地的呢?它是怎么选择一个合适的路径来"送货"的呢? 最特殊的情况是目的主机和主机直连,那么主机根本不用寻找路由,直接把数据传递过去就可以了。至于是怎么直接传递的,这就要靠ARP协议了,后面会讲到。 稍微一般一点的情况是,主机通过若干个路由器(router)和目的主机连接。那么路由器就要通过ip包的信息来为ip包寻找到一个合适的目标来进行传递,比如合适的主机,或者合适的路由。路由器或者主机将会用如下的方式来处理某一个IP数据包 如果IP数据包的TTL(生命周期)以到,则该IP数据包就被抛弃。 搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标

7号信令协议栈

SS7信令系统协议简介 SS7信令协议栈,MTP1,MTP2,MTP3,SCCP,TCAP,ISUP,TUP 3.1 SS7信令协议栈 协议是通过网络传送数据的规则集合。 协议栈也就是协议的分层结构,协议分层的目的是为了使各层相对独立,或使各层具有不同的职能。SS7协议一开始就是按分层结构的思想设计的,但SS7协议 在开始发展时,主要是考虑在数字电话网和采用电路交换方式的数据通信网中传送各种与电路有关的信息,所以CCITT在80年代提出的SS7技术规范黄皮书 中对SS7协议的分层方法没有和OSI七层模型取得一致,对SS7协议只提出了4个功能层的要求。这4个功能层如下: 物理层:就是底层,具体是DS0或V.35。 数据链路层:在两节点间提供可靠的通信。 网络层:提供消息发送的路由选择.。 用户部份/应用部份:就是数据库事务处理,呼叫建立和释放。 但随着综合业务数字网(ISDN)和智能网的发展,不仅需要传送与电路有关的消息,而且需要传送与电路无关的端到端的消息,原来的四层结构已不 能满足要求。在1984年和1988年的红皮书和蓝皮书建议中,CCITT作了大量的努力,使SS7协议的分层结构尽量向OSI的七层模型靠近。 下图图示了SS7信令协议栈: MTP1(消息传递部分第一层):即物理层。 MTP1(消息传递部分第二层):即数据链路层。 MTP1(消息传递部分第三层):即网络层。

SCCP(信令连接控制部分) TCAP(事务处理应用部分) ISUP(ISDN用户部分) TUP(电话用户部分) MTP1 MTP1是SS7协议栈中的最底层,对应于OSI模型中的物理层,这一层定义了数字链路在物理上,电气上及功能上的特性。物理接口的定义包括:E-1,T-1,DS -1,V.35,DS-0,DS -0A(56K)。 MTP2 MTP2确保消息在链路上实现精确的端到端传送。MTP2提供流控制,消息序号,差错检查等功能。当传送出错时,出错的消息会被重发。MTP2对应OSI模型中的数据链路层。 MTP3 MTP3在SS7信令网中提供两个信令点间消息的路由选择功能,消息在依次通过MTP1,MTP2,MTP3层之后,可能会 被发送回MTP2再传向别的信令点,也可能会传递给某个应用层,如:SCCP或ISUP 层。MTP3还提供一些网管功能的支持,包括:流量控制,路由选择 和链路管理。MTP3对应OSI模型中的网络层。 SCCP(信令连接控制部分) SCCP位于MTP之上,为MTP提供附加功能,以便通过SS7信令网在信令点之间传递电路相关和非电 路相关的消息,提供两类无连接业务和两类面向连接的业务。 无连接业务是指在两个应用实体间,不需要建立逻辑连接就可以传递信令数据。面向连接的业务在数据传递之前应用实体之间必须先建立连接,可以是一般性的连

mtcp协议栈

mTCP:A Highly Scalable User-level TCP Stack for Multicore Systems EunYoung Jeong,Shinae Woo,Muhammad Jamshed,Haewon Jeong Sunghwan Ihm*,Dongsu Han,and KyoungSoo Park KAIST*Princeton University Abstract Scaling the performance of short TCP connections on multicore systems is fundamentally challenging.Although many proposals have attempted to address various short-comings,inef?ciency of the kernel implementation still persists.For example,even state-of-the-art designs spend 70%to80%of CPU cycles in handling TCP connections in the kernel,leaving only small room for innovation in the user-level program. This work presents mTCP,a high-performance user-level TCP stack for multicore systems.mTCP addresses the inef?ciencies from the ground up—from packet I/O and TCP connection management to the application inter-face.In addition to adopting well-known techniques,our design(1)translates multiple expensive system calls into a single shared memory reference,(2)allows ef?cient?ow-level event aggregation,and(3)performs batched packet I/O for high I/O ef?ciency.Our evaluations on an8-core machine showed that mTCP improves the performance of small message transactions by a factor of25compared to the latest Linux TCP stack and a factor of3compared to the best-performing research system known so far.It also improves the performance of various popular applications by33%to320%compared to those on the Linux stack. 1Introduction Short TCP connections are becoming widespread.While large content transfers(e.g.,high-resolution videos)con-sume the most bandwidth,short“transactions”1dominate the number of TCP?ows.In a large cellular network,for example,over90%of TCP?ows are smaller than32KB and more than half are less than4KB[45]. Scaling the processing speed of these short connec-tions is important not only for popular user-facing on-line services[1,2,18]that process small messages.It is 1We refer to a request-response pair as a transaction.These transac-tions are typically small in size.also critical for backend systems(e.g.,memcached clus-ters[36])and middleboxes(e.g.,SSL proxies[32]and redundancy elimination[31])that must process TCP con-nections at high speed.Despite recent advances in soft-ware packet processing[4,7,21,27,39],supporting high TCP transaction rates remains very challenging.For exam-ple,Linux TCP transaction rates peak at about0.3million transactions per second(shown in Section5),whereas packet I/O can scale up to tens of millions packets per second[4,27,39]. Prior studies attribute the inef?ciency to either the high system call overhead of the operating system[28,40,43] or inef?cient implementations that cause resource con-tention on multicore systems[37].The former approach drastically changes the I/O abstraction(e.g.,socket API) to amortize the cost of system calls.The practical lim-itation of such an approach,however,is that it requires signi?cant modi?cations within the kernel and forces ex-isting applications to be re-written.The latter one typically makes incremental changes in existing implementations and,thus,falls short in fully addressing the inef?ciencies. In this paper,we explore an alternative approach that de-livers high performance without requiring drastic changes to the existing code base.In particular,we take a clean-slate approach to assess the performance of an untethered design that divorces the limitation of the kernel implemen-tation.To this end,we build a user-level TCP stack from the ground up by leveraging high-performance packet I/O libraries that allow applications to directly access the packets.Our user-level stack,mTCP,is designed for three explicit goals: 1.Multicore scalability of the TCP stack. 2.Ease of use(i.e.,application portability to mTCP). 3.Ease of deployment(i.e.,no kernel modi?cations). Implementing TCP in the user level provides many opportunities.In particular,it can eliminate the expen-sive system call overhead by translating syscalls into inter-process communication(IPC).However,it also in-

arp协议栈

竭诚为您提供优质文档/双击可除 arp协议栈 篇一:实验2地址解析协议aRp 实验2地址解析协议(aRp) 【实验目的】 1.掌握aRp协议的报文格式 2.掌握aRp协议的工作原理 3.理解aRp高速缓存的作用 4.掌握aRp请求和应答的实现方法 5.掌握aRp缓存表的维护过程 【学时分配】 2学时 【实验环境】 该实验采用网络结构二 【实验原理】 一、物理地址与逻辑地址 1.物理地址 物理地址是节点的地址,由它所在的局域网或广域网定义。物理地址包含在数据链路层的帧中。物理地址是最低一

级的地址。 物理地址的长度和格式是可变的,取决于具体的网络。以太网使用写在网络接口卡(nic)上的6字节的标识作为 物理地址。 物理地址可以是单播地址(一个接收者)、多播地址(一组接收者)或广播地址(由网络中的所有主机接收)。有些 网络不支持多播或广播地址,当需要把帧发送给一组主机或所有主机时,多播地址或广播地址就需要用单播地址来模拟。 2.逻辑地址 在互联网的环境中仅使用物理地址是不合适的,因为不同网络可以使用不同的地址格式。因此,需要一种通用的编址系统,用来惟一地标识每一台主机,而不管底层使用什么样的物理网络。 逻辑地址就是为此目的而设计的。目前internet上的 逻辑地址是32位地址,通常称为ip地址,可以用来标识连接在internet上的每一台主机。在internet上没有两个主机具有同样的ip地址。 逻辑地址可以是单播地址、多播地址和广播地址。其中广播地址有一些局限性。在实验三中将详细介绍这三种类型的地址。 二、aRp协议简介 internet是由各种各样的物理网络通过使用诸如路由

tcp、ip协议栈移植

This article was downloaded by: [University of Jiangnan] On: 27 March 2015, At: 06:51 Publisher: Taylor & Francis Informa Ltd Registered in England and Wales Registered Number: 1072954 Registered office: Mortimer House, 37-41 Mortimer Street, London W1T 3JH, UK Journal of Discrete Mathematical Sciences and Cryptography Publication details, including instructions for authors and subscription information: https://www.wendangku.net/doc/089608543.html,/loi/tdmc20 An abridged protocol stack for micro controller in place of TCP/IP R. Seshadri a a Computer Centre, S.V. University , Tirupati , 517 502 , India Published online: 03 Jun 2013. PLEASE SCROLL DOWN FOR ARTICLE

An abridged protocol stack for micro controller in place of TCP/IP R.Seshadri ? Computer Centre S.V .University Tirupati 517502India Abstract The existing TCP/IP protocol stack running in hosts takes lot of overhead while the node in network is for a speci?c purpose.For example transferring simple messages across network.If the node in the network is not a PC but,some thing like a micro controller,which measures some values and stores in its local memory,then it becomes lavishness in using the micro controller’s memory.As it is a node in a network,working with TCP/IP ,it should be able to transfer those values in the form of messages to other hosts which are in either local network or global network. But in micro controller terms the memory is expensive and compact.The existing TCP/IP stack consumes a few mega bytes of memory.Therefore it can’t be accommodated in the memory of micro controller.Hence one needs to reduce the memory consumption.In this regard,an abridged protocol which replaces the existing TCP/IP has been designed to suit the above needs.For this purpose,the TCP/IP have been combined with KEIL C51features for 8051micro controller to make it work in transferring messages in local area network as well as global network. The above scheme was implemented and tested and the system was working satisfac-torily.The results are found to be more effective in communicating information/message from the micro controller to a PC. Keywords :Ethernet,stack,Transmission Control Protocol (TCP ),Internet Protocol (IP ).Introduction to TCP/IP The name TCP/IP refers to a suite of communication protocols.The name is misleading because TCP and IP are the only two of the dozens of protocols that compose the suite.Its name comes from two of the most ?E-mail :ravalaseshadri@yahoo.co.in —————————————————– Journal of Discrete Mathematical Sciences &Cryptography Vol.9(2006),No.3,pp.523–536 c Taru Publications D o w n l o a d e d b y [U n i v e r s i t y o f J i a n g n a n ] a t 06:51 27 M a r c h 2015

CI 协议栈简介

DVB / ETSI EN-50221 Common Interface Stack The GkWare Common Interface Stack already enables PayTV on thousands of DVB Setttop boxes worldwide, including single-slot and dual-slot systems and little and big-endian CPUs. The ANSI-C sourcecode is portable and only a small lowlevel PCMCIA I/O driver has to be developed for new platform integrations. Compatibility for all modules available to the general public is guaranteed. FEATURES Support for SCM CiMax, I&C StarCI and direct GPIO connections Simple Integration of custom Resources Flexible PMT => CAPMT converter PCMCIA Card-Info-Structure decoder included Full ETSI R206-001 profile level 1 implementation PVR / Headend descrambling mode, including support for Aston Professional CAM series Supports friendly coexistence with other PCMCIA drivers (e.g. Compact Flash, Network Interface or Bluetooth) SUPPORTED EN50221 RESOURCES Resource Manager Application Information Version 1 and 2 MMI DateTime CA Support Host Control LowSpeed Communication SUPPORTED PLATFORMS ARM7 (Thumb) ARM9 MIPS ST (OS20) x86 REQUIREMENTS approximately 32kb RAM + 16kb per Slot Multitasking OS recommended (but not required) (existing ports for Nucleus+, uCOS, pSoS, Win32) SUPPORTED CHIPSETS Conexant CX2249x, CX241xx, CX2417x ST 5105, 5519 Philips LPC 2214 NEC EMMA Series TI AV711x Technotrend DVB-PCI Budget series (including clones) KNC-One TV-Station Cineview slot (including clones) Whatever CI module you have... we make it work ! MMI Menu Sample Various licensing models are available, including low-volume closed-source and royalty-free with a limited sourcecode redistribution license. GkWare e.K. - Humboldtstrasse 177 - 45149 Essen - Germany https://www.wendangku.net/doc/089608543.html, - support@https://www.wendangku.net/doc/089608543.html, - +49 174 5208026

ZigBee测试与协议分析

ZigBee测试与协议分析 1 前言 ZigBee协议栈包括物理层协议(IEEE802.15.4)和上层软件协议(ZigBee 2007以及其他的ZigBee网络协议)。本文将从这两方面来了解这些协议,通过介绍如何捕获及如何理解关键参数,深层次剖析ZigBee技术。有了这些本质性的认识,对于分析解决无线产品应用问题,会有很大的帮助。 2 物理层分析 ZigBee的物理层为IEEE802.15.4标准所规定,定义了ZigBee底层的调制编码方式。这些规约大多是芯片设计者需要关心的,对于应用开发来说,更关心的是衡量一个芯片、一个射频系统性能的参数。在过去的文章中,已介绍了输出功率、接收灵敏度和链路预算等参数,这一讲将更深入地介绍一个调制质量的参数:EVM。EVM指的是误差向量(包括幅度和相位的矢量),表征在一个给定时刻理想无误差基准信号与实际发射信号的向量差,。从EVM参数中,可以了解到一个输出信号的幅度误差及相位误差。 EVM是衡量一个RF系统总体调制质量的指标,定义为信号星座图上测量信号与理想信号之间的误差,它用来表示发射器的调制精度,调制解调器、PA、混频器、收发器等对它都会有影响。EVM数据和眼图。 了解完这个参数之后,再看看实际测试中是如何获取EVM参数的。 ZigBee物理层的测试,在产品研发、生产和维护阶段,可以分别采用不同的仪器。 (1)产品研发阶段要测量EVM参数,需要使用带协议解析的频谱仪,最好是自带相应协议插件的仪器,可以使用安捷伦PXA N9030A频谱分析仪+8960B插件(选配了ZigBee分析插件)。这些仪器可以测试出ZigBee调制信号的星座图、实时数据和眼图等信息,在芯片级开发过程中,需要考量高频电容电感以及滤波器等的单个及组合性能,特别需要注意的是ZigBee信号的临道抑制参数,利用PXA N9030A的高分辨率,可以查看点频的带外信号,这些细节在更换射频器件供应商时,需要仔细测量,一般数字电路抄板比较容易,因为器件性能的影响不是很大,只要值和封装对了就可以,但是射频前端的设计上,即使原样的封装、容值和感值,供应商不一样,射频参数也是不一样的,板材的选用也极大地影响着阻抗匹配,因此复制和再开发都有较大难度。合格的测试工具,加上有质量保证的射频器件供应商资源,方能真正具备RF设计能力。安捷伦PXA N9030A频谱分析仪。 (2)批量生产阶段在批量生产中,不可能将实验室的研发测试仪器搬到工厂,因此,需要便携小巧的测试设备,这时可用罗德与斯瓦茨公司的热功率探头,如NRP-Z22,做一个2.4 GHz的输出功率测试,保证能够输出公差允许的功率信号即可,因为在生产中,射频器件的焊接不良、馈线连接头的接触不良,都会造成输出功率的下降甚至消失。需要注意的是,探头非常容易被静电损坏,必须要带上防静电手套进行操作,返修过程如需要经过德国,则时间长,经费也不便宜,不是很严重的损坏倒是可以在深圳维修中心处理。NRP-Z22。 (3)应用阶段在现场出现问题时,ZigBee节点已经安装到现场,不能逐一拆下来测试,并且周围的电磁环境也是没办法在单个节点上检测到,这时就需要手持式的频谱仪进行现场勘查了,例如安捷伦公司的N9912A手持式频谱仪。使用该频谱仪,可以完成无线系统设计初期的现场勘查工作,检测现场各个地点是否有异常电磁干扰,对于ZigBee来说,当然是检测是否有持续的WIFI信号干扰了。同时,更为详细的现场勘查,还包括在定点进行数据发送,预期覆盖点进行信号强度分析,以实地评估墙体等障碍物的信号衰减,在已经架设好的ZigBee网络中,也可以检测信号覆盖,数据通信是否正常等。N9912A。

TCPIP协议栈

TCP/IP协议族 IPv4包 UDP包 UDP的伪首部(根据IP数据包的内容建立) UDP校验和覆盖的内容超出了UDP数据报本身的X围。计算校验和,先把零值赋予校验和字段,然后对整个对象,包括伪首部、UDP的首部和用户数据,算出一个16比特的二进制

TCP包 TCP的伪首部(根据IP数据包的内容建立) 三次握手报文序列 在网点1的事件网络报文在网点2的事件 发送SYN seq=x 接收SYN报文段 发送SYN seq=y,ACK x+1

接收SYN+ACK报文段 发送ACK y+1 接收ACK报文段 TCP连接关闭的三次握手 在网点1的事件网络报文在网点2的事件 (应用程序关闭连接) 发送FIN seq=x 接收FIN报文段 发送ACK x+1 接收ACK报文段 发送FIN seq=y,ACK x+1 接收FIN+ACK报文段 发送ACK y+1 接收ACK报文段 IPv6 IPv6是“Internet Protocol Version 6”的缩写,它是IETF设计的用于替代现行版本IP协议-IPv4-的下一代IP协议。IPv6采用了分级地址模式、高效IPXX、服务质量、主机地址自动配置、认证和加密等许多技术。

IPv4和IPv6的主要差别 IPv6包结构 IPv6包由IPv6XX、扩展XX和上层协议数据单元三部分组成:

IPv6XX Version(4bit) Traffic Class(8bit) Flow Label(20bit) Payload Length(16bit) Next Header(8bit) Hop Limit(8bit) Source IP address (128bit) Destination IP address (128bit) 附:常用的Next Header 字段值表 扩展头 一个典型的IPv6包,没有扩展头。仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。与IPv4不同,IPv6扩展头长度任意,不受40字节限制,但是为了提高处理选项头和传输层协议的性能,扩展头总是8字节长度的整数倍。 目前,RFC 2460中定义了以下6个IPv6扩展头: 1)Hop-by-Hop选项XX 包含分组传送过程中,每个路由器都必须检查和处理的特殊参数选项。Hop-by-Hop选 项XX中的选项描述一个分组的某些特性或用于提供填充。这些选项有: Pad1选项(选项类型为0),填充单字节。

相关文档