首页 基于DM9000A的TCP通信设计毕业设计(论文)(已处理)

基于DM9000A的TCP通信设计毕业设计(论文)(已处理)

举报
开通vip

基于DM9000A的TCP通信设计毕业设计(论文)(已处理)基于DM9000A的TCP通信设计毕业设计(论文)(已处理) 基于DM9000A的TCP通信设计 摘 要 随着时代的发展,因特网的广泛普及,人们对智能化产品需求的增加, 许 多应用领域纷纷与网络技术结合,出现了信息家电如PDA、可视电话 、移动电 话 、机顶盒和数码相机等嵌入式设备,它们正逐渐走向网络化,以共享互联网 中庞大的信息资源。本课题设计了一个基于DM9000A的TCP通信,以DM9000A 以太网控制器为核心,TCP/IP协议为重点,采用软硬结合方式实现设计。课题 系统的介绍了硬件网络控制器DM90...

基于DM9000A的TCP通信设计毕业设计(论文)(已处理)
基于DM9000A的TCP通信设计毕业设计(论文)(已处理) 基于DM9000A的TCP通信设计 摘 要 随着时代的发展,因特网的广泛普及,人们对智能化产品需求的增加, 许 多应用领域纷纷与网络技术结合,出现了信息家电如PDA、可视电话 、移动电 话 、机顶盒和数码相机等嵌入式设备,它们正逐渐走向网络化,以共享互联网 中庞大的信息资源。本课 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 设计了一个基于DM9000A的TCP通信,以DM9000A 以太网控制器为核心,TCP/IP协议为重点,采用软硬结合方式实现设计。课题 系统的介绍了硬件网络控制器DM9000A的内部结构与特点,并编写了相应的程序 代码及阐述了它的驱动原理,采用软件编程定义TCP/IP协议层的各帧结构, 通 过 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 协议的通信原理及具体实现过程,将简化的TCP/IP协议移植到ARM硬件 平台。并利用协议的接口函数编写上层应用程序,最后在应层实现EM客户端与 PC服务器端之间的数据传输。实验证明,本课题的设计能够成功的实现ARM平 台上的移植,并完成数据的准确传输,这将为以后网络之间的通信提供了方便。 关键词:DM9000A;以太网;TCP/IP协议 TCP communication design based on DM9000A Abstract With the development of the times, the popularization of internet widespread, people’s demand on the increase of intelligent product , many application domains in abundance with networking union. Appeared information home appliances such as PDA, videophone, mobile telephone, set-top boxes and digital camera etc, they are gradually embedded equipment, to share internet towards network in the enormous information resources. This topic is TCP communication design based on DM9000A, takes the DM9000A Ethernet controller as the core, TCP/IP protocol for key point, and selects the soft and hard union method to realize the design. This topic systematically introduces the hardware network controller DM9000A’s internal structure and characteristics, and have compiled the corresponding procedure code and elaborated its actuation principle. Using software programming definition TCP/IP protocol layer each frame structure, and realizes the process specifically through the analysis agreement's correspondence principle, will simplify the TCP/IP protocol transplanted to ARM hardware platform. And using agreement connection function compilation upper formation application procedure, finally in should the level realize between the EM client side and the PC server end data transmission. The experiment proved that this topic's design can succeed realizes in the ARM platform transplant, and completes the data the accurate transmission, this will be for the communication between network and network and will provides convenient for every one after. Key word:DM9000A; etherne;TCP/IP protocol 目 录 1 绪论 1 1.1 TCP/IP协议的发展 1 1.2 目前国内外TCP/IP协议的应用 2 1.3 本课题的设计内容与结构 2 2 以太网接口 4 2.1 硬件平台描述 4 2.2 DM9000A芯片的内部结构和工作原理 5 2.3 DM9000A的驱动 7 2.4 以太网接口设计 12 3 TCP/IP通信协议的实现 16 3.1 TCP/IP通信的设计思想 16 TCP/IP协议的介绍 16 数据报的封装 17 主程序流程 17 3.2 ARP协议及其实现 19 3.3 IP协议及其实现 23 IP协议帧数据结构 23 IP协议的实现 25 3.4 ICMP协议及其实现 27 3.5 TCP协议及其实现 29 TCP协议帧数据格式 29 TCP协议端口及套接字 31 TCP协议的通讯过程 31 TCP协议的实现 34 4 应用层的实现 36 结 论 39 致 谢 40 参考文献 41 附 录 42 1 绪论 1.1 TCP/IP协议的发展 早在阿帕网(ARPR)产生运作之初,通过接口信号处理机实现互联的电脑并不多,大部分电脑相互之间不兼容,在一台电脑上完成的工作,很难拿到另一台电脑上去用,每一个电脑在各自的系里都运行良好,但却不能共享资源。面对这样的状况,科学家们提出这样一个理念:让所有电脑能够实现“资源共享”。这就得在这些系统的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 之上,建立一种大家共同都必须遵守的标准,让不同的电脑按照一定的规则进行“谈判”,并且在谈判之后能“握手”。 随着接口信号处理机”(IMP)的研试及网络测评中心的建立,科学家们又提出用网络思想设计网络布局,网络测评系统的想法。然而考虑到如何让各种电脑都认可的信号来打开通信管道,并且数据通过后还要关闭通道的问题上,便引进了通信“协议”的概念。 70年代,“包切换”理论为网络之间的联接方式提供了理论基础,建立一种对各种操作系统普适的协议,利用包交换技术实现网络之间的通信。这就产生了目前在开放系统下的所有网民和网管人员都在使用的“传输控制协议”和“因特网协议”即TCP/IP协议。通过制定详细定义的TCP/IP协议标准,第一次实现了将信息包通过点对点的卫星网络,再通过陆地电缆,再通过卫星网络,再由地面传输,贯串欧洲和美国,经过各种电脑系统,全程9.4万公里竟然没有丢失一个数据位,远距离的可靠数据传输。从而验证了TCP/IP的成功,使其得以发展[1]。 TCP/IP的成功,给网络通信带来了很多方便,最初的TCP/IP是借助与因特网的密切关系才得以发展起来的。在网络中,TCP/IP提供了在两端计算机之间数据交换的环境,它的功能取决于两台计算机间进行的通信内容,即通过在两端 计算机上运行的程序决定TCP/IP网络究竟能做些什么。TCP/IP协议具有可靠性与面向连接性,能使计算机之间直接交换数据,实现资源的共享。不管在商务还是在家庭中,把计算机与网络相连,利用TCP/IP协议通信获得全世界信息,推进了TCP/IP技术的增强。TCP/IP包含了所有网络综合技术,具备了涵盖所有类型网络的功能,目前大量的研究机构研究将它推向开放式的网络化协议。TCP/IP技术在与时俱进,不断增强,它已进入我们生活的方方面面。 1.2 目前国内外TCP/IP协议的应用 目前TCP/IP协议已成为占主导地位的通讯协议,它能使各种业务在不同的网上实现互联互通,从技术上为网络融合奠定了基础,是研究和应用现代网络必不可少的知识,也是从事网络设计与应用工作的基石。它之所以能够获得如此成就,是因为它具有如下的特点: 开放的协议标准,可以独立于特定计算机和操作系统的开放方式;独立于特定的物理网络硬件,可以运行在多种网络传输介质上;共同的地址规划 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,使得整个网络中的任何TCP/IP设备都具有一个唯一的地址;标准化的高层协议提供了多种可靠的用户服务。 TCP/IP在诞生之初,主要以文字为中心进行信息交换,用于远程登录、电子邮件和文件传送等方面的应用。不久,它应用于万维网,实现了图像和声音、动画等在内的大量可视化信息的访问。随着因特网的的普及与发展,TCP/IP也广为人知,应用于介绍各种新闻、提供各种服务中,如传送影像和声音的服务,航天飞机升空实况转播,音乐会实况传播,讲演活动的介绍等。现在,TCP/IP已推广到因特网以外的网络领域,比如商店的收款机、银行的ATM自动取款机、测量仪器、机械设备的控制与监视、公司内部网络及家庭内的居室自动化等等,开展了各种网络应用[2]。 随着人们对智能化产品需求的增加,未来的嵌入式产品,包括各种家电、通信、PDA、仪器仪表等设备正逐渐走向网络化,TCP/IP协议在嵌入式系统的研究也越来越有实际意义,因而基于TCP/IP协议使嵌入式设备的网络化开发也有广阔的市场前景。目前嵌入式系统作为新技术的发展方向,已广泛的应用在军事国防,消费电子,网络通信,工业控制等领域。随着因特网的普及,出现了信息家电,如PDA、可视电话 、移动电话 、机顶盒和数码相机等嵌入式设备,它们的市场需求也越来越大,正逐渐走向网络化,以共享互联网中庞大的信息资源 。 TCP/IP协议已成为目前最为流行及广泛使用的以太网协议,TCP通信也将成为基于ARM的有线通信的的主要通信方式,实现远程图像监控系统、远程温度环境监控系统,网络通信等广泛的应用。 1.3 本课题的设计内容与结构 本课题是基于DM9000A的TCP通信设计,首先对以太网控制器DM9000A作了简要的说明,并阐述了它的驱动原理,编写了相应的程序代码,其次分析了TCP/IP协议的通信原理及实现过程,讲述了以太网层、传输层、网络层的具体处理过程,最后基于TCP协议进行网络通信,实现应用层的数据传输设计。 本课题共分为四部分,内容安排如下: 本课题第一部分为绪论,介绍了TCP的发展、应用背景及国内外发展前景,说明了TCP/IP应用的领域及网络通信的可靠性。 本课题第二部分为以太网接口DM9000A。主要介绍了本课题的硬件平台,DM9000A的工作原理及驱动过程等。编写相关程序代码,实现数据的接收、发送处理,它为本课题的主要部分,实现了网络数据的传输。 本课题第三部分为TCP/IP协议的实现。主要介绍了以太网层、传输层、网 络层等各层中的协议及数据的接收、发送实现。针对TCP协议,更加系统的说明了它的具体通讯过程,如建立连接、数据传输、关闭连接等。这一部分对每个协议的实现过程都有概括的表述,做为基础,有利于一些的理解。 本课题第四部分为应用层的实现。介绍应用层的协议功能,实现应用层客户端与服务器端之间的通信。 2 以太网接口 2.1 硬件平台描述 图2.1 硬件平台 本课题实现的硬件平台如图所示。在这个开发平台上,ARM处理器选用S3C440X,与ARM连接的有JTAG接口,用于调试程序用的。电源晶振是给ARM提供电源,ARM才能进行正常工作。FLASH相当于ARM的ROM,用来储存程序。SDRAM用来储存数据。串行口用于跟外界连接,进行数据交换,如把下载到ARM中。LCD接口是连接LCD显示器的,用来显示ARM运行的结果,在调试仿真的时候很方便、直观。USB接口用于跟外界交换数据,如将数据从U盘中传入ARM中。网络驱动中用的网卡是DM9000A,用于S3C440X和网络间的数据接收和发送。设计中将CMD引脚与处理器的地址线ADR2网络控制器CMD引脚决定了处理器访问的是哪个端口寄存器:当CMD 0时,主机访问的是INDEX端口寄存器;当CMD 1时,访问的是DATA端口寄存器。总体介绍 DM9000AMAC控制器与一般处理接口,一个10/100M自适应的PHY和4K DWORD值的SRAM 。它的目的是在低功耗和高性能进程的3.3V与5V的支持宽容。 DM9000A还提供了介质无关的接口,来连接所有提供支持介质无关接口功能的家用电话线网络设备或其他收发器。该DM9000A支持8位,16位接口访问内 部存储器,以支持不同的处理器。DM9000A物理协议层接口完全支持使用10MBps下3类、4类、5类非屏蔽双绞线和100MBps下5类非屏蔽双绞线。这是完全符合IEEE 802.3u规格,它的自动协调功能将自动完成配置以最大限度地适合其线路带宽,还支持IEEE802.3x全双工流量控制。这个工作里面DM9000A是非常简单的,所以用户可以容易的移植任何系统下的端口驱动程序[3]。 2. 特点 (1)支持处理器读写内部存储器的数据操作命令以字节/字/双字的长度进行 2)集成10/100M自适应收发器 3)支持介质无关接口 4)支持背压模式半双工流量控制模式 5)IEEE802.3x流量控制的全双工模式 6)支持唤醒帧,链路状态改变和远程的唤醒 7)支持自动加载EEPROM里面生产商ID和产品ID 8)支持4个通用输入输出口 9)超低功耗模式功率降低模式电源故障模式 100脚CMOS LQFP封装工艺11)输出电压12)支持4K双字SRAM13)可选择1:1YL18-2050s YT37-1107S或5:4变压比例的变压器降低格外功率 图2.2 DM9000A的硬件电路 DM9000A的EECS引脚保持默认的悬空状态,数据线SD0-SD15直接与3C44B0X、SST39VF1601、HY57V641620HG的数据线相连。DM9000A的IO读信号线IOR、写信号线IOW分别与片选信号CSNGCS3端口相连,它的起始地址为0X0600-0000。读写信号与片选信号都是保持默认设置的低电平有效在DM9000A中只有INDEX端口与DATA端口两个寄存器可以直接被CPU直接访问,其它所有 内部控制和状态寄存器都是通过这两个端口寄存器间接访问的设计中将CMD引 脚与处理器的地址线ADR2网络控制器CMD引脚决定了处理器访问的是哪个端口 寄存器:当CMD 0时,主机访问的是INDEX端口寄存器;当CMD 1时,访问的是 DATA端口寄存器。实际中INDEX端口寄存器保存的是访问DATA端口寄存器的内 部寄存器的地址,因此对DM9000A控制或状态寄存器访问的命令顺序是:1)要 访问寄存器的地址到INDEX端口;?2)通过DATA端口来读/写数据在系统上电时 处理器通过总线配置DM9000A内的网络控制寄存器NCR)、中断寄存器ISR)等以 完成DM9000A的初始化。随后DM9000A进人数据收发等待状态当DM9000A接收到 外部网络送来的以太网数据时首先检测数据帧的合法性如果帧头标志有误或存 在CRC校验错误则将该帧数据丢弃否则将数据帧缓存到内部RAM并通过中断标志 位通知处理器处理器收到中断后将DM9000A接收RAM的数据读出进行处理。当处 理器要向以太网发送数据帧时先将数据打包成P或IP数据包并通过8位或16 位总线逐字节发送到DM9000A的数据发送缓存中然后将数据长度等信息填充到 DM9000A的相应寄存器内随后发送使能命令DM9000A将缓存的数据和数据帧信息 进行MAC组帧并发送出去。 DM9000A按字节、半字、字方式读写数据 #define DM9000_outb d,P * volatile UINT8 * p d #define DM9000_outw d,p * volatile UINT16* p d #define DM9000_outl d,p * volatile UINT32 * p d #define DM9000_inb p * volatile UINT8 * p #define DM9000_inw p * volatile UINT16 * p #define DM9000_inl p * volatile UINT32 * p 其中* volatile UINT8 * p为强制类型转换,即将P转换为无符号八位, 再将d赋给转换后的p,后面几个语句类似于此语句。 2. DM9000A软件复位 void DM9000_reset void dlyus 20 ; DM9000_iow DM9000_NCR, 0x03 ; dlyus 20 ; DM9000_iow DM9000_NCR, 0x03 ; dlyus 20 ; DM9000_iow DM9000_GPR, 0x01 ; DM9000_iow DM9000_GPR, 0x00 ; dlyms 4 ; 函数的功能是实现DM9000A的复位。即将寄存器NCR的第0位赋值为1,保 持4ms,自动清零。 3. DM9000A寄存器读数据 __inline UINT8 DM9000_ior UINT8 reg DM9000_outb reg,DM9000_INDEX_PORT ; return DM9000_inb DM9000_DATA_PORT ; 使用如上函数,实现DM9000A从寄存器中读取数据,首要对要访问的寄存器正确寻址,再将DM9000A的数据端口和地址端口复用,通过CMD引脚来选择端口。当CMD引脚拉高时,当前命令周期访问的是数据端口;当CMD引脚拉低时,当前命令周期访问的是地址端口。此程序首先是由INDEXPORT写入需要读取操作的寄存器地址,在由DATAPORT读取寄存器内的数据。 4. DM9000A寄存器写数据 __inline void DM9000_iow UINT8 reg,UINT8 value DM9000_outb reg,DM9000_INDEX_PORT ; DM9000_outb value,DM9000_DATA_PORT ; 函数功能实现将数据写入寄存器中,首先由INDEXPORT写入需要写操作的寄存器地址 ,再由DATAPORT写入寄存器内数据。 5. DM9000A检查PID与VID UINT32 DM9000_probe void UINT32 id_val; id_val DM9000_ior DM9000_VIDL ; id val| DM9000_ior DM9000_VIDH 8; id val| DM9000_ior DM9000_PIDL 16; id_val | DM9000_ior DM9000_PIDH 24; if id_val DM9000_PIDVID #ifdef ETHERNET_DEBUG DbgPrintf "[DM9000_probe OK!]" ; #endif return 1; else return 0; 函数实现了DM9000检查PID与VID,DM9000A默的PID是0x9000,VID是0x0A46。 6. DM9000A的初始化处理 DM9000A的初始化处理基于DM9000A如何接收和发送数据的驱动程序设计,DM9000A是一个全双工的低功耗快速以太网控制器,集成了MAC层和PHY层,同时具有16K字节的SRAM,支持多种双绞线和光纤传输媒介,完全兼容IEEE802(3u10,100MB,sDM9000A内部的16K字节SRAM被分成两部分,一部分为发送(TX)缓冲区,另一部分为接收(RX)缓冲区,DM9000A的驱动程序主要由初始化函数、接收函数、发送函数和一些辅助函数组成[6]。 void DM9000_Init UINT8* mac int i,oft; DM9000_reset ; If DM9000_probe 0 return -1; If DM9000_ior DM9000_ISR 7 &0x01 ! DM9000_IO_MODE return -1; DM9000_iow DM9000_NCR, 0x00 ; DM9000_iow DM9000_TCR, 0x00 ; DM9000_iow DM9000_SMCR,0x00 ; DM9000_iow DM9000_NSR, 0x2C ; DM9000_iow DM9000_ISR, 0x3f ; DM9000_iow DM9000_BPTR,0x3f ; DM9000_iow DM9000_FCTR,0x38 ; DM9000_iow DM9000_FCR, 0x29 ; for i 0,oft DM9000_PAR;i 6;i++,oft++ DM9000_iow oft,mac[i] ; for i 0,oft DM9000_MAR;i 8;i++,oft++ DM9000_iow oft,0xff ; DM9000_iow DM9000_RCR,0x31 ; DM9000_iow DM9000_IMR,1 7 ; #ifdef ETHERNET_DEBUG DbgPrintf "[DM9000 init is succed!]" ; #end if 对DM9000A的初始化,即填写、设置DM9000A的控制寄存器,首先调用复位函数,使GPIO默认0位为输出以激活内部PHY,寄存器NCR的第0位赋值为1,软件复位清零,以便设置正常的工作模式。 GPIO控制寄存器(GPCR),GPCR的1到3位表示GPIO的输入输出方向,1为输出,0为输入。4到6位为GPIO的固定output不可写,在本课题设计中,将其设置为0x01。 GPIO寄存器(GPR),它的第0位为0表示激活PHY,为1表示关闭PHY。它的1到3位表示GPIO的1到3位的端口映射位,4到6位表示GPIO的4到6位的端口映射位。在本课题将其设置为0x00,表示激活PHY。 网络控制寄存器(NCR),设置网络控制寄存器NCR的Bit[0](RST位)为1,进行软件复位设置网络控制寄存器NCR,进行网络工作模式设置。TCR),本课题中将其置为0x00。它的Bit[0]代表发送请求,发送完成后自动清零该位;Bit[1]表示禁止为数据包指针1添加CRC校验;Bit[2]表示禁止为数据包指针1添加PAD;Bit[3]表示禁止为数据包指针2添加CRC校验;Bit[4]表示禁止为数据包指针2添加PAD;Bit[5]表示额外冲突模式控制,0代表当额外的冲突计数多于15则终止本次数据包,1代表始终尝试发发送本次数据包;Bit[6]表示Jabber传输使能,1代表使能Jabber传输定时器(2048字节),0代表禁止。本课题中将其设置为0x00。 特殊模式控制寄存器(SMCR)赋值为0x00,它的0位表示强制最短“Back-off”时间,第1位表示强制最长“Back-off”时间,第2位表示强制冲突延迟,3到6位保留,第7位表示特殊模式使能。 使用网络状态寄存器NSR清除各种状态标志位,将其置为0x2C,赋值中断状态寄存器(ISR)为0x3f,来清除所有中断标志位。它Bit[0]表示数据包接收;Bit[1]表示数据包传输;Bit[2]表示接收溢出;Bit[3]表示接收溢出计数器溢出;Bit[4]表示传输“Under-run”Bit[5]表示连接状态改变;Bit[7]表示处理器模式;0为16位模式,1为8位模式。 还用到了背压门限寄存器(BPTR),它的0到3位表示拥挤状态时间,默认为200us。0000为5us,0001为10us,0010为15us,0011为25us,0100为50us,0101为100us,0110为150us,0111为200us,1000为250us,1001为300us,1010为350us,1011为400us,1100为450us,1101为500us,1110为550us,1111为600us。它的4到7位表示背压门限最高值,当接收SRAM空闲空间低于该门限值,则MAC将产生一个拥挤状态,默认值为3H,即3K字节空闲空间,不要超过SRAM(16KB)大小。本课题将其赋值为0x3f。 对于溢出控制门限寄存器(FCTR), 将其赋值为0x38,它的0到3位表示接收FIFO缓存溢出门限最低值。当接收SRAM空闲空间大于该门限值,则发送一个暂停时间(pause_time)为0000H的暂停包;当溢出门限最高值的暂停包发送之后,溢出门限最低值的暂停包才有效,默认值为8K字节,不要超过SRAM大小。4到7位表示接收FIFO缓存溢出门限最高值;当接收SRAM空闲空间小于该门限值,则发送一个暂停时间(pause_time)为FFFFH的暂停包;若该值为0, 则无接收空闲空间,默认值为3H,即3K字节空闲空间,不要超过SRAM大小。 对于接收/发送溢出控制寄存器(FCR),Bit[0]表示溢出控制使能,1设置使能溢出控制模式;Bit[1]表示接收暂停包当前状态;Bit[2]表示接收暂停包状态,只读清零允许;Bit[3]表示背压模式,该模式仅在半双工模式下有效, 当接收SRAM超过BPHW并数据包DA匹配时,产生一个拥挤状态;Bit[4]表示背压模式,该模式仅在半双工模式下有效,当接收SRAM超过BPHW并且接收新数据包时,产生一个拥挤状态;Bit[5]表示强制发送暂停包使能,按溢出门限最高值使能发送暂停包;Bit[6]表示1发送暂停包,发送完成后自动清零,并设置TX暂停包时间为FFFFH;Bit[7]表示1发送暂停包,发送完成后自动清零,并设置TX暂停包时间为0000H。将其赋值为0x8。 还用到物理地址寄存器(PAR),多点发送地址寄存器(MAR)。 接收控制寄存器(RCR),Bit[0]表示接收使能;Bit[1]表示混杂模式(Promiscuous Mode);Bit[2]表示忽略不完整的数据包;Bit[3]表示忽略所有多点传送;Bit[4]表示丢弃CRC校验错误的数据包;Bit[5]表示丢弃长数据包,1为丢弃数据包长度超过1522字节的数据包;Bit[6]表示看门狗定时器禁止,1禁止,0使能。赋值0x31。 中断屏蔽寄存器(IMR),Bit[0]表示1使能数据包接收中断;Bit[1]表示1使能数据包传输终端;Bit[2]表示1使能接收溢出中断;Bit[3]表示1使能接收溢出计数器溢出中断;Bit[4]表示1使能传输“Underrun”中断;Bit[5]表示1使能连接状态改变中断;Bit[7]表示1使能指针自动跳回。当SRAM的读、写指针超过SRAM的大小时,指针自动跳回起始位置,需要驱动程序设置该位,若设置则MRRH将自动位0CH。本文将其赋值为0x80[7]。 2.4 以太网接口设计 1. 以太网的MAC帧格式 图2.3 以太网帧格式 以太网的MAC帧格式比较简单,由5个字段组成。前两个分别为6字节 的目的端地址与发送端地址字段。第三个为两字节的类型字段,标志上一层用的是什么协议,如上层使用的是IP数据报,则该类型字段值为ox0800。第四个是数据字段,其长度为46 ~1500字节之间。最后为4字节的帧检验序列FCS。MAC帧在物理层传输时还须在帧前面插入8个字节,它有两段组成,第一个字段为7个字节的前同步码,实现位同步。第二个字段是帧开始定界符,定义为10101011。 以太网帧结构体定义如下: struct ethernet_frame UINT8 destination[ETH_ADDRESS_LEN]; UINT8 source[ETH_ADDRESS_LEN]; UINT16 frame_size; UINT16 protocol; UINT16 buf_index; ; 2. 以太网的数据链路传输 以太网基本上采用总线型的连接方式,在一条电缆上连接所有的计算机,当某台计算机发送数据时,其信号可以传输给连接在电缆上的所有计算机。每台计算机的网卡,可以接收传过来的数据,接收到数据后,网卡给CPU一个中断信号,告诉它应该接收数据了,收到中断请求的CPU就中断现在正在执行的处理,开始准备接收数据包。 驱动软件则首先检查MAC地址,从而判断是否有自己应当接收的数据报。如果与自己主机NIC的MAC地址相同,就接着检查类型的字段,以及是否有自己应 当接受的协议。当在自己可接受的协议情况下,就使用在内存中的可接纳数据帧长度的内存缓冲器,把NIC中的数据通过数据总线传送到内存,然后再交由上层的软件作进一步的处理。如果与自己主机NIC的MAC地址不同,没有可接收的数据,则删除数据报。 3. DM9000A接收数据处理 DM9000A接收以太网数据具体实现函数为DM9000_ReceiveFrame,首先要判断数据帧的合法性,其具体过程是DM9000A从网络中接到一个数据包后,会在数据包前面加上4个字节,分别为[01H]、[status]、[LENL]、[LENH]。然后要读取这四个字节来确定数据包的状态,若第一个字节是[01H]表示接收的是有效数据包,若为[00H]则表示没有收到数据包,若为其它值则表示网卡没有正确初始化,需要重新进行初始化。当接收的数据包长度小于60字节时,DM9000A会自动为不足的字节补上0,使其达到60字节。同时,在接收到的数据包后DM9000还会自动添加4个CRC校验字节,可以不予处理。所以,接收到的数据包的最小长度会是64字节。接收到有效数据后,读取并保存以太网协议头,以太网协议头长度14字节,具体包括6个字节的以太网目的MAC地址,6个字节的以太网源MAC地址和2个字节的帧类型 [8]。接收处理过程如图2.4所示: 图2.4 DM9000A的接收处理的流程图 4. DM9000A发送数据处理 DM9000A发送处理具体实现函数为DM9000_SendFrame,其过程如图2.5所示,首先由DM9000_outb()函数写入数据命令,再由DM9000_outw()函数按照以太网协议的格式将16位数据写入,发送到DM9000A的数据发送缓存中然后将数据长度等信息填充到DM9000A的相应寄存器内发送使能命令DM9000A将缓存的数 据和数据帧信息进行MAC组帧并发送出去 图2.5 DM9000A的发送处理流程图 3 TCP/IP通信协议的实现 3.1 TCP/IP通信的设计思想 TCP/IP协议的介绍 TCP,IP20世纪60年代末美国政府资助的一个分组交换网络研究项目,到20世纪90年代已经发展成为计算机之间最常用的通信协议。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。TCP,IPOSI的七层参考模型,它采用4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求,该模型的目的是使各种硬件在相同的层次上相互通信。TCP/IP协议代表了整个TCP/IP协议族,不仅包括TCP和IP两个协议,还包括ARP、ICMP、UDP等多个协议,是Internet上最基本的网络通信协议,是实现互联网连接性和互操作性的关键。 TCP/IP参考模型由数据链路层、网络层、传输层和应用层构成,它们是基于硬件层次的四个概念性层次。在这四个层次中,每一层都有特定的功能,上一层直接利用下一层提供的服务来实现本层的功能,下一层又通过相邻层之间的接口为上一层提供服务。通信的双方在相同层之间进行通话,通话规则和协定就是该层的协议。TCP/IP参考模型中的每一层都包含有一个或多个协议,而各个层次所包含的协议总和就构成了TCP/IP协议栈[9]。参考模型如表3.1: 表3.1 TCP/IP协议参考模型 应用层 HTTP,Telnet,FTP,SMTP,SNMP 传输层 TCP,UDP 网络层 IP,ICMP,IGMP 数据链路层 Ethernet,X.25,SLIP,ARP,RARP 1. 数据链路层,它是TCP/IP参考模型的最底层,它负责将IP分组封装成适合在物理网络上传输的帧格式进行传输,同时将物理网络上接收到的数据帧进行解封装,提取出IP分组交付给网络层。数据链路层的协议与网络的具体实现有关,通常包括网络设备的驱动程序和对应的网络的接口卡,它们一起处理与传输媒介有关的物理接口细节。 2.网络层,主要确定如何将分组从源端送达目的端。即确定是将数据链路层传输来的IP分组继续传给其他的网络节点,还是直接传给传输层;并对传输层发来的数据进行填充报头、路径选择和发送。IP协议是网络层的重要协议,它负责无连接的数据传送、数据报寻径和差错处理。网络层还定义了ARP、RARP、ICMP等协议,以完成地址解析、传递网络控制信息、提供差错报告等功能。 3.传输层,主要为源端口和目的端口的应用程序提供端到端的通信。传输层定义了两个端到端的传输层协议:一个是TCP传输控制协议,它是一个面向连接的协议,允许从一台机器发出的字节流无差错的到达另一台机器;另一个协议是UDP用户数据报协议,它是一个不可靠的、不面向连接的传输协议,用于不需要TCP排序和流量控制的应用中。 4.应用层,为用户提供特定的应用服务。常见的应用层协议有FTP文件传输协议、HTTP超文本传输协议、SMTP简单邮件传送协议、Telnet远程登录协议等[10]。 数据报的封装 数据封装体现协议层次模型的重要特征。每层协议按照自己的方式进行数据的封装和拆封。数据发送时,各层在收到的上一层数据前面添加对应的头部信息,进行数据封装,然后传递到下一层。数据接收时,各层对数据进行解包, 剥离出头部信息,进行适当的保存,然后将数据传递到上一层处理。如图3.1所示: 图3.1 数据报的封装 主程序流程 当以太网网卡接收到数据的时候,这些数据都是经过了哪些协议,应该做怎样的处理才能被正确的接收呢,应该如何编程实现呢,如图3.2主程序流程图所示,展示了本课题设计的总体思想。初始化是编程实现设计的必要 步骤 新产品开发流程的步骤课题研究的五个步骤成本核算步骤微型课题研究步骤数控铣床操作步骤 ,如图所示以初始化设置为第一步,进入本课题的设计,它包括设置时钟初始化、I/O初始化、存储器CHCHE配置、使能CACHE及看门狗初始化、中断初始化和网络初始化。其中网络初始化包括本地的物理地址以及IP地址、时间的初始化、DM9000A的初始化、ARP、 图3.2 主程序流程图 首先调用DM9000A驱动,获取数据,实现以太网的数据接收。具体的实现过程在2.4节做过详细说明。当以太网成功接收数据时,首先会分析是不是ARP包,是的话就调用ARP协议处理,不是的话就看看是不是IP数据包,如果不是的话就丢弃该帧。若是IP数据包,还要具体分析是哪种报文,因为ICMP、P报文都是用IP传送的。判断IP数据报传送的是哪种报文后,调用相应协议的处理程序处理数据,这样就完成了数据的接收了。 当接收处理完数据以后。再重新检测以太网网卡是否接收新的数据,如此一直循环下去,实现数据的接收和发送。 以上各种协议的处理过程将在后文详细地描述。 3.2 ARP协议及其实现 1. ARP的分组帧格式 地址解析协议(ARP)是联系IP协议和LAN协议的桥梁,该协议把节点的IP解析成对应的MAC地址(也叫物理地址),它可以在局域网内寻找IP所对应的MAC地址,并保存起来以供发送使用。这是由于以太网设备并不识别32位的网络地址,它是以48位的物理地址来传输以太网数据包的,因此IP驱动器必须把网络目的地址转换为物理目的地址。 图3.3 用于以太网的ARP请求或应答分组格式 在以太网上解析IP地址时,ARP请求和应答分组的格式如图3.3所示。以太网报头中的目的地址为全1的特殊地址即广播地址,电缆上的所有以太网接口都要接收广播的数据帧。以太网帧类型表示后面数据的类型,对于ARP请求或应答来说,该字段的值为0x0806。 形容词hardware(硬件)和protocol(协议)用来描述ARP分组中的各个字段。例如,一个ARP请求分组询问协议地址(这里是IP地址)对应的硬件地址(这里是以太网地址)。硬件类型字段表示硬件地址的类型,它存储的是以太网的MAC帧,则值为1。协议类型字段表示要映射的协议地址种类,它的值为0x0800即表示IP地址,它的值与包含IP数据报的以太网数据帧中的类型字段的值相同。如本课题设计,在以太网上使用IP协议进行通信,则硬件类型字段应为1,协议类型字段应存储0x0800。 硬件地址长度和协议地址长度,分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。 可选域指出四种操作类型,它们是ARP请求(值为1)、ARP应答(值为2), 这个字段是必需的,因为ARP请求和ARP应答的帧类型字段值是相同的。 对于一个ARP请求来说,除了目的端硬件地址外的所有其他的字段都有填充值。当ARP请求包时,目的端硬件地址域中存储0;当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去,ARP实现应答[11]。 在软件编程时,为了实现ARP协议,本设计定义了ARP的结构体,如下: struct arp_entry UINT8 state; UINT8 type; UINT8 retries; UINT8 ttl; UINT8 hwadr[HWALEN]; UINT32 pradr; 在这个结构体中,定义了:状态state包括ARP_FREE(空闲)、ARP_RESERVED(保留)、ARP_PENDING(等待回应)、ARP_RESOLVED(完成)几种状态;类型type包括ARP_FIXED_IP(固定IP)、ARP_TEMP_IP(临时IP);重发次数retries为5次;定义生存时间ttl为60秒;hwadr[HWALEN]为物理地址、pradr为缓存表IP地址。 本为了简化ARP协议,缓存表只定义了10项,也就只说在缓存里只能存十组IP地址与物理地址的映射ARP高速缓存以及工作分析 ARP高效运行的关键是由于每个主机上都有一个ARP高速缓存。这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为20分钟,起始时间从被创建时开始算起。 有了高速缓存cache,ARP工作效率会高多了,下面就是它的工作过程: (1)当ARP解析一个IP地址时,它会搜索ARP cache和ARP表作匹配。如果找到了,ARP就把物理地址返回给提供IP地址的应用。 (2)假如ARP没找到一个匹配的IP地址,它就会ARP请求的以太网数据帧给以太网上的每个主机,以太网上所有主机运行的ARP进程都收到ARP请求,这个过程称作广播。ARP请求数据帧中包含目的主机的IP地址,其意思是“如果你是这个IP地址的拥有者,请回答你的硬件地址”。 (3)目的主机的ARP层收到这份广播报文后,识别出这是发送端在寻问它的硬件地址,于是发送一个ARP应答响应,并写入自己的硬件地址,其他主机不理睬ARP请求。发送ARP应答包含IP地址及对应的硬件地址,发送ARP请求的机器收到ARP应答,就在ARP表和ARP cache中写入目的主机IP地址到硬件地址的映射,以备将来之用。使用这种方式,ARP能决定任何IP地址对应机器的物理地址[12]。 (4)收到ARP应答后,使ARP进行请求――应答交换的IP数据报现在就可以传送了。 3. ARP协议的实现 ARP的实现包括两个过程:ARP输入过程和ARP输出过程。 (1)ARP协议输入处理过程 ARP输入过程如图3.4所示。当数据进入ARP处理程序,首先再次判断是否 是ARP协议,这样经过两次判断,结果会更准确。确认是ARP数据后,再判断它是属于分组请求还是分组响应,判断的依据是看ARP协议的操作字节是1还是2,1表示请求,2表示应答。然后再对其作相应的处理: 如果是ARP请求分组,则发出响应分组。发送响应是个ARP输出过程,详细细节见下文的ARP输出处理流程。 若是ARP响应分组,就接收响应,为在高速缓存中根据IP地址找到该表项,更新映射,并利用ARP分组中的信息填写该表项,同时为寿命字段赋予最大超时时间ARP_TIMEOUT,这就是ARP处理接收数据的过程。 图3.4 ARP协议输入处理流程图 (2)ARP协议输出IP请求分组,第一步是在高速缓存中线性查找,查看是否有从目的IP地址到物理地址的映射。若有,就更新缓存表并把数据放到使用该地址的帧中,并发送该帧;若没有,在ARP高速缓存中分配一个表项,用于存放新的绑定。然后将本地IP地址和物理地址以及目的IP地址和广播物理地址写入数据缓存中,组成ARP请求分组帧,广播的发送出去。在发送时,调用DM9000A驱动,完成以太网的数据发送,具体实现过程如2.4的详细介绍。 通过这两个过程就实现了ARP协议。在这里要指出的是,当高速缓存增加一个新表项时,初始化该表项中的寿命字段,设置最长等待时间ARP_TIMEOUT为60(1分钟),随时间的推移,高速缓存管理程序递减寿命字段中的值,并当其值达到零时,丢弃该表项。如果高速缓存已满,又必须向其中增加新的绑定时,高速缓存管理程序采用循环法,删除一个旧表项,将其分配给一个新绑定,同时将记录删除标志指针依次移向下一个表项,当再次有新绑定需要添加时,将此时删除指针指向的表项删除,再将记录删除标志指针下移一个表项,以此类推进行 替换。 图3.5 ARP输出处理数据流程图 3.3 IP协议及其实现 IP协议帧数据结构 IP协议是TCP/IP体系中最主要的协议之一, IP数据报的格式如表3.2所示。一个IP数据报由首部和数据两部分组成,首部的前一部分是固定长度,共20个字节,所有IP数据报必须具有的。分析图3.7中的首部,最高位在左边,记为0 bit;最低位在右边,记为31 bit。 4个字节的32 bit值以下面的次序传输:首先是0,7 bit8,15 bit16,23 bit24,31 bitbig endian字节序。由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。以其他形式存储二进制整数的机器,如little endian格式,则必须在传输数据之前把首部转换成网络字节序[13]。如图表3.2为IP数据报的格式: 表3.2 IP数据报格式及首部中的各字段 0 4 8 16 19 24 31 版本 首部长度 区分服务 总长度 标志 标识 片偏移 生存时间 协议 首部检验和 源IP地址 目的IP地址 选项(如果有) 数据部分 表 在软件编程时,为了实现IP协议定义了IP结构体: struct ip_frame UINT8 vihl; UINT8 tos; UINT16 tlen; UINT16 id; UINT16 frags; UINT8 ttl; UINT8 protocol; UINT16 checksum; UINT32 sip; UINT32 dip; UINT8 opt[_IP_OPTLEN + 1]; UINT16 buf_index; 在这个结构体里,定义了:vihl包括版本和首部长度,版本号是固定的,为4。tos为服务类型;tlen为总长度;id为标志;frags为标识和片偏移;ttl为生存时间;protocol为协议;checksum为检验和;sip为源IP地址;dip为目的IP地址;opt[_IP_OPTLEN + 1]为可选字段;buf_index为数据缓存区;数据缓存区位数据部分的偏移量在此设置,则这部分是为了区分首部和数据部分,提取数据时,方便操作。 IP协议的实现 1. IP协议总体设计 IP协议主要完成两个功能,分别是检查收到的IP数据包的首部检验和,以及对IP数据包进行解析。本课程设计采用TCP协议进行通信,因此IP层只需 要确定是ICMP数据包还是TCP数据包,然后根据数据包的类型进行相应的处理。主要参数如下: Ip_construct_cs 为校验函数,负责计算IP协议头检查和。 Ip_check_cs 函数,负责检查IP协议头检查和。 Prosess_ip_out 为IP数据报的发送函数,它负责生成IP报头,并将其写入到发送缓存区,调用DM9000A的驱动函数将IP数据包发送给以太网接收模块。它被上层ICMP处理函数和TCP发送函数调用。 Process_ip_in 为IP数据报的接收函数,它根据协议类型,将数据报提交给上层协议进行处理。 2. IP协议输入处理设计 IP协议的实现包括两个过程:IP协议输入过程和IP协议输出过程。下图3.6是IP协议输入处理的流程。 其具体工作过程如下: IP协议输入过程 图3.6 IP 协议输入处理流程 3. IP协议输出IP协议输出DM9000_SendFrame),实现数据的发送。 图3.7 IP协议输出处理流程 3.4 ICMP协议及其实现 由于IP协议提供的是不可靠的,无连接的分组传输,当转发分组出现异常情况时,需要通知源站采取措施避免或纠正问题。这时就需要使用网络层的ICMP(网络控制报文协议),使主机或路由器报告差错和异常情况。ICMP消息在以下几种情况下发送:当数据报不能到达目的地时,当网关已经失去缓存功能时,当 网关能够引导主机在更短路由上发送时[14]。 ICMP报文是封装在IP分组中进行传输的。当IP分组的首部中协议字段为1,就表示IP数据报分组的数据部分是ICMP报文;当IP模块发现传输出错时,首先丢弃该出错数据报,然后调用ICMP模块,向源端主机发送出错报文。本课题把ICMP简化成只有响应请求和响应应答。其报文格式如表3.3所示。ICMP报文格式包括:8 bit的报文类型字段标志出错类型,0代表响应应答,8代表响应请求;8 bit代码字段0表示不能到达所要发送的网络;16 bit的校验和字段;此外报文还包括标识符和序号。 表3.3 ICMP 响应-请求、响应-应答的报文格式 0 8 16 31 类型(0或8) 代码(0) 检验和 标识符 序号 选型数据 图 ICMP报文简化处理流程如3.8所示: 图3.8 ICMP 处理流程 ICMP协议有两种报文:请求报文和应答报文。由于系统很少主动进行网络连接,因此,只实现ICMP协议的一部分即可;对接收到ping请求报能予应答。首先确定是IP数据报后再判断是不是ICMP报文,确认是ICMP报文后,验证检验和,再判断是请求报文还是应答报文。ICMP协议主要是针对Ping的处理,即对接收到的ping请求报进行应答,并发送ICMP应答报文。设计思路如下:处理程序接收到ICMP报的IP报头后,首先对ICMP校验和验证,然后根据ICMP报的类型字段判断是否是ping请求帧。若是,则根据接收到的ping请求帧来设置 ping应答帧。本课题只处理响应请求。当确定以后就组装好IP数据报,把响应应答发送出去。在发送过程中,类似于IP协议的输出过程,同样是调用DM9000A的驱动函数,完成发送过程。 3.5 TCP协议及其实现 TCP协议帧数据格式 TCP协议提供的是面向连接服务,是在不可靠的网络服务上提供端到端的可靠字节流。TCP之所以可靠是因为它对发送数据的顺序号进行了控制,以及进行与其对应的肯定确认应答控制;面向连接是因为TCP协议在传输数据开始前,通信双方之间需建立好连接,在通信结束后切断连接。由于TCP要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销,如确认、流量控制、计时器以及连接管理等,使得协议数据单元的首部增大很多,还要占用许多的处理器资源。 TCP报文段分为首部和数据两部分,TCP的全部功能都体现在它首部中各字段的作用。TCP首部格式如表3.4所示,它的前20个字节是固定的,后面4N字节是根据需要而增加的选项,所以TCP首部最小长度为20字节。 表3.4 TCP报文段的首部 0 8 16 24 31 发送端端口号 接收端端口号 序 列 号 确 认 序 号 数据 偏移 保留 U R G A C R P S H R S T S Y S F IN 窗 口 检 验 和 紧 急 指 针 选项(长度可改变) 填 充 前两个为发送端端口号和接收端端口号各占两个字节端口是运输层与高层的服务接口,16bit 的端口,32bit的IP地址,构成了相当于运输层服务访问点TSAP的地址(总共是48bit)。 序列号占四个字节,表示所发送的数据的位置,是本报文段所发送的数据部分第一个字节的序号,在 TCP传送的数据流中每一个字节都有一个序号。从0开始,到232-1为止,共232个序列号。 确认序号占四个字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号。由于序号字段有32bit长,可对4GB的数据进行编号,这样就可以保证序号重复使用时就序号的数据早已在网络中消失了。 数据偏移量占4bit,这是TCP报文段首部的长度,用于指出TCP报文段的数据开始处离TCP报文段的起始处有多远,“数据偏移”的单位是32bit字。 保留位6bit,为了将来的扩展而准备的域,目前应置为0。 控制标志位共占6bit,它由1bit来确定其含义,按照顺序分别赋予名字:URG、ACK、PSH、RST、SYN、FIN。各比特意义如下:紧急比特URG,当URG 1时,表明此报文段应尽快发送而不要按原来的排队来传送,应与紧急指针字段配合使用;确认比特ACK,当ACK 1时确认序号字段才有意义,除了最初的一个SYN段之外,它必须为1;急迫比特PSH,当PSH 1时,表明请求远地TCP将本报文段立即传送给其应用层,而不等到整个缓冲区满后再向上交付;重建比特RST,当RST 1时,表明出现严重错误,必须释放连接,然后重新建立运输连接;同步比特SYN,当SYN 1而ACK 0时,表明这是一个连接请求报文段,若对方同意建立连接,则应在发回的报文段中使SYN 1且ACK 1;终止比特FIN,当FIN 1时,表明发送的字节串已经发送完毕,并要求释放运输连接[15]。 窗口占两字节,是报文段接收方的接收缓冲区的空闲区域的大小,发送数据一方只能发送比这个域所表示的数据量小的数据,单位为字节。 检验和占两字节,检验的范围包括首部和数据两部分,在计算检验和时,首先要在TCP报文段的前面加上一个12字节的伪首部,然后接收端在计算检验和时仍然要加上伪首部。 紧急指针域在控制标志URG为1时有效,它所存储的值,作为表示需要紧急数据的存储单元来处理。 选项长度可变,TCP规定一种选项即最长报文段MSS用于告诉对方的TCP:本地的缓冲区所能接收的报文段的最大长度。 填充不定长,填充的内容必须为0,它是为了保证包头的结合和数据的开始处偏移量能够被32整除。 在软件编程时,为了实现TCP协议,本课题定义了结构体tcb如下: struct tcp_frame //TCP协议帧 UINT16 sport; UINT16 dport; UINT32 seqno; UINT32 ackno; UINT16 hlen_flags; UINT16 window; UINT16 checksum; UINT16 urgent; UINT8 opt[_TCP_OPTLEN + 1]; UINT16 buf_index; 在这个结构体里,定义了:sport为发送端端口号,dport为接收端端口号,seqno为包的序列号,ackno为确认应答号,hlen flags为控制标志,window为窗口,checksum为检验和,urgent为紧急指针,opt[_TCP_OPTLEN + 1]为可选字段,buf_index为存区起始地址。 TCP协议端口及套接字 端口是应用层与运输实体进行交互的接口。端口号是一个16bit的地址,不同的应用进程用不同的端口号来标识。端口号分为两类,一类是专门分配给一些最常用的应用程序,这叫熟知端口;另外一类则是一般的端口号,用来随时分配给请求通信的客户进程。 套接字即是IP地址与端口号的组合,TCP的一个连接就是以一对套接字来 标识的,所以在运输层通信的一对套接字必须是唯一的。 TCP协议的通讯过程 在TCP 通讯中主要有连接的建立、数据的传输、连接的关闭三个过程~每 个过程完成不同的工作,而且序列号和确认号在每个过程中的变化都是不同的。 以客户端与服务器之间建立的通信来说明,如表3.5所示 表3.5 TCP通讯传输过程 客户端 序号 确认号 标志 数据 服务端 建立连接过程: 第一次握手:-- 随机C1 不考虑 SYN -- 第二次握手: -- 随机S1 C1+1 SYN+ACK -- 第三次握手: -- C1+1 S1+1 ACK -- 传送数据过程: 发送数据: -- C1+1 S1+1 PSH+ACK n字节 -- 接收确认: -- S1+1 C1+1+n ACK -- 发送数据: -- C1+1+n S1+1 PSH+ACK m字节 -- 接收确认: -- S1+1 C1+1+n+m ACK -- 关闭连接过程: 第一次握手:-- C1 S1 FIN+ACK -- 第二次握手: -- S1 C1+1 ACK -- 第三次握手: -- S1 C1+1 FIN+ACK -- 第四次握手: -- C1+1 S1+1 ACK -- 1. TCP 建立连接 运输连接的建立和释放是每一次面向连接通信中必不可少的过程,在连接建立的过程中要解决以下三个问题: (1)要使每一方都知道对方的存在; (2)要允许双方协商一些参数(如,最大报文段长度,最大窗口的大等); (3)能够运输实体资源(如缓冲区大小,连接表中的项目等)进行分配。 TCP 建立连接,也就是我们常说的三次握手,它需要三步完成。在TCP 的三次握手中,发送第一个SYN 的一端执行的是主动打开,而接收这个SYN 并发回下一个SYN 的另一端执行的是被动打开。这里以客户端向服务器发起连接来说明。 1 第 1 步:客户端向服务器发送一个同步数据包请求建立连接,该数据包中,初始序列号(ISN)是客户端随机产生的一个值,确认号是0; 2 第 2 步:服务器收到这个同步请求数据包后,会对客户端进行一个同步确认。这个数据包中,序列号(ISN)是服务器随机产生的一个值,确认号是客户端的初始序列号+1; 3 第 3 步:客户端收到这个同步确认数据包后,再对服务器进行一个确认。该数据包中,序列号是上一个同步请求数据包中的确认号值,确认号是服务器的 初始序列号+1。 2. TCP 传输数据 在 TCP 建立连接后,就可以开始传输数据了,TCP 工作在全双工模式,它可以同时进行双向数据传输。这里为了简化,只使用客户端向服务器发送数据的情况。服务器向客户端发送数据的原理,它们是类似的工作过程,这里不再重复说明。服务器向客户端发送一个数据包后,客户端收到这个数据包后,会向服务器发送一个确认数据包。TCP的确认是对接收到的数据的最高序号(即收到的数据流中的最后一个序号)表示确认。但返回的确认序号是已收到的数据的最高序加1,也就是说,确认序号表示期望下次上到的第一个数据字节的序号[16]。 传输数据的简要过程如下: (1)发送数据:客户端向服务器端发送第一个带有数据的数据包,该数据包中的序列号和确认号与建立连接第三步的数据包中的序列号和确认号相同;为提高网络传送效率,发送端可以连续发送多个数据包。序列号为上一个数据包序列号值+数据包大小;确认号为上一个数据包确认序列号。客户端收到服务器端确认数据包后,再次向服务器端发送带有数据的数据包,该数据包中的序列号为上一个回复数据包中的确认号值,确认号为建立连接第三步的数据包中的确认号值; (2)确认收到:为提高网络传送效率,接收端不一定在收到一个数据包后就立刻发送一个数据包回复,而可以根据实际情况(如:缓冲区大小、报文段大小等),再发送确认回复数据包。该确认数据包中,序列号是为上一个数据包中的确认号值,确认号为服务器发送的上一个数据包中的序列号+该数据包中所带数据的大小。 3. TCP 关闭连接 关闭一个连接需要经过4 个步骤,因为TCP 连接是全双工的工作模式,所以每个方向上需要单独关闭。在TCP 关闭连接时,首先关闭的一方(即发送第一个终止数据包的)将执行主动关闭,而另一方(收到这个终止数据包的)再执行被动关闭。 (1)第 1 步:客户端完成它的数据发送任务后,会主动向服务器发送一个终止数据包,以关闭在这个方向上的TCP 连接。该数据包中,序列号为客户端发送的上一个数据包中的确认号值,而确认号为服务器发送的上一个数据包中的序列号+该数据包所带的数据的大小; (2)第 2 步:服务器收到客户端发送的终止数据包后,将对客户端发送确认信息,以关闭该方向上的TCP 连接。这时的数据包中,序列号为第1 步中的确认号值,而确认号为第1 步的数据包中的序列号+1; (3)第 3 步:同理,服务器完成它的数据发送任务后,就也会向客户端发送一个终止数据包,以关闭在这个方向上的TCP 连接,该数据包中,序列号为客户端发送的上一个数据包中的确认号值,而确认号为服务器发送的上一个数据包中的序列号+该数据包所带数据的大小; (4)第 4 步:客户端收到服务器发送的终止数据包后,将对服务器发送确认信息,以关闭该方向上的TCP 连接。这时在数据包中,序列号为第3 步中的确认号值,而确认号为第3 步数据包中的序列号+1。 TCP协议的实现 1. TCP协议输入处理设计 TCP协议输入处理如图3.9所示: 图3.9 TCP协议的输入流程 首先要重新判断接收到的是否是TCP数据报,这样做是为了再次确定数据报判断的准确,如果是,就获取TCP的首部信息,否则报错;然后判断该TCP套接字是否打开、并找到处理数据报要用到的SOCKET,进一步验证检验和的正确性,当套接字未打开,就不做任何处理;当检验和也正确无误,最后调用TCP套接字侦听事件,完成应用层的处理。 2. TCP协议输出处理设计 如下图3.10所示,在发送过程中,首先要判断实际数据长度不超过缓存区长度,套接字要求处于打开状态,然后填入TCP协议头,并计算校验和正确之后保存校验和,使数据缓存区buf指向TCP协议头,然后传给IP层,进行IP封装,然后等待发送。在发送过程中,调用DM9000A的驱动函数,完成数据的发送。 图3.10 TCP协议的输出流程 4 应用层的实现 使用TCP协议,在应用层实现数据的上传,具体来说在应用层,我们要完成数据的接收和应答和发送。在应用层实现EM客户端与PC服务端之间的通信,首先在应用层定义了一个网络通信协议,它分为一个字节的机器类型;一个字节的协议号0x01;八个字节的机器号,如"99999999";两个字节的备用;两个字节的总帧号;两个字节的帧号;一个字节的命令;一个字节的检验和(所有的累加为0xAC)和两个字节的数据长度(本帧DATA部分长度),还有数据部分。协议的具体工作过程可表示为(1)EM客户端向PC服务端发起点对点的连接,设置客户端机器类型为0x03-JL206A,它的TCP端口固定为11018,PC服务器端的端口号默认为10323。本设计中协议号为0x01。(2)EM客户端向PC服务端发起注 册,此时命令字为0x01,PC服务器端回应注册,设置命令字为0x02。(3)注册成功后,在整个通讯中,通过设置不同的命令字实现发送应答接收。若客户端向服务端上传数据,设置命令字为0x33;服务器读取客户端的参数,置命令字为0x30;客户端向服务端返回参数,设命令字为0x31 ;PC服务器端下载程序,设置命令字为0x32。 本地网络的初始化 图4.1 本地网络初始化 通信过程中首先要对本地网络进行初始化,如上图4.1所示。 2. TCP协议应用层侦听事件回调 在3.5节,我们曾介绍过TCP协议的实现,在输入设计中介绍了调用TCP套接字侦听事件,本小节要实现TCP协议应用层侦听事件回调的功能。本地网络应用层接收处理过程如图4.2所示: 图4.2 本地网络应用层接收处理流程 首先判断是否是该TCP应用层的套接字,然后判断侦听到的事件类型。本课题的设计只处理接收到的数据事件,对其他事件不做处理。在保证数据有效,机器类型与机器号都正确的情况下,然后对其协议号字段进行判断,再根据其协议中的命令字段进行相应的处理。若命令字段为0x01,则表示客户端EM向服务器端PC注册;若命令字段为0x33,则为客户端EM向服务器端PC上传数据;若命令字为0x32,则PC读取EM参数。由于采用TCP协议传输,它保证了数据的可靠性及建立了连接应答,所以在数据的传输中不在进行应答和相应的重发。 3(本地网络发送设计 图4.3 本地网络发送处理 结 论 本课题的设计,我通过搜集大量的资料,掌握基本理论知识,在ARM硬件平台上最终实现了基于DM9000A的TCP通信设计。本设计采用硬件与软件结合方式,了解以太网控制器DM9000A内部结构与特点,编写驱动程序, 利用TCP/IP协议的通信功能,分析协议的具体实现过程后,将简化的TCP/IP协议移植到ARM硬件平台上工作。最终利用协议的接口函数编写上层应用程序,在软硬件基础上,实现EM客户端与PC服务器端之间的数据传输设计。课题的主要结论如下: (1)完成了基于确定了整个包括、开发平台上,实现TCP/IP协议的程序仿真。该仿真实现TCP/IP协议的基本功能,包括以太网驱动程序、ARP、IP、TCP等,并且保证实现的ARP、IP、TCP层的程序最终能够移植在ARM平台上。 (3)将TCP/IP协议移植到ARM平台,实现EM客户端与PC服务器端之间的数据传输通信。 参考文献 [1] 梁桂蓉(TCP/IP[J]( 2006,26 4 :1-3(((北京:出版社,15-18([3] 闫亚婧,祖静,梁志坚(( 12 :-63([4] DAVICOM Semiconductor,Inc.DM9000A Ethernet controller with ceneral Processor Interface Date Sheet[S].USA: DAVICOM Semiconductor,Inc.2005. [5] DM9000AE Application Notes COM. [6] 张阳,唐昆.基于ARM的TCP/IP开发. /2880.6>html [7] 苏耀峰,王德刚,魏急波(([8] 黄慧群,吴景东( (([9] 谢希仁((((((北京:出版社,-60. [15] 郅琦,雷斌((, 2006,9:-47([16] Beh rouzA. Fo rouzan & Soph ia Chung Fegan . TCP/ IP 协议族[S].谢希仁译, 北京: 清华大学出版社,2001(INT8 tcp_getsocket UINT8 soctype UINT8 tos,UINT16 tout,INT32 *listener INT8,UINT8,UINT32,UINT32 INT8 i; struct tcb* soc; if soctype ! TCP_TYPE_SERVER && //服务器端 soctype ! TCP_TYPE_CLIENT && //客户端 soctype! TCP_TYPE_CLIENT_SERVER && //服务器+客户端 soctype ! TCP_TYPE_NONE //未使用 #ifdef TCP_DEBUG DbgPrintf "[Invalid socket type requested]" ; #endif return -1 ; if listener 0 #ifdef TCP_DEBUG DbgPrintf "[Event listener function not specified]" ; #endif return -1 ; for i 0;i NO_OF_TCPSOCKETS;i++ //搜索可用的socket soc &tcp_socket[i]; if soc- state TCP_STATE_FREE //如果可用 soc- state TCP_STATE_RESERVED; //标志为已占用 soc- type soctype; //TCP类型 soc- tos tos; //服务类型 soc- event_listener listener; //回调函数 soc- rem_ip 0; soc- remport 0; soc- locport 0; soc- flags 0; soc- tout tout*TIMERTIC; return i ; //返回获取的socket句柄 #ifdef TCP_DEBUG DbgPrintf "[No socket found]" ; #endif return -1 ; 2. 本地网络初始化 INT8 net_init void INT16 i; //localmachine.localHW[5] MAC_addr[0]; //localmachine.localHW[4] MAC_addr[1]; //localmachine.localHW[3] MAC_addr[2]; //localmachine.localHW[2] MAC_addr[3]; //localmachine.localHW[1] MAC_addr[4]; //localmachine.localHW[0] MAC_addr[5]; localmachine.localip interface_parm.ip_address[0] 24 | interface_parm.ip_address[1] 16 | interface_parm.ip_address[2] 8 |interface_parm.ip_address[3]; localmachine.defgw interface_parm.default_gateway[0] 24 | interface_parm.default_gateway[1] 16 | interface_parm.default_gateway[2] 8 |interface_parm.default_gateway[3]; localmachine.netmask interface_parm.subnet_mask[0] 24 | interface_parm.subnet_mask[1] 16 | interface_parm.subnet_mask[2] 8 |interface_parm.subnet_mask[3]; localmachine.localHW[5] interface_parm.mac[0]; localmachine.localHW[4] interface_parm.mac[1]; localmachine.localHW[3] interface_parm.mac[2]; localmachine.localHW[2] interface_parm.mac[3]; localmachine.localHW[1] interface_parm.mac[4]; localmachine.localHW[0] interface_parm.mac[5]; //for i 0;i 4;i ++ // // MACHINE_ID[2*i] 0x30+ systemmanage_param.machine_id[i] 4 &0x0f ; //MACHINE_ID[2*i+1] 0x30+ systemmanage_param.machine_id[i] &0x0f ; // //---采用默认99999999 if eth_init -1 //DM9000_Init &localmachine.localHW[0] ; return -1; timer_pool_init ; //时间池初始化 arp_init ; tcp_init ; return 0; 辽宁科技大学本科生毕业设计(论文) 第38页 网络接口 Y USB接口 网络驱动 JTAG 电源晶振 读取接收数据包的地址 读取数据包第一个字节 保存以太网协议头 接收有效数据 内部接收数据缓存区 开始 结束 清除 结束 开始 发送数据 写入发送数据长度 数据发送缓存区 16位数据写入 以太网首部 IP首部 TCP首部 应用数据 IP首部 TCP首部 应用数据 以太网驱动程序 TCP首部 应用数据 APPL 用户数据 用户数据 应用程序 TCP IP N Y Y N N Y 结束 是TCP包, 是ICMP包, 是IP包, 是ARP包, 4 46~1500 2 6 6 2 目的 以太 网地 址 硬件地址长度 发送 端以 太网 地址 可选域 协 议 类 型 硬 件 类 型 帧 类 型 以太 网源 地址 以太 网目 的地 址 开始 报错 重新判断是 否是ARP Y 是请求, 是响应, 报错 接受响应 发送回应 是否是新的IP地 址 更新ARP高速缓存 结束 开始 ARP输出请求 查找ARP高速 缓存表 分配表空间 将本地IP地址和物理地 址以及目的IP地址、广 播物理地址写入缓存中 发送ARP分组请求 结束 开始 报错 重新判断是否 是IP 获取IP首部信息 记录可选字段 有无可选字段 首部检验和是 否正确 Y 更新ARP高速缓存 返回数据部分长度 开始 ARP表中能找到 MAC地址, 是ICMP? 是TCP, 将IP包存入发送缓存区 计算IP首部校验和 要发送的数据 将各类协议字段的值填入, 并加上要发送的数据 发送数据 结束 结束 将IP包存入ICMP缓存区 返回ARP缓存没有准备好 报错 N N N Y N 开始 重新判断是不 是ICMP 检验和是否 正确, 响应应答, 报错 响应请求, 发送响应应答 结束 帧的传输方向 FCS 写入数据命令 Y Y N Y Y 读取16位数据 01H ? N Y 套接字打开, 结束 开始 发送数据 进行IP封装 数据缓存指向P协头 重新判断是否 TCP? 报错 获取TCP首部信息 获取TCP首部信息 套接字是否打 开, 不处理 理 理 验证校验和? 报错 调用TCP套接字侦听事件 返回 1 数 据 类 型 发送端的 MAC地址 目的端的 MAC地址 6 6 1 2 4 4 目的 IP地 址 1 以太网首部 28字节ARP请求、应答 6 6 发送 端IP 地址 协议地址长度 2 2 Y N Y N N N N 保存校验和 计算校验和 填入TCP协议头 Y N N N N 报错 N Y Y Y Y 调用TCP协议处理 Y Y Y 调用ICMP协议处理 Y N N N N N Y N N N EM向PC上传数据 N 不支持 报错 Y 结束 回应注册 N 调用ARP协议处理 Y EM要求PC注册 N PC读取EM参数 0x33, 0x32, 命令字为0x01 , 数据有效,机器类型, 机器号码正确 Y 协议号是0x01 接收到数据事件 Y 判断侦听事 件类型 结束 N 初始化设置 USB接口 结束 DM9000A初始化 TCP应用层初始化 TCP初始化 设置IP地址,默认网关,子网掩码 ARP初始化 开 始 LCD接口 串行口 SRAM FLASH ARM处理器 N Y 发送数据 可接收的协议 类型, 接收应答 等待时间间隔 帧头CRC校验 正确, 接收回应 发送数据第一帧 判断是否是该 TCP套接字 将数据写入缓存区 发起注册 机器类型,机器号,协议号设置 开始 开 始 接收以太网数据 开 始 调用TCP应用层侦听事件处理 Y Y Y Y N N Y
本文档为【基于DM9000A的TCP通信设计毕业设计(论文)(已处理)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_321635
暂无简介~
格式:doc
大小:93KB
软件:Word
页数:51
分类:初中语文
上传时间:2017-10-11
浏览量:17