嵌入式 WEB SERVER 的设计与实现

更新时间:2024-01-21 18:40:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

武汉科技学院2006届毕业设计论文

1.绪 论

自18世纪的工业革命以来,人类社会在每个世纪都有它的主流技术。在经历了机械时代,蒸汽机时代和电气时代后,以信息的收集,处理和发布为主要特点的信息技术是成为我们这个时代的主流技术。信息技术的蓬勃发展,对我们这个社会产生了极为深远的影响。

1.1 嵌入式系统的发展及现状

嵌入式概念早在20世纪60年代末己被提出,在经历了二、三十年的缓慢发展后,截止到上世纪90年代,它获得了全面的应用和发展。目前,随着IT业向数字化、网络化和智能化方向发展,嵌入式技术的应用全面展开。在通信领域中,采用嵌入式技术的交换和路由设备实现了智能的交换和路由。在广播电视领域,嵌入式软件技术和数字技术的结合,造就了家电行业的未来发展方向-信息家电。在控制领域,广泛应用于ATM机、自动售货机、工业控制等设备。在商业领域中,先进的PDA己能在屏幕上实现汉字写入、短消息语音发布,应用范围也将日益广阔。在个人领域中,嵌入式产品将主要作为个人移动的数据处理和通信软件。由于嵌入式设备具有人性化的人机交互界面,GUI屏幕为中心的多媒体界面给人以很大的亲和力,手写文字输入、语音拨号、收发电子邮件以及彩色图形、图像取得初步成效,所有上述产品都离不开嵌入式系统技术。

中国的单片机应用和嵌入式系统开发有15年的历程,有超过10万名从事单片机开发应用的工程师,但绝大多数是以封闭的方式开发几乎不可重用的软件。今天面对的是嵌入式系统工业化的潮流,嵌入式软件必须以工业化的方式生产开发,这对加速知识创新和建立面向新世纪的知识经济具有战略意义。[1]

本文将讲述的单片机+TCP/IP软件的方法就可以使嵌入式系统上英特网,使嵌入式设备之间可以相互通信。这种技术现今已用于工业自动化,POS(电子收款机系统)网络及电子商务,智能公路等方面。

1. 2 嵌入式系统的定义

1

武汉科技学院2006届毕业设计论文

嵌入式系统泛指单片机和微处理器构成的电子设备。根据IEEE的定义,嵌入式系统是“控制、监视、或者辅助设备、机器和车间运行的装置”(devices used to control, monitor, or assist the operation of equipment, machinery or plants)。[2]这主要从应用上加以定义的,从中可以看出嵌入式系统是软件和硬件的综合体。不过 ,目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础,硬件软件可裁减,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。它用于实现对其他设备的控制、监视或管理等功能。

嵌入式系统的定义可从以下几个方面来理解:

(1)嵌入式系统是面向用户、面向产品、面向应用的,它必须与具体应用相结合才会具有生命力、才更具有优势。

(2)嵌入式系统是将先进的计算机技术、半导体技术、电子技术以及各行业的具体应用相结合的产物。这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。

(3)嵌入式系统必须根据应用需求可对软硬件进行裁减,满足应用系统的功能、可靠性、成本、体积等要求。

嵌入式系统的组成及特点

嵌入式系统主要分为两个部分:嵌入式硬件部分和嵌入式软件部分。嵌入式硬件部分主要由嵌入式处理器,嵌入式外围设备等构成;嵌入式软件部分主要由嵌入式操作系统,嵌入式开发调试环境和嵌入式应用软件构成。 一、 嵌入式硬件部分

嵌入式硬件主要包括嵌入式处理器、外围设备两方面。

嵌入式处理器是嵌入式系统硬件中的核心的部分。嵌入式处理器与通用处理器有所不同。它通常把通用计算机中许多板卡完成的任务集成在芯片内部,有利于嵌入式处系统设计趋于小型化,并且具有高效率、高可靠性等优点。

嵌入式处理器可分为:

(1) 低端的微控制器(MicroController Unit,MCU); (2) DSP处理器(Digital Signal Processor, DSP);

2

武汉科技学院2006届毕业设计论文

(3) 中高端的嵌入式微处理器(Microprocessor Unit, MPU); (4) 高度集成的片上系统(System On Chip, SOC)。

外围设备是指在一个嵌入式系统中,除了嵌入式处理器以外用于完成存储、通信、调试、显示等辅助设备功能的其他部件。它包括存储器(RAM/SRAM, DRAM, FLASH等)、接口(RS-232/RS-485, PC104总线等)、人机交互(LCD,键盘、触摸屏等)。 二、 嵌入式软件

嵌入式软件又可以分为嵌入式操作系统、应用软件两部分。

嵌入式系统以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

嵌入式系统通常具有如下特性:

(1) 完成单一或一组紧密相关的特定功能; (2) 具有高性能和实时的要求;

(3) 系统作为设备的一部分,其运行一般不需要人工干预; (4) 系统的电源要求具有较高的可靠性和安全性; (5) 处理器的选择是嵌入式系统设计的关键一步。[1]

嵌入式计算机在应用数量上远远超过了各种通用计算机。在制造工业、过程控制、通讯、仪器、仪表、汽车、船舶、航天、军事装备、消费类产品等方面均是嵌入式计算机的应用领域。嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。随着“后PC”时代的来临,嵌入式系统技术已经成为无所不在的推动力量,为人们的生活、工作带来一个又一个的变革。嵌入式产品成为信息产业的主流。

1.4 嵌入式Web Server的系统设计 1.4.1 单片机系统接入Internet方案

3

武汉科技学院2006届毕业设计论文

目前,国内外嵌入式仪器接入Internet主要有以下三种方案:

一是使用嵌入式操作系统,即由TCP/IP协议栈加嵌入式操作系统加高速32位处理器做成的嵌入式仪器。因为32位处理器有足够的资源可以扩充利用,RAM和ROM可以做得足够大,整个TCP/IP协议族可以做到系统里面去,甚至可以嵌入一个带TCP/IP协议族的操作系统。所以32位微处理器除了可以实现复杂功能外,还能较容易的进行网络通信的TCP/IP协议处理,因而可以成为直接接入Internet的网络仪器。但其缺点也是明显的,32位微处理器开发难度大,开发工具昂贵,并且大多用在高端产品里,在成本较低的嵌入式系统里现在用的还比较少。

二是代理服务器方案。它由低档8位机组成嵌入式仪器,采用专用网络(RS-232,RS-485等)把若干嵌入式仪器连在一起,该网络再与PC相连,由此组成PC网关专用网。此时把PC作为网关,并由PC把该网络上的信息转换为TCP/IP协议数据包,发送到Internet上实现信息共享。这样虽然可以使嵌入式仪器连到Internet,但必须用一台PC机或类似PC机的设备作为网关来实现协议转换,即把其它协议的信息转换成适合在Internet上传输的数据包。这样虽然也能实现信息共享,但其成本较高。

三是直接实现方案,即在8位单片机中实现TCP/IP协议来实现Internet的接入功能。利用这种方案的好处是省去操作系统和网关的费用,大大节约系统资源。缺点是增加了开发难度,技术实现上有一定困难。[2]

1.4.2 嵌入式Internet的研究意义及目的

目前国内单片机的应用非常广泛,大多数系统是以51单片机为核心,与检测、伺服、显示设备配合起来实现监控功能。数据的传输大多采用RS-232, RS-485以及各种现场总线,这些方式有些通信速度不够快,有些距离不够远,且各种总线之间难于实现互连和互操作。以太网作为目前应用最为广泛的局域网,在工业自动化和过程控制领域得到了越来越多的应用。同时,随着Internet的普及,现代通信技术的进步,基于TCP/IP和Client/ Server架构的分布式监控技术也日趋成熟。借助以太网和Internet技术,把嵌入式系统连接到Internet上,就

4

武汉科技学院2006届毕业设计论文

可以方便、低廉地把信息传送到世界的任何一个地方。因此,对于以单片机为中心的嵌入式设备,如何充分利用现有的Internet网络实现远程监控,已成为当今电子世界中的热门话题。

随着电子设备智能化要求的提高和各种功能强大的微处理器的推出,嵌入式系统逐渐成为许多电子设备不可缺少的一部分,并处在前所未有的发展期,而互联网概念跳深入人心更为嵌入式系统与互联网的结合提出了要求。嵌入式系统接入Internet以后,不仅可以实现设备的远程控制、维护和升级,而且从另外一层意义上讲,接入Internet的设备己经成为网络共享资源的一部分,可以说这是电子设备智能化以来设计思想的又一次飞跃。

1.5 研究内容及方案

本文采用8051单片机和Realtek公司的10M自适应网络RTL8019AS接口构建嵌入式Web服务器的硬件平台,并在详细分析了以太网网络模型和精简的TCP/IP协议的基础上,完成了以下几方面的内容: (1) 单片机与网卡的接口设计; (2) 在单片机中实现精简TCP/IP协议; (3) 数据的采集及IP地址的显示; (4) 动态网页的生成等。

系统设计方案简介:

RJ 45为系统与局域网的接口。由于大部分局域网都采用以太网,这里的RTL8019AS就是用于处理以太网协议(IEEE 802.3)的。数据的流向为:请求信息从局域网中来,通过RJ 45送到RTL80l9AS,处理后的数据包送入单片机系统的协议栈,由协议栈对数据包进行解析,得到原始请求信息。请求信息再经过单片机系统的处理,产生回复信息。回复信息到局域网的过程与上面正好相反。整个系统的软件流程如图1-1所示。

5

武汉科技学院2006届毕业设计论文

可。

(9)网络接口类型由74和77(PL0,PLI)引脚决定,这里使用自动检测方式。会自动测接口类型是用同轴电缆还是双绞线。

2.2 RTL8019AS网卡芯片 2.2.1,RTL8019AS的内部结构

RTL8019AS内部可分为远程DMA接口,本地DMA接口,MAC(介质访问控制)逻辑,数据编码解码逻辑和其它端口。内部结构如下图2-3所示:

即插即用 8K×16 SRAM

(PnP) Boot ROM 端口 MAC逻辑 EEPROM 端口 ENA(编码译码)逻辑 AUI 接口 双绞线 接口 图 2-3 RTL8019AS内部结构

远程DMA接口是指:单片机对RTL8019AS内部RAM进行读写的总线,用于和主处理器通信。单片机收发数据只需要对远程DMA操作。本地DMA接口是把RTL8019AS与网线的连接通道,完成控制器与网线的数据交换,用于控制器内部。

MAC(介质访问控制)逻辑完成一下功能:当单片机向网上发送数据时,先一帧数据通过远程DMA通道送到RTL8019AS中的发送缓存区,然后发出传送命令;

11

武汉科技学院2006届毕业设计论文

当RTL8019AS完成了以上帧的发送后,再开始此帧的发送。RTL8019AS接收到的数据通过MAC比较、CRC校验后,由FIFO存到接收缓冲区,收满一帧后,以中断或寄存器标志的方式通知主处理器。FIFO逻辑对收发数据作16字节的缓冲,以减少对本地DMA请求的频率。

RTL8019AS支持三种工作方式:

·即插即用方式,I/O地址和中断都由操作系统管理,用户不必 过多干预,但是较耗费系统资源;

·跳线方式,网卡的I/O地址和中断都由跳线决定; ·非跳线方式。

网卡使用何种方式由RTL8019AS的输入引脚的第65脚JP决定。当该引脚为低电平时,可决定RTL8019AS是工作在第2种还是第3种方式。RTL8019AS网卡的第65脚一般为悬空,此时引脚的输入伏态为低电平(悬空输入脚的电平为低电平,因片内接有一个100 kΩ的下拉电阻)。如果第65脚接高电平(VCC),即使用跳线方式。

RTL8019AS的本地DMA操作是由控制器本身完成的,而其远程DMA并不是在无处理器的参与下,数据能自动移到主处理器的内存中,它的操作机制是这样的:主处理器先赋值与远程DMA的起始地址寄存器RSAR0、RSAR1和字节计数器RR0、RBCR1,然后在RTL8019AS的DMA I/O地址上读写指定地址上的数据。

2.2.2,内部RAM地址空间分配

RTL8019AS内部有两块RAM区。一块16K字节,地址为0X4000~0X7FFF;一块32字节,地址为0X0000~0X001F。RAM按页存储,采用分页的方式管理,每256字节为一页。一般将RAM的前12页(即0X4000~0X4BFF)存储区作为发送缓冲区;后52页(即0X4C00~0X7FFF)存储区作为接收缓冲区。第0页叫Prom页,只有32字节,地址为0X0000~0X001F,用于存储以太网物理地址。

要接收或发送数据包就必须通过DMA读写RTL8019AS内部的16KB RAM。它实际是个双端口的RAM,是指有两套总线连接到RAM,一套总线RTL8019AS读或写

12

武汉科技学院2006届毕业设计论文

该RAM,即本地DMA。另一套总线是单片机读或写该RAM,即远程DMA。在介绍RTL8019AS结构时已给出具体定义,这里不赘述。

RTL8019AS有20根地址线,但是真正能够寻址的范围只有:0X00300~0X0031F这32个地址。其中0X00300~0X0030F分配给了寄存器组,0X00310~0X00317分配给了远程DMA端口,剩下的地址空间分配给了复位端口。

2.2.3, I/O地址分配

RTL8019AS具有32位输入输出地址,地址偏移量为00H~1FH。(其中00H~0FH共16个地址,为寄存器地址)RTL8019AS寄存器组共77个寄存器,分配给寄存器的地址只有16个,因此RTL8019AS采用分页面管理的方式,将这些寄存器分为4个页面:PAGE0、PAGE1、PAGE2、PAGE3,每页的大小为16个字节,刚好对应分配给寄存器的16个地址。其中PAGE0页的寄存器在读和写的情况下,意义是不同的。在PAGE0~PAGE2共有58个寄存器。这些是和NE2000兼容的寄存器件,和RTL8019AS本身设置相关的寄存器放在PAGE3里,PAGE3是RTL8019AS自己定义的,对于其它兼容NE2000的芯片如DM9008无效。所有这些页都包含了叫做CR(Command Register命令寄存器)的寄存器,本系统中其对应的地址是0X00300。通过设置CR寄存器中最高两位来决定要访问的页。其中芯片的I/0地址由引脚85、84、82和81来决定。

C8051F020虽然可以直接读写寄存器组,但是却不能直接读写双口RAM,需要通过远程DMA端口间接访问双口RAM,(远程DMA地址包括10H~17H),C8051F020先在寄存器组中设置缓冲区地址和字节计数器,然后通过循环读写远程DMA端口,把数据传送到双口RAM的缓冲区,或从其中读取出来。

实际上C8051F020在读写RTL8019AS时只需要5根地址线与RTL8019AS最低5位地址线相连就可以了。RTL8019AS上的其它15根地址线按照I/O基地址的设置(0B000000000011000XXXXX)分别接地或者高电平。复位端口包括18H~1FH,共8个地址,功能一样,用于RTL8019AS复位。

在上文中已经谈到硬件设计中的几个注意问题,这里就不累叙,下面就简单给出RTL8019AS引脚的两个连接表,以及几个需要强调的引脚。

13

武汉科技学院2006届毕业设计论文

RTL8019AS的20根地址线SA0~SA19,如下表2-1连接:

表2-1 RTL8019AS地址线的连接

SA19~SA10 SA9~SA8 SA7~SA0

接地 接单片机C8051F202的P6.7 接单片机C8051F020的P7口 2.2.4 RTL8019AS与单片机的连接

RTL8019AS按功能可将其划分为:接收模块、CRC产生模块、发送功能模块、地址识别模块、FIFO控制模块、协议逻辑阵列模块及DMA和缓冲控制模块。连接表以及总线信号见表2-2。

表2-2 RTL8019AS的总线接口引脚与单片机的连接表

Pin 29 Pin 30 Pin 33 Pin 34 Pin 96 IORB IOWB RSTDRV AEN IOCS16 读信号,接到单片机的WR引脚(P3.6) 写信号,接到单片机的RD引脚(P3.7) RESET信号,接单片机的T0 (P3.4) 地址有效信号,接地。 采用电阻下拉该引脚,复位时刻脚为低电平,选择8位模式。 Pin 36~ Pin 43 SD 0~SD 7 8位数据总线,接单片机的P0口。(只用到8位数据总线,SD 8~ SD 15 不接)

上表2-2为读写操作、复位操作对应的连接

14

武汉科技学院2006届毕业设计论文

表2-3 RTL8019AS网卡接口电路所使用的总线信号 信 号 线 数 据 信 号 线 地 址 信 号 线 地 址 允 许 线 I/O通 道 准 备 好 信 号 线 复 位 信 号 线 I/O 读 信 号 I/O 写 信 号 I/O 片 选16位 信 号

引 脚 SD0~SD15 SA0~SA19 AEN IOCHRDY RESETDRV /IOR /IOW /IOCS16 时钟电路通过T1、T2接口一个20MHz晶振以及2个电容,实现全双工方式。 LED0LED1各接一个发光二极管以反映通讯状态:LED0表示LED_COL,即通讯有冲突;LED1表示LED_RX,即接收到网上的信息包。

2.3 外部数据存储器62256和锁存器74HC573

使用外部RAM 62256的目的是提高单片机的数据传输速度和进行复杂的TCP/IP处理。由于以太网的包最大可以有1500多字节,C8051F020单片机内部RAM无法存储这么大的包,只有放到外部RAM里。同时外部RAM也用作串行口的输入输出缓冲,以使单片机可以较快地吞吐数据(用网卡上的RAM来代替62256会影响速度)。D0~D7接单片机的P7口,/OE接单片机的RD,/WR接单片机的/WR,/CE接单片机的P2.7,A8一A14接单片机的P6.0一P6.6。SD锁存器74HC373的DATAO一DATA7接单片机的P7口,/OE接地,LE接单片机的ALE。因此外部存储器62256占用单片机的外部数据地址空间000OH一7FFFH,共32k字节。

15

武汉科技学院2006届毕业设计论文

2.4 RS232串行通信接口电路

PC机与单片机通信的RS232通信接口电路原理图2-4所示:

C8051F020的TX0与RX0脚连接在RS232接口芯片上MAX232E上。而DB9插座的2脚可与PC机端的串口RX0脚相连,DB9插座的3脚可与PC机端的串口TX0脚

5

图2-4接口电路

2.5 FLASH芯片

FLASH又名闪存,属于EEPROM,即电可擦除可编程的存储器。由于具有电可擦除的特性,并且其数据可保留上百年,所以它的应用范围非常广泛,非常适用于作为CPU的外部存储器,或者作为需要存储大量数据的外部EEPROM。W29C040为32脚DIP封装芯片,工作电压为5V,内部 512K * 8位的快速闪存,它的结构为256字节为一页,每页的擦写时间为5mS,整片擦除时间为50mS。管脚表如下: W29C040 FLASH ROM

16

武汉科技学院2006届毕业设计论文

表2-4 W29C040管脚列表

管脚名称 A0-A18 DQ0-DQ7 #CE #OE #WE Vdd Vss

图2-5W29C040管脚图

功能描述 地址的输入口 数据的输入/输出口 片选脚 读脚 写脚 5V脚 地

3.TCP/IP协议简介

3.1 分层结构

对于一个功能齐全以太网WEB服务器,需要一下几个协议:地址解析协议(ARP),网际协议(IP),网际控制消息协议(ICMP),传输控制协议(TCP),超文本传输协议(HTTP),它们的关系图如下:

17

武汉科技学院2006届毕业设计论文

用户进程 用户进程 用户进程 用户进程 应用层 TCP UDP 运输层 ICMP IP IGMP 网络层 硬件接RARP 口 链路层

ARP 媒 体 图3-1 TCP/IP协议族中不同层次的协议

TCP/IP协议最先是在UNIX系统里实现的,后来的LINUX、DOS、Windows也实现了TCP/IP,随后TCP/IP协议也被移植到其它嵌入式的处理器上。由于指令的原因,以及资源上的原因,在UNIX上实现的TCP/IP协议的源代码并不能直接移植到8位的单片机上。并且单片机根本没有足够的代码空间实现全部协议。一般在单片机里只实现与需要有关的部分,不使用的协议一概不支持。基于这一思想,我们在设计嵌入式Internet时就可以在TCP/IP协议的子集中实现,从而降低设计的难度。

本文仅介绍与嵌入式WEB SERVER编程密切相关的部分:TCP/IP协议的分层结构及其报文格式。

TCP/IP协议采用分层结构,它是一个四层协议系统,每一层负责不同的功能,其分层模型及协议如下表3-1:

18

武汉科技学院2006届毕业设计论文

表3-1分层模型及协议

应用层 Application HTTP , Telnet , FTP , SMTP , SNMP 传输层 Transport 网络层 Internet 链路层 Network IP (ARP , RARP , ICMP , IGMP ) Ethernet , X 2.5 , SLIP , PPP

TCP , UDP 3.2 封装

当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),该过程如图3.3所示。TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCP segment)。IP传给网络接口层的数据单元称作IP数据报(IP datagram)。通过以太网传输的比特流称作帧(Frame)。

19

武汉科技学院2006届毕业设计论文

Appl首部 用户数据 应用程序 用户数据 TCP首部 应用数据 TCP TCP段 IP首部 TCP首部 应用数据 以太网IP 以太网首部 IP数据报 IP首部 TCP首部 应用数据 以太网尾部 14 20 20 4 以太网 以太网帧 46~1500字节

图3-2数据进入协议栈时的封装过程

图3-2中帧头和帧尾下面所标注的数字是典型以太网帧首部的字节长度。本文的后面将详细介绍帧头的含义。

以太网数据帧的物理特性是其长度必须在46~1500字节之间。

网络接口分别要发送和接收IP、ARP、和RARP数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个16bit的帧类型域。

3.3 链路层的协议分析

链路层(Link Layer):又称数据链路层或网络接口层,这是TCP / IP协议族的最底层,它负责接收IP数据包和把数据包通过选定的网络发送出去,或者从

20

武汉科技学院2006届毕业设计论文

网络上接收物理帧,抽取出IP数据包,交给IP层。

链路层通常包括计算机中对应的网络接口卡及其设备驱动程序,它们一起处理与电缆(或其它任何传输媒介)的物理接口细节,完成网络上物理帧的传输。除网络控制器驱动外,链路层典型的协议就是ARP (Address Resolation Protocol)—地址解析协议。

3.3.1 ARP协议概述

每个网络接口都有自己的一个硬件地址,在硬件层次上进行的数据帧交换必须有正确的接口地址。但是,TCP/IP有自己的地址,即32位的IP地址。知道主机的IP地址并不能让以太网驱动程序发送一帧数据给主机,以太网驱动程序必须知道目的端的硬件地址才能发送数据。ARP的功能就是在32位的lP地址和网卡MAC地址之间提供动态映射。

以太网的网络接口层支持的是48位以太网地址,而网络层支持的是32位的IP地址。ARP协议的功能是为32位IP地址到对应的48位以太网物理地址之间提供动态映射,将上层的IP地址与底层的物理地址进行绑定,它形成了只能使用IP地址的上层协议软件与只能使用物理地址的下层设备驱动程序软件之间的分界线。

当某主机要向以太网中另一台主机发送IP数据时,它首先根据目的主机的IP地址在ARP高速缓存中查询相应的以太网地址,ARP高速缓存是主机维护的一个IP地址到相应以太网地址的映射。如果查到匹配结点,则相应的以太网地址被写入以太网帧首部,数据包被加入输出队列等候发送。如果查询失败,ARP会先广播一个询问目的主机硬件地址的ARP报文,等到收到回答后再将数据包发送出去。ARP包格式如表所示:

21

武汉科技学院2006届毕业设计论文

表3-2 ARP请求或应答格式

0 13 14 41

6字节以太网目的地址 6字2字节以节帧太网类型 源地址 2字节硬件类型 2字节协议类型 1字节硬件地址长度 1字节协议字节长度 2字节操作字段 6字节发送端以太网地址 4字节发送端IP地址 6字节目的以太网地址 4字节目的IP地址

3.4 网络层的协议分析

网络层主要负责按网络标准形式封装数据报,既从原发送方到目的地报文地址和路由信息,以便让信息可以发送到相邻的TCP/IP网络上的任意主机上。网络层协议包括IP(网际协议),ICMP(控制报文协议)和IGMP(Internet组管理协议)。

3.4.1 IP协议概述

IP协议使网际之间的通信成为可能,是层中传输数据的机制。如果嵌入式Internet需要跨越不同的网络通信就必须要实现IP协议。所以IP协议需要完整实现,要特别注意IP包最大可以为65K,可以分段传输,而在嵌入式系统中根本无法容纳如此大的数据包,因此一般不支持分段。单片机一般采用发送小数据包的方式,以避免分段。

IP协议是整个TCP/IP协议族中最为核心的协议,所有的TCP、UDP、ICMP等数据都以IP数据报格式传输。IP协议是一种不可靠的、尽最大努力交互的、无连接交互机制的协议,它并不保证IP数据报能成功地到达目的地。因此数据报传输的可靠性必须由上层协议来负责,如TCP协议。

22

武汉科技学院2006届毕业设计论文

表3-3 IP数据报格式及首部中的各个字段

4位版本 4位首部长度 8位服务类型(TOS) 3位标志 16位总长度(字节) 16位标识 13位片偏移 8位生存时间(TTL) 8位协议 16位首部检验和 32位源IP地址 32位目的IP地址 32位选项(若有) 数据

3.4.2 ICMP协议概述

ICMP协议主要用来传递差错报文以及其它需要注意的信息。ICMP协议中规定了多种协议类型和代码,如果完全实现要浪费不少的系统资源,对于普通的嵌入式Internet的应用而言,能够测试网络的连通情况即可,因此只需要实现ICMP中类型号为0,代码为0的Ping应答协议即可。

3.5 传输层的协议分析

传输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP是一种面向连接的协议,TCP为两台主机提供高可靠性的数据通信,通过使用序列号和确认信息,TCP能够向发送方提供到达接收方的数据包的传送信息。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面,UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发

23

武汉科技学院2006届毕业设计论文

送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。这两种运输层协议分别在不同的应用程序中有不同的用途。

3.5.1 TCP与UDP的比较

传输控制协议(TCP: Transfer Control Protocol)和用户数据包协议(UDP: User Datagram Protocol)是因特网上传输层的协议,利用IP协议,支持应用层所委托的数据的端对端通信。可以从世界上任何一台计算机中找到特定的通信对象,并向其发送数据。传输层的协议提供的是连接指定在对方计算机上运行的特定应用程序和希望得到的网络服务。TCP和UDP把端口通信功能提供给应用程序,但TCP和UDP在性质上具有差别,因此在用途上也存在一定的区别。

UDP数据包的可靠性是与IP相当的,所以远端主机收到的数据包未能保证其正确的顺序。但是由于TCP所传数据流应用了顺序号和应答措施,可以发现数据的丢失、段的失序和对传输错误的排除,所以TCP协议提供的是数据流的可靠传输。

相对于UDP,TCP所获得的可靠性是以其复杂性为代价的。TCP面向连接,而UDP是无连接能力的。这意味着,UDP客户机向指定的远端主机发送数据包时,并未事先确知对方是做好了接收数据的准备的。因此就会发生某一客户机发给一个主机,而此主机事先并未把此客户机列入其目标端口号而加以监听。这种情况,只要远端主机运行的是TCP/IP堆栈,并能够将输入的UDP数据包送到ICMP层进行处理的话,此主机将返回一个ICMP(Internet控制信息协议)错误。也就是说,如果远端主机不能接收发去的UDP数据的话,客户机还可以获得一定的提示的;但是,这种提示是有限的,因为客户机并不确知数据的结果。

然而也正是由于UDP没有保证可靠性的机制,没有其他的关卡机制,UDP才得以实现全速发送(即充分发挥物理通信设备的速度)。如果使用低速的处理器,因UDP的开销很小,其传输率比TCP高出很多;但对于高速处理器,二者的差别不会很大。另外,UDP没有点对点接入的要求,所以可以实现“一对多点”,“多对多点”的广播和多点播发信息。一个使用UDP实行信息广播的典型例子,就是在DHCP协议(动态主机控制协议)中,当系统引导的时候,发出广播信息,通知所有DHCP服务器向系统提交网络配置信息。

24

武汉科技学院2006届毕业设计论文

3.5.2 UDP协议

UDP是一个简单的面向应用的运输层协议,不提供可靠性。不进行连接,只是把数据发出去,不管它能不能到目的地,也不进行确认,只管发送,由于不用建立连接和等待确认,所以传输速度很快。报文格式见表3-4所示:

表3-4 UDP数据报首部

0 15 16 31

16位源端口号 16位UDP长度 数据(若有) 16位目的端口号 16位UDP检验和

端口号表示发送进程和接收进程,UDP的公认端口见表所示:

表3-5 UDP公认端口

端口号 7 9 13 69 端口 ECHO DISCARD DAYTIME TFTP

功能 将收到的数据报回送到发送端 丢弃任何收到的数据报 返回任何日期和时间 简单文件传送协议

总长度是指UDP首部和数据两个和的字节数,如果只有首部没有数据那么它的值为8字节,是最小值。检验和覆盖整个UDP长度。包括3部分:伪首部、UDP首部和应用层数据,位于UDP报头前12字节的是伪首部。见表3-6所示:

25

武汉科技学院2006届毕业设计论文

表3-6 UDP检验和

32位源IP地址 32位目的IP地址 全0 8位协议 16位UDP总长度 源端口号 目的端口号 UDP总长度 检验和 数据(必须填充使数据是16的倍数)

3.5.3 TCP协议

TCP和UDP不同,它向应用层提供一种面向连接的、可靠的字节流服务。 TCP数据包的结构如表3-7所示:

表3-7 TCP首部

0 15 16 31

16位源端口号 16位目的端口号 32位序列号 32位确认号 4位首部保留(6U A R C P S R S T S F Y I N N 16位窗口大小 16位紧急指针 选项(若有) 数据(若有) TCP消息段的字段描述如下:

源/目的端口号:发送端主机与接收端主机的端口号,具有16比特的长度。 序号:用于保证数据的到达顺序与可靠性。利用随机值确定初始值,以字节为单位表示所发送数据的位置。

长度 位) G K H 16位TCP检验和 26

武汉科技学院2006届毕业设计论文

ACK(应答确认)号:用于保证可靠性的确认代码。将下一个所应该接收到的序号作为应答确认号。

片偏移(Offset):表示TCP数据的起始位置,以四字节的整数倍表示。在不包括选项的情况下,TCP报头是20字节,offset值为5。 保留比特:为扩展所保留的6比特的字段,设定为0。

标志:拥有6位长度的字段,以ON(l)和OFF(2)两值表示,作用如下: URG(urgent Flag)表示是应该紧急处理的数据;

ACK(Acknowledgement Flag)表示应答确认号的字段是有效的; PSH(Push Flag)表示是需要尽快向应用层递交的数据; RST(Reset Flag)重建连接;

SYN(synchronize Flag)表示建立连接的要求; FIN(Fin Flag)表示结束通信;

窗口大小:用于流量控制的16位的字段,以字节为单位指定可以接收的数据长度。

校验和:用来确认TCP报头与数据是否被破坏的字段;

紧急指针:以字节为单位表示放置需要紧急处理的数据的位置。从数据开始到紧急指针所指定的位置为止是需要紧急处理的数据。 选项:为提高TCP的通信性能所准备的选项。

填充码:为了使数据为4个字节(32比特)的整数倍而添加“0”的调整字段。

3.6 应用层的协议分析

应用层负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序:Telnet远程登录、FTP文件传输协议、SMTP简单邮件传送协议、SNMP简单网络管理协议和Web系统等。

应用层负责对接收的数据提供解释服务,对嵌入式系统来说两个重要的协议

27

武汉科技学院2006届毕业设计论文

是超文本传输协议HTTP和文本传输协议FTP。HTTP用于将文件从一个主机传送到另一个主机,并在请求方主机上显示文字、文件 ;FTP用于将文件从一个主机传送到另一个主机,并将文件存在发出请求的主机内。它传送的只是一个拷贝文件,不是原文件。

4. TCP/IP协议栈 的 实 现

嵌入式TCP/IP协议栈通常包括ARP/RARP、IP、ICMP、UDP、HTTP、SMTP及FTP等协议。协议实现前应该首先明白各个协议的关系。下面就给出基本的协议关系图,如图4-1所示:

应 用 程 序

Socket 应 用 程 序 接 口

TCP协议模块 UDP协议模块 IP协议模块 ICMP协议模块 网络接口层 ARP协议模块 网络接口控制芯片 以太网 图4-1 基本协议流程图

通过对MCU编程,来实现RTL8019初始化,发送数据、接收数据等功能,在处理数据步骤之前,还需要对网络控制器进行必要的检测、复位和初始化。软件设计分两部分:网卡控制器驱动程序设计和TCP/IP协议设计。

驱动程序实现3个功能:初始化8019、接收数据包和发送数据包。也就是将

28

武汉科技学院2006届毕业设计论文

要发送的数据包按指定格式写入芯片输入输出缓冲区中并启动发送命令,8019会自动把数据包转换成物理帧格式在物理信道上传输。反之,8019收到物理信号后将其还原成数据,按指定格式存放在输入输出缓冲区中,以便主机程序取用,简言之就是8019完成数据包和电信号之间的相互转换。以太网协议由芯片硬件自动完成,不用考虑。

4.1 RTL8019AS驱动程序的设计 4.1.1 RTL8019AS的初始化

所谓驱动程序实际上就是对RTL8019AS的寄存器组以及远程DMA端口进行读写。软件的编写才用KEIL公司的C51 uVision2 for Windows软件。因为采用C语言编程,所以代码便于阅读和移植。(程序见附录)

RTL8019AS有四页寄存器组,每页寄存器组有16个寄存器。对网卡的初始化就是对相关寄存器进行初始化。这些寄存器包括CR、DCR、RBCI之、PSTART、PSTOP、ISR、IMR、PARO-PARS、MARO-MARS、CURR、TCR和RCR等。初始化过程如下:

(l)CR=0X21,选择页0的寄存器;

(2) TPSR=0X45,发送页的起始页地址,初始化为指向第一个发送缓冲区的页即0X40;

(3)PSTART=0X4C,PSTOP=0X80,构造缓冲环:0X4C~0X80; (4)BNRY=0x4C,设置指针;

(5) RCR=OXCC,设置接收配置寄存器,使用接收缓冲区,仅接收自己地址的数据包(以及广播地址数据包)和多点播送地址包,小于64字节的包丢弃,校验错的数据包不接收;

(6) TCR=0XE0,设置发送配置寄存器,启用CRC自动生成和自动校验,工作在正常模式;

(7)DCR=0XC8,设置数据配置寄存器,使用FIFO缓存,普通模式,8位数据

29

武汉科技学院2006届毕业设计论文

DMA;

(8)IMR=0x00,设置中断屏蔽寄存器,屏蔽所有中断; (9)CR=0x61,选择页l的寄存器;

(10)CURR=0x4d,CURR是R丁L8019AS写内存的指针,指向与正在写的当前页的下一页,初始化时指向0x4c+l=0x4d;

(11)设置多址寄存器MAR0~MAR5,均设置为0x00; (12)设置网卡地址寄存器PAR0~PAR5;

(13) CR=0x22,选择页1的寄存器,进入正常工作状态;

(14) TCR=0xEO,发送器正常工作状态。

其中CR寄存器是控制命令寄存器,地址是00h,其各个位的含义如下表4-1所示,该寄存器用于选择寄存器页,控制远程DMA操作。

表4-1寄存器页选择

NO 00h

NAME CD TYPE R/W Bit7 PS1 Bit6 Ps0 Bit5 RD2 Bit4 RD1 Bit3 RD0 Bit2 txr Bit1 sta Bit0 stp PSI和PSO位用于指定寄存器的页。在实际配置寄存器时,首先指定要配置的寄存器属于哪一页(即进行PSI和PSO的设置),然后对那一页中的寄存器写入配置信息。PSI和PSO为00时选择寄存器页O,为01时选择寄存器页1,为10时选择寄存器页2,为11时选择寄存器页3。 RD2、RD1和RD0位用于要确定的功能: =001读网卡内存 =010写网卡内存 =011发送网卡数据包

=1**完成或结束DMA的读写操作

TXP位写入1时发送数据包,发完自动清零;STA和STP位用于启动和停止。10为启动命令,01为停止命令。

30

武汉科技学院2006届毕业设计论文

RTL8019AS含有16k字节的RAM,地址为0x4000~0x7fff(RTL80l9AS工作用的存储器上的存储地址,而不是ISA总线的地址),每256个字节称为一页,共有64页。页地址就是地址的高8位,页地址为0x40~0x7f。这16 KB的RAM的一部分用于存放接收的数据包,一部分用于存储待发送的数据包。当然也可留给用户使用。例如把网卡设置成使用8 kB的RAM,另外8kB的RAM就可以用来给单片机作为存储器。

在程序中用0x40~0x4B共12页作为网卡的发送缓冲区,刚好可以存储2个最大的以太网包。用0x4c~0x7f共52页作为网卡的接收缓冲区。因此PSTART=0x4c,PSTOP=0x80(0x80为停止页,即一直到0x7f都是接收缓冲区,不包括0x80);开始时网卡没有接收到任何数据包,所以BNRY设置为指向第一页接收缓冲区的地址0x4c。

CURR是网卡写内存的指针,它指向正在写的当前页的下一页。那么初始化时,它应该指向0x4c+1=0x4d。网卡写完接收缓冲区一页,就将这个页地址加1,CURR=CURR+1,这是网卡自动加的。当加到最后的空页(这里是0x80,PSTOP)时,将CURR置为接收缓冲区的第一页(这里是0x4c,PSTART),这是由网卡自动完成的。当CURR=BNRY时,表示缓冲区全部被存满,数据还没有被用户读走,这时网卡将停止往内存写数据,新收到的数据包将被丢弃不要,而不覆盖旧的数据。此时实际上出现了内存溢出。

BNRR由用户来操作。用户从网卡读走一页数据,要将BNRY加1,然后再写到BNRY寄存器。当BNRY加到最后的空页(0x80,PSTOP)时,同样要将BNRY变成第一个接收页(PSTART,0x4c),BNRY=0x4c。

CURR和BNRY主要用来控制缓冲区的存取过程,保证能顺次写入和读出。当CURR=BNRY-1(或当BNRY=0x7f,CURR=0x4c)时,网卡的接收缓冲区里没有数据,表示没有收到数据包。用户通过这个判断知道没有包可以读。当上述条件不成立时,表示接收到新的数据包。然后用户应该读取数据包,直到上述条件成立时,表示所有数据包己经读完,此时停止读取数据包。

TPSR为发送页的起始页地址。初始化为指向第一个发送缓冲区的页0x40。 RCR接收配置寄存器,设置为使用接收缓冲区,仅接收自己地址的数据包.(以

31

武汉科技学院2006届毕业设计论文

及广播地址数据包)和多点播送地址包,小于64字节的包丢弃(这是协议的规定,设置成接收是用于网络分析),校验错的数据包不接收。

TCR发送配置寄存器,启用CRC自动生成和自动校验,工作在正常模式。 DCR数据配置寄存器,设置为使用FIFO缓存,普通模式,8位数据传输模式,字节顺序为高位字节在前,低位字节在后(符合我们的习惯,如果用16位的单片机,设置成16位的数据总线操作会更快)。

IMR中断屏蔽寄存器,设置成0x00屏蔽所有的中断。设置成0xff将允许中断)。

MAR0~MAR7是设置多点播送的参数。提供对组播地址的过滤跟CRC的逻辑有关。MAR0~MAR7全部设置为0xff时,将接收所有的组播数据包,将MAR0~MAR7全部设置为0x00时,将不接收所有组播地址的数据包。该值被设置为: MAR0=0x00; MAR1=ox41; MAR2=0x00; MAR3=0x80; MAR4=0x00; MAR5=0x00; MAR6=0x00; MAR7=0x00;

这8个寄存器的值是根据组播地址数组的值生成的,提供对组播地址的过滤,过滤掉一些不属于自己接收组播数据包。

因为PAGEZ的寄存器是只读寄存器,所以不能和不需要设置; PAGE3的寄存器与NE200O不兼容,所以也不用设置。

4.1.2 接收数据

网络接口通过两个DMA操作来完成数据的接收和发送,本地DMA完成

32

武汉科技学院2006届毕业设计论文

RTL8019与其内部FIFO队列之间的数据传送,远程DMA完成RTL8019与CPU之间的数据传送。

对RTL8019接收数据操作,有查询和中断两种方式。

在中断方式下,控制器每收到一个完整的以太网数据包后,向CPU发出中断请求,CPU响应RTL8019AS的中断申请后,进人中断服务程序并开始接收数据。

在查询方式下,通过查询CURR和BNRY两个寄存器的值来判断是否收到一帧数据。当BNRY+1与CURR不等时,说明接收缓冲区接收到了新的数据帧。若收到新数据帧,则先读取前2个字的数据,这2字的数据代表此次传输的数据帧的基本状态:第一个字的低字节表示接受状态,与ISR寄存器相对应;第一个字的高字节为下一个包的开始地址指针;第二个字节为本数据包的长度(以字节为单位计算)。本课题采用查询方式接收数据包,具体接收过程如下:

1.读取当前页寄存器CUUR和边界寄存器BNRY,并判断BNRY十1是否等于CUUR。如果相等,则不执行一下步骤;读出中断状态寄存器ISR,并写回该寄存器; 2.读出中断状态寄存器工SR,并写回该寄存器; 3.设置CR为22H,选择页面O;

4.设置远程DMA地址寄存器RSCRI、RSCRO为接收地址指针,该指针高位字节初始值为PSTART+1,低位字节为O;

5.设置远程DMA计数器RBCRI、 RBCRO为0004H,先读取4个字节的数据; 6.设置CR为远程读OAH,读数据端口。读出4个字节,实际上是读两次,因为数据接口是16位的;

7.设置CR为22H,远程DMA完成;

8.根据接收状态判断数据包是否接收正确,如果接收正确,需要重复以上接收过程再启动远程DMA,收取该数据包数据,只不过设置远程DMA计数器RBCRI、RBCRO为刚才接收到的数据包长度;

9.结束远程D砒,设置下一次接收数据指针和接收边界寄存器(即为下一包的开始指针地址)。

33

武汉科技学院2006届毕业设计论文

4.1.3 发送数据

数据的发送过程应包含三个步骤:数据包的封装通过远程DMA将数据包 送入RTL8019的数据发送缓冲区;通过RTLSO19的本地DMA将数据送入FIFO 进行发送。具体过程如下:

1. 包在发送前应该按规定的格式封装好,格式如下:

表4-2 包格式

目的地址(6字节) 源地址(6字节) 协议(2字节) 数据(不少于46字节)

2.把上面的数据包通过远程DMA写入RTLSO19的数据发送缓冲区: a.置CR为22H,选择寄存器页面0;

b.设置中断状态寄存器ISR为4OH,清除发送完成标志;

c.设置远程DMA地址寄存器RSA4RI、RSARO为400OH,即发送缓冲区开始地址; d.设置远程DMA字节计数寄存器RBCRI、RBCRO为发送数据包的长度; e.设置CR为12H,设置命令寄存器为远程DMA写; f.往数据端口写入发送数据;

g.查询中断状态寄存器15R,等待远程DMA完成;

h.设置CR为22H,设置RBCRI、RBCRO为O,远程DMA停止; i,设置ISR为40H,清除发送完成标志。 3.启动本地DMA,把数据发送出去:

a.设置发送字节计数器TBCRI(06H)、TBCRO(05H)为发送数据包的长度; b.设置发送页面起始地址TPSR(04H)为40H,即发送缓冲区开始地址高位字节; c.设置命令寄存器CR为26H.启动发送。

4.2 ARP(地址解析协议)协议的实现

ARP协议的实现比较简单。当系统收到一个目的IP地址为本机的IP地址的ARP请求报文后,它就把MAC地址填上去,然后用两个目的端地址分别替换两个

34

武汉科技学院2006届毕业设计论文

发送端地址,并把操作字段置为2,最后把它发送出去。

考虑到单片机的资源,本设计中使用全局变量保存源、目的的IP地址和源、目的物理地址,因此在每次通信前都需要操作全局变量,重新进行ARP请求与应答。这种方式占用单片机的资源少,但可以实现地址的解析,在点对点通信时很有效。

整个ARP处理过程,主要用下面几个函数实现: (1)void init_arp(void)初始化ARP;

(2)void arp_send(UCHAR * hwaddr, ULONG ipaddr, UCHAR msg_type) ARP请求;

(3)void arp_rcve(UCHAR xdata *) ARP应答;

(4)UCHAR xdata * arp_resolve(ULONG) ARP回应处理; (5)void age_arp_cache(void) Aged out a cache entry; (6)void arp_retransmit(void) ARP重新发送。 设计要点:

(1)ARP协议以及IP协议都是以太网协议的上层协议,因此在ARP报文上需要添加以太网首部(包括源物理地址、目的物理地址、帧类型,共14字节)。 (2) 由于前面已经介绍了以太网驱动程序,只要封装好ARP数据包,即可调用以太网的驱动程序发送ARP请求或应答。

(3)由于以太网数据报最小为60字节,而整个ARP报文(28字节)加上以太网首部(14字节)也不过只有42字节,因而在发送ARP数据报时,需要填充数据报至60字节。

4.3 IP协议的实现

IP协议主要负责两项功能:拆包和封装数据包。当从数据链路层接收到一个IP数据报时,它通过检查该数据报的版本号、校验和与目的IP地址是否符合要求,然后解析出协议类型,交由上层协议处理。程序流程图如图4-4所示。IP

35

武汉科技学院2006届毕业设计论文

协议发送数据报过程比较简单,当上层如TCP层要求传送一个数据报时,IP层根据要求填好各个首部字段,然后把IP报头加到上层数据的首部,再交由链路层处理就可以了。封装如图4-2所示。

开始 从链路层收到 一个数据报 N 检验版本号、校验和、目的IP地址是否符合要求 Y 记录协议类型,拆数据报 丢失该数据报 协议类型所指明的上层协议处理模块 返回

图 4-2 IP协议接收数据报处理过程

36

武汉科技学院2006届毕业设计论文

表4-3 IP数据包的封装

14字节 20字节 n个字节 以太网首部 IP首部 上层数据报

IP相关的声明及函数在ip.h和ip.c。文件内,主要实现以下两个子程序: (1) void ip_send(UCHAR xdata*outbuf,ULONG ipaddr, UCHAR proto_ id,DINT len)发送IP数据:

该子程序用来创建一个发送数据报。当系统需要发送数据时,IP层以上的协议将调用该子程序。

(2) void ip_rcve(UCHAR xdata *inbuf)接收IP数据;

该子程序检测一个外来的数据包,并对数据包作相应的处理。

4.4 ICMP协议的实现

ICMP(网际控制报文协议)与其它高层协议一样,ICMP报文也是封装在IP数据报的数据部分中进行传输的,如图所示。包含ICMP报文的IP数据报报头“协议”字段指出数据区内容为ICMP报文。虽然ICMP报文由IP数据报传输,但并不把它当成比IP更高层的协议,而把它当作IP的一个扩展,因为它并不是上层协议赖以存在的基础,而只用来提供主机与主机或主机与路由器之间传达控制和差错信息。它的协议格式如图所示。类型(TYPE)字段指明ICMP报文的类型,包括Ping请求和应答(TYPE分别为8和0)、报文重定向(TYPE为5)、时间戳请求和应答(TYPE分别为13和14)等。代码字段提供关于类型字段的进一步信息。校验和字段为ICMP首部和数据区的整个ICMP报文的检验和,它的算法与IP首部检验和的算法一致。

37

武汉科技学院2006届毕业设计论文

表4-4 ICMP报文

8位类型

(不同类型和代码有不同内容)

8位代码 16位效验和 Ping协议是ICMP报文中的一种,协议格式如图所示。解释如下: (1)类型和校验和字段上面己经提到。代码字段对于Ping请求和应答都为零。 (2)标识符字段指明该数据报的ID,用于匹配请求与应答。

(3)序号字段用于一组Ping请求和应答,序号从0开始,每发送一次新的Ping请求,该值就加一。请求方可以从该值知道是否有分组丢失、失序或重复。. (3)选项数据字段为一任选的数据区,由发送方任意选定。

表4-5 Ping协议格式

类型(0或8) 代码(0) 检验和 序号 标识符 选项数据

38

武汉科技学院2006届毕业设计论文

开始

返回 调用IP层处理子程序 计算并填充校验和字段 置类型字段与校验和字段为0 Y 拷贝Ping请求数据报 计算校验和正确与否 N 收到一个Ping请求数据报 图4-3 Ping应答处理过程

4.4.1 Ping程序的实现

Ping请求和应答可以测试目的站是否可达和是否响应,它可为网络管理员或用户提供网络问题信息。经过简化的ping能够完成最基本的连通测试功能。

当主机或路由器向指定目的站发送Ping请求时,任何收到回显请求的机器都将发送一个回显应答。回显请求包含一个任选数据区,应答必须包含请求中任选数据区的数据。在嵌入式Internet中,一般使用Ping应答来报告嵌入式系统是否处在正常运行当中,一般可不用实现Ping请求。Ping应答程序流程图如图4-8所示。

39

武汉科技学院2006届毕业设计论文

4.5 UDP协议的实现

UDP是一个简单的面向数据包的运输层协议:进程的每个输出操作都正好产生一个UDP数据包,并组装成一份待发送的IP数据包。这与面向流字符的TCP协议不同,UDP数据包封装成一份IP数据包的格式如图4-4所示。

IP数据报

UDP数据报

IP首部 20字节

UDP首部 8字节

UDP数据

图4-4 UDP封装

UDP的声明及函数在文件udp.c和udp.h内(详细代码见附录):

(l)void udP_send(UCHAR xdata*inbuf,UINT port,UINT len)发送UDP数据报;

(2)void udp_rcve(UCHAR xdata*inbuf, UINT len)接收UDP数据报;

(3)void udP_echo_service(UCHAR xdata*inbuf,UINT len)一个简单的处理UDP协议的函数将接收到的字符再发送回源IP地址。

4.6 TCP协议的实现 4.6.1 TCP状态机

TCP协议是整个TCP/IP协议的核心,也是传输层中最复杂的协议。TCP协议在两个端点之间建立了等效于物理连接的逻辑连接。数据何以沿着这个连接双向传输。连接的双方必须对发送和接收的数据保持跟踪,以便能够检测出数据流中的遗漏和重复。

40

武汉科技学院2006届毕业设计论文

TCP采用的是字节序列机制(byte-sequencing),这种方法要求建立连接的双方对发送和接收的数据的字节计数进行跟踪。当一定量的数据到达后,接收者对字节计数进行确认。因此程序就对已经记录的字节数判断。

TCP协议可以用有限状态机来描述的,有限状态机是这样一种机器,它通过有限个状态,并且在某一时刻只能处于某个状态。事件使机器进入新状态,换言之,事件是加到一个状态上的输入,它可改变状态并导致输出。图3-11所示,就是一个完整的TCP状态转移图。 但是对于WEB服务器而言,其实际在使用并没有涉及到TCP所规定的所有状态,因此,我们可以考虑对其进行简化。

对于Web服务器,其TCP的状态机做了简化,只存在6个状态,这六个状态是:TCP_Listen、TCP_SYN_Rec、TCP_ SYN_Sent、TCP_Established、TCP_Close_wait和TCP_ Last_ Ack。每个状态对应由一个处理函数,通过判断变量State的值来实现对TCP的状态的调度,即它处理接收到的TCP数据,并做出相应的判断,跳入某种状态。从而实现TCP的状态机的功能。状态转移图是整个TCP软件设计的灵魂,将状态和作用于状态的事件相联系,这里用变量State来保存一个连接的当前状态。State的取不同的值代表不同的状态。

4.6.2 TCP的接入与终止

TCP是面向接入的。在将数据发向远方主机之前,必须先建立TCP接入。这意味着只有在两端都实现了TCP接入后,才可以进行点-点之间的数据交换。建立TCP的点——点连接,包括“三重握手”的操作: (l)客户机向服务器发出同步段(SYN),请求接入。

(2)服务器向客户机发出同步-应答段(SYN-ACK)。一方面作为对客户请求接入的响应,一方面要求客户端也进行接入。

(3)客户机向服务器再发出应答段(ACK)。作为对服务器所发请求接入的响应。同样,包含数据的每一个TCP段也都应该取得对方返回的应答段(ACK)作为握手信号来保证数据被可靠地接收。应答段本身不再需要应答,避免应答陷入无穷的嵌套。客户机请求对端接入时,要随机地选送一个初始序号。在第二步中建立TCP

41

武汉科技学院2006届毕业设计论文

接入时,服务器也要选送一个自己的初始序号,并用这个号作为对客户机送来序号的应答号返送给客户机。这样,每一个TCP段中都包含一个序号,并以这个序号作为数据流的定位器,而返给客户机的应答号则表达所发来的数据已经妥收。消除传输中的错误,依靠持续跟踪已发出数据段的应答是否返回。在设定的时间段内,如果未收到该段的应答则应重发。如果还是未收到应答,则适当增加间隔时间再次重发。在总的极限时间段内一直不能等到应答返回,则本次接入失效,并应将出错情况及时通知应用程序。每次成功的接入,只要本端和对端没有执行过关闭操作,就一直是接通的。 关闭TCP接入共有4步:

(l)客户机向服务器发出关闭段(FIN)。此时,客户机不能再向远方服务器发送数据,但是仍可接收数据。

(2)服务器向客户机发出关闭一应答段。此时,服务器还可以向客户机发送数据,即接入处于“半关闭”状态。

(3)服务器向客户机发出关闭段(FIN),关闭本侧的接入。仍可接收数据。一方面作为客户请求接入的响应,一方面要求客户端也须接入。此时,服务器不能再发送数据。

(4)客户机为响应服务器的关闭,向服务器发出关闭一应答段。至此,接入已从两端拆除完毕。客户机不可紧接着再次请求恢复刚刚关闭的接入。需要有一个间歇时间,避免前后两次接入产生牵连。

TCP通过数据窗的滑动来调整数据的传送率。只要使用TCP,就不可能在所建立的点一点接入上实现数据的全速传送,原因在于数据流中被插入了有些随机性的应答环节,它改变着传送率。每一个TCP段中,服务器都将其当前可用于接收的数据容量(即TCP数据窗大小)通知对方,这样做的好处是,发送端是在明了接收端当前实际处理能力的基础上向网络派送数据,这对于网络通信有效性是有积极意义的。

4.6.3使用简单的确认机制

42

武汉科技学院2006届毕业设计论文

序列号和确认号这两个字段用于协同完成TCP协议中的确认工作。对于每个接收到的数据包进行确认号的计算,需要从接收到的数据包中提取TCP报文的数据部分长度,并进行计算,这增加了处理器的运算量。但如果每次只对单个TCI)报文进行确认的话,并没有太大的难度。

问题在于标准的TCP协议使用慢启动的滑动窗口机制。滑动窗口是一种在流量控制和网络传输效率之间取得折中的方案,它允许发送方在等待一个确认之前发送多个窗口。对于使用滑动窗口的TCP连接,其确认是一种批量的确认,处理器要对多个数据包连续传输进行维护和处理,困难较大。滑动窗口的一个极限情况是只使用一个窗口,这便成了一种简单的确认方法。使用了该方法后,所有的处理只是对单个数据包的发送和处理,节约了系统的资源。

4.6.4 TCP变量的定义

TCP数据被封装在一个IP数据报中,如图4-5所示。 IP数据报 TCP数据报 IP首部 TCP首部 TCP数据 图4-5 TCP数据在IP数据报中的封装

TCP协议包含的程序

TCP协议的声明及函数在文件tcp.c及tcp.h中, (1) init_ tcp(void)初始化TCP协议

(2) Tcp_send(UINT flags, DINT hdr_len, UCHAR nr)发送TCP (3) Tcp_ retransmit(void)重发TCP数据 (4) Tcp_ inactivity(void)停止TCP

(5) Tcp_ rcve(UCHAR xdata*inbuf, UINT len)接收TCP数据。

43

武汉科技学院2006届毕业设计论文

4.7 HTTP协议的实现

HTTP最起码的功能应该能够对所接收到的TCP包中的信息提取出HTTP消息,并对此消息进行分析,以便知道对方请求内容,并将相应的信息发送给对方。WEB服务器本身可根据不同的URL来分段存储信息至所指定的各存储器中,以便随时调用。

标准的WEB服务器通过多线程或多进程同时处理来自多个客户机的连接,但考虑到单片机的处理能力以及存储空间大小,并不用实现这样的功能,而只实现一次只处理与一个客户机的连接。当所需数据传输完成后,断开当前的连接,接着处理与其它客户机的连接。

用HTTP协议实现WEB服务器的程序流程图如图4-6所示。首先服务器绑定本地IP地址和本地端口号80,然后监听80端口号。当远端客户机访问服务器时,先与服务器进行TCP连接。完成三步握手后,服务器从数据请求包中解析出HTTP方法(这里只实现HTTP协议的GET方法,其它的方法有待日后完善),并得到URL字段,根据该字段中所指定的存储页面,服务器读取存储器中相应的数据,传送该数据给TCP层处理,并最终发送给远端客户机。

44

武汉科技学院2006届毕业设计论文

监听80端口 开始 绑定本地IP地址和本地HTTP端口号80

有数据请求吗? N

返回 图4-6 HTTP数据处理过程

将指定数据传给下层TCP 得到URL字段 GET方法 其它方法 Y 解析HTTP头,查找HTTP方法 4.7.1 HTTP处理程序

当客户端发送了一个HTTP请求后,HTTP处理程序查询文件目录,如果发现存在该文件,将文件的内容复制到TCP数据段中。如果没有发现所请求的文件,就返回一个HTTP错误标识。

45

武汉科技学院2006届毕业设计论文

针对实现本次实验结果, HTTP协议处理程序包括: (HTTP协议的声明及函数在文件http.c及http.h中) (1) init_ http(void)初始化htttp协议;

(2) UINT http_server(UCHAR xdata *, UINT, UCHAR, UCHAR)编写低层子程序,主页面(欢迎文字);

(3) UINT http_server_1(UCHAR xdata *, UINT, UCHAR, UCHAR)编写低层子程序,第一页面(图片和基本文字显示);

(4) UINT http_server_2(UCHAR xdata *, UINT, UCHAR, UCHAR) 编写低层子程序,第二页面(背景音乐和基本文字显示);

(5) UINT http_server_3(UCHAR xdata *, UINT, UCHAR, UCHAR) 编写低层子程序,第三页面(监控程序)。

5. 嵌入式WEB SERVER 的应用

5.1 智能家居和家庭自动化 5.1.1 概述

智能家居系统又称智能家庭局域网,是适应现代化家庭生活而形成的一个形式多样化的网络结构。智能家庭局域网主要包含家庭计算机网络、信息家电、智能仪表、消防与安防设备、家庭多媒体网络等各种不同类型的子网。根据各个家庭的具体需求量体裁衣,构成一个特定形式的智能家居系统。智能家庭局域网的核心是家庭网关,它不仅负责各种不同类型子网之间的协议转换,而且还要完成家居智能控制和Internet接入功能。智能家居系统己由开始时以PC为控制中心逐渐转向以嵌入式家庭网关为核心的嵌入式系统领域。同时人们生活水平的提高,对住宅环境在舒适、安全、高效、节能和便捷等多方面提出了更高要求,因此智能家居和家庭自动化系统应运而生。下图5-1就是一个信息家电网络接入Internet的示意图。

46

武汉科技学院2006届毕业设计论文

网 关 信息家电网络 Internet 图5-1信息家电网络接入Internet

它的主要功能:

1.对电器设备进行自动化监控,对能源进行优化管理与控制,如家电开关、空调调节、灯光控制、声音调节、温度控制、湿度控制、安全和保安管理及水、电、气三表自动计费和转账管理等。

2.对数字设备实现互联,内部家用网络接入设备之间局域网的连接,如多媒体计算机、电视、摄/录像机、VCD/D VD和数码相机等娱乐设备。对外实现与互联网连接,实现远程监控、教育、医疗、存贷、购物等。

智能家居系统的提出和实现不仅会带来普通居民用户家庭生活方式上的变革,而且将波及工业控制等许多与Internet相关的嵌入式应用领域。而以智能家居为最基本构成单元的一个有序化网络体系结构的诞生则会为Internet注入新的生机和活力。如何建立一个高效率、低成本的智能家居系统已成为当今世界的一个热点问题。

5.1.2 几种设计方案及比较

嵌入式Internet是指设备通过嵌入式模块而非PC系统直接接入Internet,以Internet为介质实现信息交互的过程,通常又称为非PC Internet接入。随着嵌入式Internet产品的开发和应用,远程监控、数据采集和系统重构等领域将会发生深刻的变革。

具有Internet功能的网络化电子设备的实质是在电子设备的基础上实现网络化和信息化,从而实现远程控制。电子设备网络化的方案要么是直接在电子设

47

武汉科技学院2006届毕业设计论文

备上实现TCP/IP,使之直接连上Internet要么是让电子设备经过通信转换后通过公共的TCP/IP转接口(或称网关Gateway)与Internet相连。目前存在的几种设计方案如下:

1.高性能处理器加嵌入式操作系统方案

该方案是将嵌入式操作系统集成到以高性能处理器为核心的嵌入式系统中,完成包括连入Internet等一系列任务。各种任务由嵌入式操作系统统一调度完成。从八十年代起,国际上就开始进行一些商用嵌入式系统和专有操作系统的开发,现在己经有了一些成熟的操作系统如:Windows CE、 VxWorks、Psos、LinuX、VRTX等。但要能使用嵌入式操作系统必须满足一定的资源条件。而对于一般8/16位单片机内部的资源十分有限,不能载入复杂的嵌入式操作系统并进行快速处理,所以不能采用这种方案。 (l)采用本方案有以下的优点:

①嵌入式设备可直接拨号上网,外围电路简单且系统功能强大。

②近年来,随着u cLinux的普及,面临压力的各厂商开始考虑开放源代码,这无疑会促进其发展。 (2)不足之处:

①一次性投资较大:主流产品如Vx Works及pSOS价格昂贵。如采用免费的uclinux,则开发工作量会大大增加。

②须采用32位高性能处理器,在大多数场合采用高端的产品会造成资源浪费,总体成本高。

2.单片机控制以太网网卡进行数据传输

单片机加载TCP/IP协议控制以太网网卡进行传输数据,并通过TCP/lP协议连接到互联网也是可行的一种方案。它的基本思路是:在远程控制端进行的操作首先通过路由器寻找到目标,再通过网卡的接口传入单片机。在单片机中加裁的驱动程序将之转换成物理帧格式,最后由TCP/IP协议将之转化为应用层控制命令。因为单片机内部资源有限,要完成上网任务必须精简TCP/IP协议,这需要深入了解TCP/IP协议。此外,完成此方案还须了解单片机和网卡驱动程序。本

48

武汉科技学院2006届毕业设计论文

方案由于在用户中不使用PC机平台或网关,故而在价格上颇具优势,适合于工业监控和智能小区。

(1)采用本方案有以下的优点:

①不需经过网关代理,总体价格低廉。

②产品系自己搭建,进一步开发、维护相对容易。 (2)不足之处:

①开发周期长,需要对单片机、TCP/IP协议、网卡驱动程序有较深的了解。 ②协议和各种程序要占用一定的系统资源。 3.局域网挂接Internet解决方案

局域网挂接Internet解决方案是目前常见的一种解决方案。它的基本原理是采用专用网络(如RS-232,RS一485,CAN Bus等)把一小批单片机连接在一起,然后再将专用网络接到网关上。网关可以是PC机,它将专用网络上的信息转换为TCP/IP协议数据包,然后发到网上实现信息共享。在工业控制里,由于生产现场遍布信息节点,而又没有必要将节点都直接联入Internet,故采用局域网挂接Internet是一种较理想的解决方案。 (l)采用本方案有以下的优点:

对电子设备高度分散的场合非常适用。另外局域网的技术已经很成熟,适于多种场合,可支持双绞线、电力线、光缆、射频无线、红外无线等; (2)不足之处:

它依赖PC机作为网关进行协议转换,在多个单片机系统分散的情况下,专用网络布线极为不便;需在PC机上安装专门的协议转换软件,而这些软件费用较高。

5.2 智能家庭网络

5.2.1 智能家庭网络的概念

49

武汉科技学院2006届毕业设计论文

智能家庭网络是指在家庭内部通过一定的传输介质将各种电子设备、电气设备和电气子系统连接起来,采用统一的通信协议,对内,管理家庭内部网中智能家电的运作、协调;对外,实现家庭内部网和Internet的连接,支持远端对家庭内部设备的控制和监测。

智能家庭网络能实现以下功能。设备管理:通过各种通信工具或装置控制家电设备;②家居安全:家庭内部出现紧急情况(如火灾)时能自动向相关人员或部门发送信息,家电设备故障能逐渐形成自诊断、自反馈;③能源管理:水电气三表自动显示并抄送到管理中心,定时开关供暖通路;④提供信息服务和家庭信息数据的管理及备份,提供拨号、6789、宽带、代理服务器、电缆电视等的接入管理;⑤提供音视频服务和娱乐性服务。

智能家庭网络系统结构如图5-2所示。家庭信息系统为千兆以太网;网络拓扑结构为总线型或树型,有利于系统的扩展;传输介质采用一对双绞线,有利于降低成本和力一便安装。

Internet

个人电脑

家庭网关

音视频设备

Ethernet

设备1

设备2

·····

设备N

以太网卡

以太网卡

以太网卡

图5-2智能家庭网络系统的结构

利用以太网卡实现网络接口,将嵌入式系统连入千兆以太网,满足底层协议,即数据传输符合IEEESO23协议。高层协议TCP/IP协议由家庭网关完成。以太网卡将家庭设备串口输入的水、电、气和各种警情按IEEE802.3协议帧送入千兆以太网,家庭网关按照TCP/IP协议进行高层互连,接入远端Internet。由Internet传入的数据或命令依次通过家庭网关和以太网卡将数据帧拆包,通过串口送入家

50

本文来源:https://www.bwwdw.com/article/8dro.html

Top