搜档网
当前位置:搜档网 › 分析BACnet协议栈2

分析BACnet协议栈2

mstpscap.c这个文件主要实现从串口上抓取MS/TP协议上的packet功能。测试时的格式为:mstsnap [serial] [baud] [network] 默认参数是串口/dev/ttyUSB0、波特率是38400,eth0。

#include

#include

#include

#include

#include

#include

/* OS specific include*/

#include "net.h"

#include "timer.h"

/* local includes */

#include "bytes.h"

#include "rs485.h"

#include "crc.h"

#include "mstp.h"

#include "dlmstp.h"

#include "mstptext.h"

#include "bacint.h"

/** @file linux/mstpsnap.c Example application testing BACnet MS/TP on Linux. */

#ifndef max

#define max(a,b) (((a) >(b)) ? (a) : (b))

#define min(a,b) (((a) < (b)) ? (a) : (b))

#endif

/* local port data - shared with RS-485 */

static volatile struct mstp_port_struct_t MSTP_Port;

/* buffers needed by mstp port struct */

static uint8_t RxBuffer[MAX_MPDU];

static uint8_t TxBuffer[MAX_MPDU];

static uint16_t Timer_Silence(

void)

{

uint32_t delta_time = 0;

delta_time = timer_milliseconds(TIMER_SILENCE);

if (delta_time > 0xFFFF) {

delta_time = 0xFFFF;

}

return (uint16_t) delta_time;

}

static void Timer_Silence_Reset(

void)

{

timer_reset(TIMER_SILENCE);

}

/* functions used by the MS/TP state machine to put or get data */

uint16_t MSTP_Put_Receive(

volatile struct mstp_port_struct_t *mstp_port)

{

(void) mstp_port;

return 0;

}

/* for the MS/TP state machine to use for getting data to send */

/* Return: amount of PDU data */

uint16_t MSTP_Get_Send(

volatile struct mstp_port_struct_t * mstp_port,

unsigned timeout)

{ /* milliseconds to wait for a packet */

(void) mstp_port;

(void) timeout;

return 0;

}

uint16_t MSTP_Get_Reply(

volatile struct mstp_port_struct_t * mstp_port,

unsigned timeout)

{ /* milliseconds to wait for a packet */

(void) mstp_port;

(void) timeout;

return 0;

}

static int network_init(

const char *name,

int protocol)

{

/* check to see if we are being run as root */

if (getuid() != 0) { //函数返回一个调用程序的真实用户ID,一般来说,这个函数都是会调用成功的。getuid=0表示root用户

fprintf(stderr, "Requires root priveleges.\n");

return -1;

}

int sockfd = socket(PF_PACKET, SOCK_RAW, htons(protocol)); //得到原始的IP包,htons得到网络字节序(大端模式)网络上统一使用大端模式传输

if (sockfd == -1) {

perror("Unable to create socket");

return sockfd;

}

struct ifreq ifr; //获取IP地址和MAC地址

memset(&ifr, 0, sizeof(ifr));

strncpy(ifr.ifr_name, name, strlen(name));

if (ioctl(sockfd, SIOCGIFINDEX, &ifr) == -1) { //获取并打印网卡地址

perror("Unable to get interface index");

return -1;

}

struct sockaddr_ll sll; //本地地址

memset(&sll, 0, sizeof(sll));

sll.sll_family = AF_PACKET;

sll.sll_ifindex = ifr.ifr_ifindex;

sll.sll_protocol = htons(protocol);

if (bind(sockfd, (struct sockaddr *) &sll, sizeof(sll)) == -1) { //绑定套接字

perror("Unable to bind socket");

return -1;

}

return sockfd;

}

static void snap_received_packet(

volatile struct mstp_port_struct_t *mstp_port,

int sockfd)

{

uint16_t mtu_len = 0; /* number of octets of packet saved in file */

unsigned i = 0; /* counter */

static uint8_t mtu[1500] = { 0 }; //考虑到物理层实现等原因,以太网一帧的长度一般要求小于1500字节uint16_t max_data = 0;

mtu[0] = 0;

mtu[1] = 0;

mtu[2] = 0;

mtu[3] = 0;

mtu[4] = 0;

mtu[5] = mstp_port->DestinationAddress;

mtu[6] = 0;

mtu[7] = 0;

mtu[8] = 0;

mtu[9] = 0;

mtu[10] = 0;

mtu[11] = mstp_port->SourceAddress;

/* length - 12, 13 */

mtu[14] = 0xaa; /* DSAP for SNAP */

mtu[15] = 0xaa; /* SSAP for SNAP */

mtu[16] = 0x03; /* Control Field for SNAP */

mtu[17] = 0x00; /* Organization Code: Cimetrics */

mtu[18] = 0x10; /* Organization Code: Cimetrics */

mtu[19] = 0x90; /* Organization Code: Cimetrics */

mtu[20] = 0x00; /* Protocol ID */

mtu[21] = 0x01; /* Protocol ID */

mtu[22] = 0x00; /* delta time */

mtu[23] = 0x00; /* delta time */

mtu[24] = 0x80; /* unknown byte */

mtu[25] = mstp_port->FrameType;

mtu[26] = mstp_port->DestinationAddress;

mtu[27] = mstp_port->SourceAddress;

mtu[28] = HI_BYTE(mstp_port->DataLength);

mtu[29] = LO_BYTE(mstp_port->DataLength);

mtu[30] = mstp_port->HeaderCRCActual;

mtu_len = 31;

if (mstp_port->DataLength) { //分别往里面存放从输入缓存器中的数据、DataCRCActual(先高位后低位顺序) max_data = min(mstp_port->InputBufferSize, mstp_port->DataLength);

for (i = 0; i < max_data; i++) {

mtu[31 + i] = mstp_port->InputBuffer[i];

}

mtu[31 + max_data] = mstp_port->DataCRCActualMSB;

mtu[31 + max_data + 1] = mstp_port->DataCRCActualLSB;

mtu_len += (max_data + 2);

}

/* Ethernet length is data only - not address or length bytes */

encode_unsigned16(&mtu[12], mtu_len - 14); //给整数类型编码

(void) write(sockfd, &mtu[0], mtu_len);

}

static void cleanup(

void)

{

}

#if (!defined(_WIN32))

static void sig_int(

int signo)

{

(void) signo;

cleanup();

exit(0);

}

void signal_init(

void)

{

signal(SIGINT, sig_int);

signal(SIGHUP, sig_int);

signal(SIGTERM, sig_int);

}

#endif

/* simple test to packetize the data and print it */

int main(int argc,char *argv[]) //main函数实现在Linux 终端运行root#mstpsnap /dev/tty/USB0 38400 eth0

{

volatile struct mstp_port_struct_t *mstp_port;

long my_baud = 38400;

uint32_t packet_count = 0;

int sockfd = -1;

char *my_interface = "eth0";

/* mimic our pointer in the state machine */

mstp_port = &MSTP_Port;

if ((argc > 1) && (strcmp(argv[1], "--help") == 0)) {

printf("mstsnap [serial] [baud] [network]\r\n"

"Captures MS/TP packets from a serial interface\r\n"

"and sends them to a network interface using SNAP \r\n"

"protocol packets (mimics Cimetrics U+4 packet).\r\n" "\r\n"

"Command line options:\r\n" "[serial] - serial interface.\r\n"

" defaults to /dev/ttyUSB0.\r\n"

"[baud] - baud rate. 9600, 19200, 38400, 57600, 115200\r\n"

" defaults to 38400.\r\n" "[network] - network interface.\r\n"

" defaults to eth0.\r\n" "");

return 0;

}

/* initialize our interface */

if (argc > 1) {

RS485_Set_Interface(argv[1]);

}

if (argc > 2) {

my_baud = strtol(argv[2], NULL, 0); //把argv[2]按照十进制转换

}

if (argc > 3) {

my_interface = argv[3];

}

sockfd = network_init(my_interface, ETH_P_ALL);

if (sockfd == -1) {

return 1;

} //设置一些MS/TP协议里面的内容参数,这部分要求熟悉MS/TP协议内容,具体可参考教材<智能楼宇BACnet原理与控制>

RS485_Set_Baud_Rate(my_baud);

RS485_Initialize();

MSTP_Port.InputBuffer = &RxBuffer[0];

MSTP_Port.InputBufferSize = sizeof(RxBuffer);

MSTP_Port.OutputBuffer = &TxBuffer[0];

MSTP_Port.OutputBufferSize = sizeof(TxBuffer);

MSTP_Port.This_Station = 127;

MSTP_Port.Nmax_info_frames = 1;

MSTP_Port.Nmax_master = 127;

MSTP_Port.SilenceTimer = Timer_Silence;

MSTP_Port.SilenceTimerReset = Timer_Silence_Reset;

MSTP_Init(mstp_port);

fprintf(stdout, "mstpcap: Using %s for capture at %ld bps.\n",

RS485_Interface(), (long) RS485_Get_Baud_Rate());

atexit(cleanup);

#if defined(_WIN32)

SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_PROCESSED_INPUT);

SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlCHandler, TRUE);

#else

signal_init();

#endif

/* run forever */

for (;;) {

RS485_Check_UART_Data(mstp_port);

MSTP_Receive_Frame_FSM(mstp_port);

/* process the data portion of the frame */

if (mstp_port->ReceivedValidFrame) {

mstp_port->ReceivedValidFrame = false;

snap_received_packet(mstp_port, sockfd);

packet_count++;

} else if (mstp_port->ReceivedInvalidFrame) {

mstp_port->ReceivedInvalidFrame = false;

fprintf(stderr, "ReceivedInvalidFrame\n");

snap_received_packet(mstp_port, sockfd);

packet_count++;

}

if (!(packet_count % 100)) {

fprintf(stdout, "\r%hu packets", packet_count);

}

}

return 0;

}

分析BACnet协议栈1

从现在开始分析BACnet协议栈了,版本号是bacnet-stack-0.7.1。目录是bacnet-stack-0.7.1\ports\linux\rs485.c rs485.c文件主要要解决在物理层发送和接收数据的作用。不同的开发板需要移植该文件。 #include #include #include #include #include #include #include /* Linux includes */ #include #include #include #include #include #include /* Local includes */ #include "mstp.h" #include "rs485.h" #include "fifo.h" #include #include /* Posix serial programming reference: https://www.sodocs.net/doc/e314327751.html,/~mike/serial/serial.html */ /* Use ionice wrapper to improve serial performance: $ sudo ionice -c 1 -n 0 ./bin/bacserv 12345 */ /* handle returned from open() */ static int RS485_Handle = -1; /* baudrate settings are defined in , which is included by */ static unsigned int RS485_Baud = B38400;//波特率选择38400 bps /* serial port name, /dev/ttyS0, /dev/ttyUSB0 for USB->RS485 from B&B Electronics USOPTL4 */ static char *RS485_Port_Name = "/dev/ttyUSB0"; /*系统默认是通过USB转485的,根据需要设置,若你的开发板用485接口,则用static char *RS485_Port_Name = "/dev/ttyS0";代替*/ /* some terminal I/O have RS-485 specific functionality */

Xmodem协议详解以及源代码剖析

研究 Xmodem 协议必看的 11个问题 Xmodem 协议作为串口数据传输主要的方式之一,恐怕只有做过 bootloader 的才有机会接触一下, 网上有关该协议的内容要么是英语要么讲解不详细。笔者以前写 bootloader 时研究过 1k-Xmodem ,参考了不少相关资料。这里和大家交流一下我对 Xmodem 的理解,多多指教! 1. Xmodem 协议是什么? XMODEM协议是一种串口通信中广泛用到的异步文件传输协议。分为标准Xmodem 和 1k-Xmodem 两种,前者以 128字节块的形式传输数据,后者字节块为 1k 即 1024字节,并且每个块都使用一个校验和过程来进行错误检测。在校验过程中如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个确认字节 (ACK。由于 Xmodem 需要对每个块都进行认可, 这将导致性能有所下降, 特别是延时比较长的场合, 这种协议显得效率更低。 除了 Xmodem ,还有 Ymodem , Zmodem 协议。他们的协议内容和 Xmodem 类似,不同的是 Ymodem 允许批处理文件传输,效率更高; Zmodem 则是改进的了Xmodem ,它只需要对损坏的块进行重发,其它正确的块不需要发送确认字节。减少了通信量。 2. Xmodem 协议相关控制字符 SOH 0x01 STX 0x02 EOT 0x04 ACK 0x06 NAK 0x15

CAN 0x18 CTRLZ 0x1A 3.标准 Xmodem 协议(每个数据包含有 128字节数据帧格式 _______________________________________________________________ | SOH | 信息包序号 | 信息包序号的补码 | 数据区段 | 校验和 | |_____|____________|___________________|__________|____________| 4. 1k-Xmodem (每个数据包含有 1024字节数据帧格式 _______________________________________________________________ | STX | 信息包序号 | 信息包序号的补码 | 数据区段 | 校验和 | |_____|____________|___________________|__________|____________| 5.数据包说明 对于标准 Xmodem 协议来说,如果传送的文件不是 128的整数倍,那么最后一个数据包的有效内容肯定小于帧长,不足的部分需要用 CTRL- Z(0x1A来填充。这里可能有人会问,如果我传送的是 bootloader 工程生成的 .bin 文件, mcu 收到后遇到0x1A 字符会怎么处理?其实如果传送的是文本文件,那么接收方对于接收的内容是很容易识别的,因为 CTRL-Z 不是前 128个 ascii 码, 不是通用可见字符, 如果是二进制文件, mcu 其实也不会把它当作代码来执行。哪怕是 excel 文件等,由于其内部会有些结构表示各个字段长度等,所以不会读取多余的填充字符。否则 Xmodem太弱了。对于 1k-Xmodem ,同上理。 6.如何启动传输?

网络协议报文格式大集合

可编辑 目录 1 序、 (2) 1.1 协议的概念 (2) 1.2 TCP/IP体系结构 (2) 2 链路层协议报文格式 (2) 2.1 Ethernet报文格式 (2) 2.2 802.1q VLAN数据帧(4字节) (3) 2.3 QinQ帧格式 (4) 2.4 PPP帧格式 (4) 2.5 STP协议格式 (5) 2.5.1 语法 (5) 2.5.2 语义 (6) 2.5.3 时序 (8) 2.6 RSTP消息格式 (9) 2.6.1 语法 (9) 2.6.2 语义 (11) 2.6.3 时序 (13) 3 网络层协议报文 (14) 3.1 IP报文头 (14) 3.2 ARP协议报文 (16) 3.2.1 语法 (16) 3.2.2 语义 (17) 3.2.3 时序 (17) 3.3 VRRP协议报文 (18) 3.3.1 语法 (18) 3.4 BGP协议报文 (19) 3.4.1 语法 (19) 3.4.2 语义 (25)

1 序、 1.1 协议的概念 协议由语法、语义和时序三部分组成: 语法:规定传输数据的格式; 语义:规定所要完成的功能; 时序:规定执行各种操作的条件、顺序关系; 1.2 TCP/IP体系结构 TCP/IP协议分为四层结构,每一层完成特定的功能,包括多个协议。本课程实验中相关协议的层次分布如附图3-1所示。 图1-1TCP/IP协议层次 这些协议之间的PDU封装并不是严格按照低层PDU封装高层PDU的方式进行的,附图3-2显示了Ethernet帧、ARP分组、IP分组、ICMP报文、TCP报文段、UDP数据报、RIP报文、OSPF报文和FTP报文之间的封装关系。 图1-2各协议PDU间的封装关系 2 链路层协议报文格式 2.1 Ethernet报文格式 最新的IEEE 802.3标准(2002年)中定义Ethernet帧格式如下:

实验六TCP报文段的格式及协议分析

实验六TCP报文段的格式及协议分析 【实验目的】 1、分析TCP报文段的格式; 2、了解TCP报文段首部结构以及各个字段的内容及其作用; 3、通过观察TCP协议的交互掌握TCP连接建立、数据传输、连接释放的过程。 【实验内容】 1、分析TCP报文段的结构,熟悉各个字段的内容、功能、格式和取值范围; 2、编辑TCP报文段首部各字段的内容; 3、单个或批量发送已经编辑好的TCP报文段; 4、分析TCP协议的交互过程。 【实验原理】 TCP TCP 序号:占4 字段的值指的是本报文段所发送的数据的第一个字节的序号。 确认号:占4个字节,是期望收到对方下一个报文段的数据的第一个字节的序号。 数据偏移:占4 bit,它指出报文段的数据起始处距离TCP报文段的起始处有多远。实际上就是TCP报文段首部的长度。 保留:占6 bit,保留为今后使用。 紧急比特URG:当URG=1时,表明紧急指针有效。它告诉系统报文段中有紧急数据,应尽快传送。

确认比特ACK:ACK=1时确认号字段才有效,ACK=0时确认号字段无效。 推送比特PUSH:接收方接收到PUSH=1的报文段时会尽快的将其交付给接收应用进程,而不再等到整个接收缓存都填满后再向上交付。 复位比特RST:当RST=1时,表明TCP连接中出现严重差错,必须释放连接。复位比特还用来拒绝一个非法的报文段或拒绝打开一个连接。 同步比特SYN:在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,应在响应的报文段中使SYN=1和ACK=1。因此,SYN=1就表示这是一个连接请求或连接接收报文。 终止比特FIN:当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。 窗口:占2个字节,用来控制对方发送的数据量,单位是字节,指明对方发送窗口的上限。校验和:占2个字节,校验的范围包括首部和数据两个部分,计算校验和时需要在报文段前加上12字节的伪首部。 紧急指针:占2个字节,指出本报文段中紧急数据最后一个字节的序号。只有当紧急比特URG=1时才有效。 选项:长度可变。TCP只规定了一种选项,即最大报文段长度MSS (Maximum Segment Size)。

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),另一种是简化功能设备

LWIP协议栈的分析和设计

---《计算机网络与控制》论文 LWIP协议栈的分析

摘要 近些年来,随着互联网和通讯技术的迅猛发展,除了计算机之外,大量的嵌入式设备也需求接入网络。目前,互联网中使用的通讯协议基本是TCP/IP协议族,可运行于不同的网络上,本文研究的就是嵌入式TCP/IP协议栈LWIP。文章首先分析了LWIP的整体结构和协议栈的实现,再介绍协议栈的内存管理,最后讲解协议栈应用程序接口。 关键词: 嵌入式系统;协议;LWIP;以太网 Abstract With the rapid development of internet and communication technology, Not only computers but also embeded equipments are need to connect networks. At present, the basic communication protocol using in internet is TCP/IP, it can run in different network. This paper analyses the Light-Weight TCP/IP. The process model of a protocol implementation and processing of every layer are described first, and then gives the detailed management of Buffer and memory. At last, a reference lwIP API is given. Key words: Embedded System, Protocol, Light weight TCP/IP,Ethernet 引言

TCPIP协议格式

通过连接实例解读TCP/IP协议 最近狂补基础,猛看TCP/IP协议。不过,书上的东西太抽象了,没有什么数据实例,看了不久就忘了。于是,搬来一个sniffer,抓了数据包来看,呵呵,结合书里面得讲解,理解得比较快。我就来灌点基础知识。 开始吧,先介绍IP协议。 IP协议(Internet Protocol)是网络层协议,用在因特网上,TCP,UDP,ICMP,IGMP数据都是按照IP数据格式发送得。IP协议提供的是不可靠无连接得服务。IP数据包由一个头部和一个正文部分构成。正文主要是传输的数据,我们主要来理解头部数据,可以从其理解到IP协议。 IP数据包头部格式(RFC791) Example Internet Datagram Header 上面的就是IP数据的头部格式,这里大概地介绍一下。 IP头部由20字节的固定长度和一个可选任意长度部分构成,以大段点机次序传送,从左到右。 TCP协议 TCP协议(TRANSMISSION CONTROL PROTOCOL)是传输层协议,为应用层提供服务,和UDP不同的是,TCP协议提供的可靠的面向连接的服务。在RFC793中是基本的TCP描述。关于TCP协议的头部格式内容的说明: TCP Header FORMat

TCP Header FORMat 跟IP头部差不多,基本的长度也是20字节。TCP数据包是包含在一个IP数据报文中的。 好了,简单介绍到此为止。来看看我捕获的例子吧。这是一次FTP的连接,呵呵,是cuteftp默认的cuteftp的FTP站点,IP地址是:216.3.226.21。我的IP地址假设为:192.168.1.1。下面的数据就是TCO/IP连接过程中的数据传输。我们可以分析TCP/IP协议数据格式以及TCP/IP连接的三次握手 (ThreeWay-Handshake)情况。下面的这些十六进制数据只是TCP/IP协议的数据,不是完整的网络通讯数据。 第一次,我向FTP站点发送连接请求(我把TCP数据的可选部分去掉了) 192.168.1.1->216.3.226.21 IP头部: 45 00 00 30 52 52 40 00 80 06 2c 23 c0 a8 01 01 d8 03 e2 15 TCP头部:0d 28 00 15 50 5f a9 06 00 00 00 00 70 02 40 00 c0 29 00 00 来看看IP头部的数据是些什么。 第一字节,“45”,其中“4”是IP协议的版本(Version),说明是IP4。“5”是IHL位,表示IP头部的长度,是一个4bit字段,最大就是1111了,值为12,IP头部的最大长度就是60字节。而这里为“5”,说明是20字节,这是标准的IP头部长度,头部报文中没有发送可选部分数据。 接下来的一个字节“00”是服务类型(Type of Service)。这个8bit字段由 3bit的优先权子字段(现在已经被忽略),4 bit的TOS子字段以及1 bit的未用字段(现在为0)构成.4 bit的TOS子字段包含:最小延时、最大吞吐量、最高可靠性以及最小费用构成,这四个1bit位最多只能有一个为1,本例中都为0,表示是一般服务。 接着的两个字节“00 30”是IP数据报文总长,包含头部以及数据,这里表示48字节。这48字节由20字节的IP头部以及28字节的TCP头构成(本来截取的TCP头应该是28字节的,其中8字节为可选部分,被我省去了)。因此目前最大的IP数据包长度是65535字节。 再是两个字节的标志位(Identification):“5252”,转换为十进制就是21074。这个是让目的主机来判断新来的分段属于哪个分组。 下一个字节“40”,转换为二进制就是“0100 0000”,其中第一位是IP协议目前没有用上的,为0。接着的是两个标志DF和MF。DF为1表示不要分段,MF

BACnet协议的体系结构

B A C n e t协议的体系结 构 Revised by Petrel at 2021

B A C n e t 协议的体系结构 国际标准化组织在制定计算机网络通讯协议标准时定义了一个模型,称为开放系统互联参考模型(OSI )(ISO7498)。模型的目的是解决计算机与计算机之间普遍的通信问题。在这个模型中,将计算机通信这样一个复杂的问题分解成7个小的、容易解决的子问题,每个子问题只与某些通信功能相关,并且把这些子问题称为协议体系结构的一层,整个模型是一个七层的体系结构。在图4-1中给出这七层的体系结构图。 层。信的单个计算机之间可能相距很远,因此报文要通过一系列中间点才能到达。 而这些中间点相应地可能需要实现路由选择功能、某种解析功能,以及复杂的同步和差错恢复功能。 实现OSI 模型协议所需的费用较高,在绝大部分楼宇自动控制系统中,并不需要实现OSI 模型的所有内容。不过只从OSI 的功能性方面来考虑,经过简化,OSI 模型仍然是楼宇自动控制协议的一个很好的参考。如果只选择OSI 模型中需要的层次,形成一个简化的模型,作为楼宇自动控制系统的协议体系结构,就可以减少报文的长度,降低通信处理的开销,并且也满足楼宇自动控制系统的需要。这个简化的体系结构降低了楼宇自动控制工业的生产成本,同时处理器的大批量生产、局域网技术的发展,也为过程控制和办公自动化工业的发展起到了推动作用。另一方面,可以充分利用现有的、易用的、应用广泛的局域网技术,如以太网、ARCNET 和LonTalk 。这样不但可以降低成本,而且也有利于提高性能,为系统集成开辟新的途径。 用户1 用户2 图4-1开放系统互联基本参考模型

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。

传统协议栈和DPDK

一、传统协议栈之数据包从NIC到内核 1、从NIC到内存 概括地说,网络数据包进入内存(接收数据包)的流程为: 网线--> Rj45网口--> MDI 差分线 --> bcm5461(PHY芯片进行数模转换) --> MII总线 --> TSEC的DMA Engine 会自动检查下一个可用的Rx bd -->把网络数据包DMA 到Rx bd所指向的内存,即skb->data

1、首先,内核在主内存中为收发数据建立一个环形的缓冲队列(通常叫DMA环形缓冲区)。 2、内核将这个缓冲区通过DMA映射,把这个队列交给网卡; 3、网卡收到数据,就直接放进这个环形缓冲区了——也就是直接放进主内存了;然后,向系统产生一个中断; 4、内核收到这个中断,就取消DMA映射,这样,内核就直接从主内存中读取数据; 对应以上4步,来看它的具体实现: 1、分配环形DMA缓冲区 Linux内核中,用skb来描述一个缓存,所谓分配,就是建立一定数量的skb,然后把它们组织成一个双向链表 2、建立DMA映射 内核通过调用dma_map_single(struct device *dev,void *buffer,size_tsize,enumdma_data_direction direction) 建立映射关系。 struct device *dev,描述一个设备;buffer:把哪个地址映射给设备;也就是某一个skb——要映射全部,当然是做一个双向链表的循环即可;size:缓存大小;direction:映射方向——谁传给谁:一般来说,是“双向”映射,数据在设备和内存之间双向流动;对于PCI设备而言(网卡一般是PCI的),通过另一个包裹函数pci_map_single,这样,就把buffer交给设备了!设备可以直接从里边读/取数据。 3、这一步由硬件完成; 4、取消映射 ma_unmap_single,对PCI而言,大多调用它的包裹函数pci_unmap_single,不取消的话,缓存控制权还在设备手里,要调用它,把主动权掌握在CPU手里——因为我们已经接收到数据了,应该由CPU把数据交给上层网络栈;当然,不取消之前,通常要读一些状态位信息,诸如此类,一般是调用dma_sync_single_for_cpu() 让CPU在取消映射前,就可以访问DMA

计算机网络使用网络协议分析器捕捉和分析协议数据包样本

计算机网络使用网络协议分析器捕捉和分析协议数据包样 本 计算机网络使用网络协议分析器捕捉和分析协议数据包广州大学学生实验报告开课学院及实验室:计算机科学与工程实验室11月月28日学院计算机科学与教育软件学院年级//专业//班姓名学号实验课程名称计算机网络实验成绩实验项目名称使用网络协议分析器捕捉和分析协议数据包指导老师熊伟 一、实验目的 (1)熟悉ethereal的使用 (2)验证各种协议数据包格式 (3)学会捕捉并分析各种数据包。 本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 二、实验环境1.MacBook Pro2.Mac OS3..Wireshark 三、实验内容,验证数据帧、IP数据报、TCP数据段的报文格式。 ,,分析结果各参数的意义。 器,分析跟踪的路由器IP是哪个接口的。 对协议包进行分析说明,依据不同阶段的协议出分析,画出FTP 工作过程的示意图a..地址解析ARP协议执行过程b.FTP控制连接建立过程c.FTP用户登录身份验证过程本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。

文档如有不当之处,请联系本人或网站删除。 d.FTP数据连接建立过程 e.FTP数据传输过程 f.FTP连接释放过程(包括数据连接和控制连接),回答以下问题:a..当访问某个主页时,从应用层到网络层,用到了哪些协议?b.对于用户请求的百度主页(),客户端将接收到几个应答报文??具体是哪几个??假设从是本地主机到该页面的往返时间是RTT,那么从请求该主页开始到浏览器上出现完整页面,一共经过多长时间??c.两个存放在同一个服务器中的截然不同的b Web页(例如,,和d.假定一个超链接从一个万维网文档链接到另一个万维网文档,由于万维网文档上出现了差错而使超链接指向一个无效的计算机名,这时浏览器将向用户报告什么?e.当点击一个万维网文档时,若该文档除了次有文本外,,那么需要建立几次TCP连接和个有几个UDP过程?本文档所提供的信息仅供参考之用,不能作为科学依据,请勿模仿。 文档如有不当之处,请联系本人或网站删除。 析,分析ARP攻击机制。 (选做),事实上,TCP开始发送数据时,使用了慢启动。 利察用网络监视器观察TCP的传输和确认。 在每一确认到达之后,慢启动过程中发生了什么?(选做),,TCP 必须准备重发初始段(用于打开一个连接的一个段)。 TCP应等多久才重发这一段?TCP应重发多少次才能宣布它不能打开一个连接?为找到结果尝试向一个不存在的地址打开一个连接,并使用网络监视器观察TCP的通信量。

楼宇自控协议BACnet 简介

BACnet 简介 BACnet 是 A Data Communication Protocol for Building Automation and Control Network 的简称,是一种为楼宇自控网络制定的数据通讯协议。 1987年,美国暖通空调工程师协会组织(ASHARE)的标准项目委员会调集了全球20多位业内著名专家,经过8年半时间,在1995年6月,ASHARE正式通过全球首个楼宇自控行业通讯标准--BACnet,标准编号为ANSI/ASHARE Standard135-1995,同年12月成为美国国家标准,并且还得到欧盟委员会的承认,成为欧盟标准草案。 BACnet是一个标准通讯和数据交换协议。各厂家按照这一协议标准开发与楼宇自控网兼容的控制器与接口,最终达到不同厂家生产的控制器都可以相互交换数据,实现互操作性。换言之,它确立了在不必考虑生产厂家,不依赖任何专用芯片组的情况下,各种兼容系统实 现开放性与互操作性的基本规则。 根据1999年底楼宇自控网在互联网页里的资料,目前世界上已有数百家国际知名的厂家支持BACnet ,其中包括楼宇自控系统厂家、消防系统厂家、冷冻机厂家、配电照明系统厂 家和安保系统厂家等。 〖 BACnet技术特点〗 BACnet采用了面向对象的技术,它定义了一组具有属性的对象(Object)来表示任意的楼宇自控设备的功能,从而提供了一种标准的表示楼宇自控设备的方式。同时BACnet定义了四种服务原语来传递某些特定的服务参数。目前BACnet共定义了18个对象,123 个属性和35个服务。由于一个楼宇自控系统中并不是所有的设备都要有必要支持BACnet所有的功能,BACnet协议还定义了6个性能级别和13个功能组。 〖 BACnet协议优点〗 BACnet是一个完全开放性的楼宇自控网协议,其开放性表现在: 独立于任何制造商,不需要专门芯片,并得到众多制造商的支持; 有完善和良好的数据表示和交换方法; 按标准制造的产品有严格的性能等级和完整的说明;

TI_zigbee协议栈结构分析应用

无线盛世《快速进入ZB世界》
Ver:1

进入Zigbee世界的准备工作
§ 首先,我们需具备一些硬件设备及平台。以下 我就罗列一下Zigbee开发基本工具: § 计算机:不管是设计电路还是编程开发都是离 不开它的。 § Zigbee开发板:对于初学者来说,Zigbee开发 板无疑是最佳选择。有了开发板,你可以在我 们成熟设计的基础上学习或者做自己的设计。 § Zigbee模块:集MCU,RF,天线设计于一体 的Zigbee模块。使用它,我们可省去设计天线 及IC周边电路设计的复杂工作。

进入Zigbee世界的准备工作
§ Zigbee仿真器:是集烧写程序、在线编程和在线仿真 功能于一身的开发过程工作中必不可少的开发工具。 编程器既能对CC243x芯片(其实包括TI产品中的CC 系列的大部分芯片)进行烧写程序(hex标准文件程序 ),也能对CC243x芯片进行在线编程和仿真,让我们 能方便地在线调试开发,从而大大地提高了开发效率 。 § Zigbee协议分析仪:ZigBee的设计开发者必不可少的 工具!ZigBee协议分析仪具有广泛的功能,包括:分 析以及解码在PHY、MAC、NETWORK/SECURITY、 APPLICATION FRAMEWORK、和APPLICATION PROFICES等各层协议上的信息包;显示出错的包以 及接入错误;指示触发包;在接收和登记过程中可连 续显示包。

进入Zigbee世界的准备工作
§ 再次,我们需要在将用于开发Zigbee的计 算机平台上安装这些软件: § Zigbee协议分析软件(sniffer) § 程序烧写软件(Flash Programmer) § IAR公司的EW8051 version 7.20I/W32 。

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.sodocs.net/doc/e314327751.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

基于tcpip协议的Modbus

基于tcp/ip协议的modbus 业以太网与Modbus TCP/IP 一以太网的标准 以太网是一种局域网。早期标准为IEEE802.3,数据链路层使用CSMA/CD,10Mb/s 速度物理层有: (1)10Base5粗同轴电缆,RG-8,一段最长为500m; (2)10Base2细同轴电缆,RG-58,一段最长为185m; (3)10Base T双绞线,UTP或STP,一段最长为100m。 快速以太网为100Mb/s,标准为802.3a,介质为100Base Tx双绞线、100Base Fx光纤。 目前10/100M以太网使用最为普遍,很多企事业用户已实现100M到以太网桌面,确实体验到高速“冲浪”的快感,另外从距离而言,非屏蔽双绞线(UTP)为100m,多模光纤可达2~3km,单模光纤可大于100km。千兆以太网1000Mb/s为802.3z/802.3ab,万兆以太网10Gb/s 为802.3ae,将为新一轮以太网的发展带来新的机遇与冲击。 二工业以太网与商用以太网的区别 什么是工业以太网?技术上,它与IEEE802.3兼容,故从逻辑上可把商用网和工业网看成是一个以太网,而用户可根据现场情况,灵活装配自己的网络部件,但从工业环境的恶劣和抗干扰的要求,设计者希望采用市场上可找到的以太网芯片和媒介,兼顾考虑下述工业现场的特殊要求:首先要考虑高温、潮湿、振动;二是对工业抗电磁干扰和抗辐射有一定要求,如满足EN50081-2、EN50082-2标准,而办公室级别的产品未经这些工业标准测试,表1列出了一些常用工业标准。为改善抗干扰性和降低辐射,工业以太网产品多使用多层线路板或双面电路板,且外壳采用金属如铸铝屏蔽干扰;三是电源要求,因集线器、交换机、收发器多为有源部件,而现场电源的品质又较差,故常采用双路直流电或交流电为其供电,另外考虑方便安装,工业以太网产品多数使用DIN导轨或面板安装;四是通信介质选择,在办公室环境下多数配线使用UTP,而在工业环境下推荐用户使用STP(带屏蔽双绞线)和光纤。

相关主题