【开发指南】51单片机+rtl8019上网编程指南_第1页
【开发指南】51单片机+rtl8019上网编程指南_第2页
【开发指南】51单片机+rtl8019上网编程指南_第3页
【开发指南】51单片机+rtl8019上网编程指南_第4页
【开发指南】51单片机+rtl8019上网编程指南_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

RTL8019编程指南未完待续1绪言单片机如何控制以太网网卡进行传输数据,如何加载TCP/IP协议连接到互联网,这些都是一些令人感兴趣的问题。可以说以太网和TCP/IP协议已经成为使用最广泛的协议,而其它总线协议如RS485、RS232,CAN,LANWORKS,都只是一些局部系统的总线。围绕以太网而制造的集线器,交换机已进入大小公司,企业,家庭。我现在在众达天网公司,由于公司是搞电脑防火墙的,所以对网络的接触也越来越多,我研究的主要是网络的底层,并掌握了很多网络分析工具如(SNIFFER),对以太网和TCP/IP协议的研究就更加深入了。我比较熟悉的网卡是10M的网卡,100M的以太网卡还在研究之中。曾经用单片机(89C52)控制和驱动10M的NE2000兼容型以太网卡与电脑主机传输数据。现在将我的一些研究成果写成一系列的文单,提供给大家。也许有一天研究了100M的网卡之后,可以让单片机驱动它,那是可能的事,只不过接口可能会复杂一些。我所写的驱动程序并不是标准的,因为我没有学过UNIX,无法使用UNIX提供的原代码。如果能使用UNIX的原代码,那将是很好的事。我也正在接触UNIX和VC,DDK等方面的内容,希望有一天能够重写我现在所写的驱动程序。我知道有很多人在了解单片机与以太网方面的东西,在BBS上也发现了很多这方面的内容,有些人的研究甚至比我还深入,我也希望能跟这些人交流交流,如果对我的文章感兴趣,当然可以给我发电子邮件啦。在接下来的文章将介绍以太网协议,网卡驱动,IP协议,ICMP协议,ARP协议,TCP协议等。为帮助读者开发该TCP/IP的应用,本站制作了以太网开发板,可以购买。2以太网协议以太网协议(用于10MBPS的以太网,作者以下所说的以太网均指10M以太网,而不是100M,1000M的以太网)以太网协议有两种,一种是IEEE8022/IEEE8023,还有一种是以太网的封装格式。现代的操作系统均能同时支持这两种类型的协议格式。因此对我们来说只需要了解其中的一种就够了,特别是对单片机来说,不可能支持太多的协议格式。以太网的物理传输帧(仅介绍第二种格式)PRSDDASATYPEDATAPADFCS56位8位48位48位16位不超过1500字节可选32位PR同步位,用于收发双方的时钟同步,同时也指明了传输的速率(10M和100M的时钟频率不一样,所以100M网卡可以兼容10M网卡),是56位的二进制数101010101010SD分隔位,表示下面跟着的是真正的数据,而不是同步时钟,为8位的10101011,跟同步位不同的是最后2位是11而不是10DA目的地址,以太网的地址为48位6个字节二进制地址,表明该帧传输给哪个网卡如果为FFFFFFFFFFFF,则是广播地址,广播地址的数据可以被任何网卡接收到SA源地址,48位,表明该帧的数据是哪个网卡发的,即发送端的网卡地址,同样是6个字节TYPE类型字段,表明该帧的数据是什么类型的数据,不同的协议的类型字段不同。如0800H表示数据为IP包,0806H表示数据为ARP包,814CH是SNMP包,8137H为IPX/SPX包,(小于0600H的值是用于IEEE802的,表示数据包的长度。)DATA数据段,该段数据不能超过1500字节。因为以太网规定整个传输包的最大长度不能超过1514字节。(14字节为DA,SA,TYPE)PAD填充位。由于以太网帧传输的数据包最小不能小于60字节,除去(DA,SA,TYPE14字节),还必须传输46字节的数据,当数据段的数据不足46字节时,后面补000000当然也可以补其它值FCS32位数据校验位为32位的CRC校验,该校验由网卡自动计算,自动生成,自动校验,自动在数据段后面填入对于数据的校验算法,我们无需了解事实上,PR,SD,PAD,FCS这几个数据段我们不用理它,它是由网卡自动产生的,我们要理的是DA,SA,TYPE,DATA四个段的内容所有数据位的传输由低位开始但传输的位流是用曼彻斯特编码的以太网的冲突退避算法就不介绍了,它是由硬件自动执行的DASATYPEDATAPAD最小为60字节,最大为1514字节以太网卡可以接收三种地址的数据,一个是广播地位,一个是多播地址我们用不上,一个是它自已的地址但网卡也可以设置为接收任何数据包用于网络分析和监控任何两个网卡的物理地址都是不一样的,是世界上唯一的,网卡地址由专门机构分配不同厂家使用不同地址段,同一厂家的任何两个网卡的地址也是唯一的根据网卡的地址段网卡地址的前三个字节,可以知道网卡的生产厂家有些网卡的地址也可以由用户去设定,但一般不需要3网卡上电复位当你买到一个新的RTL8019AS网卡,你要先将该网卡设置为以下的配置操作方式OPERATINGMODE跳线方式JUMPERLESS(不是即插即用PLUGANDPLAY)端口I/OBASE024025FH中断INTERRUPT2/9我的程序没有用到网卡中断,所以也可以不用设置你要将这个网卡插到你的电脑里,用这个网卡带的设置程序RSET8019EXE将这个卡按照上面的配置设置好。(最好在纯DOS方式下设置)在介绍网卡驱动程序之前,先介绍一下RTL8019AS的基本情况31输入输出地址共32个,地址偏移量为00H1FH,对应于240H25FH,240H的地址偏移量为0,241H的地址偏移量为1,。25FH的地址偏移量为1FH。其中00H0FH共16个地址,为寄存器地址。10H17H共8个地址,为DMA地址。18H1FH共8个地址,为复位端口。对于8位的操作方式,上面的地址中只有18个是有用的00H0FH共16个寄存器地址。10HDMA地址(10H17H的8个地址是一样的,都可以用来做DMA端口,只要用其中的一个就可以了)1FH复位地址。(18H到1FH共8个地址都是复位地址,每个地址的功能都是一样的,只要其中的一个就可以了,但实际上只有18H,1AH,1CH,1EH这几个复位端口是有效的,其他不要使用,有些兼容卡不支持19H,1BH,1DH等奇数地址的复位)32跟复位有关的引脚RSTDRV连接到ISA总线的RSTDRV的引脚上。RSTDRV同时也是ISA总线的复位信号。RSTDRV为高电平有效,至少需要800NS的宽度。给该引脚施加一个1US以上的高电平就可以复位。施加一个高电平之后,然后施加一个低电平。RSTDRV从高电平到低电平之后要等多久,单片机才可以对网卡进行操作复位的过程将执行一些操作,比如将93C46读入,将内部寄存器初始化等。这些至少需要2毫秒的时间。我们推荐大家等待更久的时间之后才对网卡操作,比如100毫秒之后才对它操作,以确保完全复位。对RSTDRV可以接单片机的一个引脚进行对网卡的复位。但也可以直接将RSTDRV跟单片机的RESET引脚并联,单片机复位的时候,网卡也复位,以减少一个单片机的引脚的使用。这种情况下,为了保证能够完全复位,可以使用下面介绍的热复位代码。33跟复位有关的寄存器18H1FH共8个地址,为复位端口。对该端口偶数地址的读,或者写入任何数,都引起网卡的复位。34跟复位有关的标志位其中的第7位RST跟复位有关。网卡执行正确的复位之后该位为1。在LINUX或WINDOWS的驱动程序中,一般在复位之后检查该标志位以确认是否正确复位,特别是在即插即用的检测过程中。对于我们用单片机控制网卡来说,我们可以不检查该标志位,因为如果复位不正常的情况通常是网卡坏了。35寄存器00H0FH共16个地址是寄存器地址。寄存器分成4页PAGE0PAGE3,但NE2000兼容的寄存器只有3页PAGE0PAGE2,(第四页是RTL8019AS自己定义的,我们不用去管这些寄存器,因为你对第四页的寄存器的操作仅对这个网卡是有效的,如果你换成其他NE2000兼容的网卡,例如DM9008,DP8390等,你的程序将无法正常运行。为了保证驱动程序对所有NE2000的网卡有效,不要去操作第四页的寄存器)由于寄存器较多,我将在用到该寄存器的时候才对该寄存器介绍。36对网卡进行复位这是网卡驱动程序的需要做的第一个内容,由于我们将网卡设置为跳线模式,而不是即插即用的模式,RTL8019ASPDF中介绍的PLUGANDPLAY的一些过程,我们不需要做,因为单片机的资源有限,能够减少的操作,都尽量减少。程序从MAIN开始执行INCLUDE/MYH为作者所用的头文件,包含所有89C52寄存器的大写和小写的定义,和一些常用的子函数,一些宏的定义/MAINDELAYMSECOND10/延时大约1秒,保证电源稳定和网卡自身的上电完成。NETCARDRESET/复位网卡的子程序。下面介绍网卡的复位子程序DEFINEREG1FXBYTE0XDF00/网卡的复位端口的地址,对应于网卡的地址25FH。DEFINEUINTUNSIGNEDINT/UINT代表UNSIGNEDINT,作者一般使用缩写UINTDEFINEUCHARUNSIGNEDCHAR/UCHAR代表UNSIGNEDCHAR,我比较懒,不愿意多写SBITRESETP34/单片机的P34脚连接到网卡的RSTDRV复位引脚VOIDNETCARDRESETUINTDATAIUCHARDATATEMPRESET1/使网卡的RSTDRV引脚变成高电平,网卡是高电平复位的。FORI0I0X7F时,CURR将被重置成等于PSTART0X4CCURR是网卡内部自己控制的用户不需要干预网卡存储一定是按页存储,不满一页,也使用一页,下一包将用下一页开始存储举个例子CURR0X4FBNRY0X4E这时收到一个数据包这是一个典型的ARP应答包,数据包发往5254AB3D8E2C,发送者的网卡地址为00D00968F71E,类型为0806假设我的网卡地址是5254AB3D8E2C,那么可以收到该包这时CURR0X50BNRY0X4E那么收到一包之后BNRYCURR2,而不是BNRYCURR1,也就是说两个指针差了两页,而不是一页也就是说当CURR,BNRY两个指针差2页或2页以上时,表示网卡收到新的数据包检查是否有新的数据包要用到这个关系,没有新的数据包时,两者指针只差一页数据包只有60个字节的数据,那么网卡将用CURR指向的页0X4F来存储该包数据存储内容如下0X4F00015040005254AB3D8E2C00D00968F71E0X4F100806000108000604000200D00968F71E0X4F20C0A800015254AB3D8E2CC0A8000700000X4F30000000000000000000000000000000000X4F40492E24C8我们可以看到前面和后面都加了一些东西,中间的才是数据共加了8个字节的内容共用了68个字节那么前面的4个字节的含义为前面的4个字节为01504000第一个字节0X01为接收的状态,也就是RSR接收状态寄存器的值该字节RECEIVESTATUS含义那么根据上面的标志位的定义,0X0100000001B,也就是标志位PRX1,表示这个数据包接收良好,没有错误CRC0,表示校验正确PHY0,表示这不是广播数据包第2个字节0X50NEXTPACKETPOINTER,是一个指针,表示下一个数据包将存储在0X50页开始的地址0X5000事实上等于此时的CURR0X50第3和第4是接收的长度表示该数据包的长度这里是0X4000,要注意的是长度的高位和低位是颠倒的RECEIVEBYTECOUNT10X00RECEIVEBYTECOUNT00X40长度应该是0X004064字节60字节是内容,4字节校验最后面的4个字节492E24C8就是CRC校验码11如何读写8019的RAM要接收和发送数据包都必须读写网卡的内部的16K的RAM,必须通过DMA进行读和写网卡的内部RAM是一块双端口的16K字节的RAM所谓双端口就是说有两套总线连结到该RAM,一套总线A是网卡控制器读/写网卡上的RAM,另一套总线B是单片机读/写网卡上的RAM总线A又叫LOCALDMA,总线B又叫REMOTEDMA上图中虚线框住的部分为REMOTEDMA,也就是单片机对网卡RAM进行读写的总线,对8019来说就是ISA总线没有框住的部分左边的部分,就是LOCALDMA,网卡控制器对网卡RAM进行读写的总线其中的地址总线没有画出来,只画了数据总线实际在RAM的内部还有一些总线仲裁的逻辑,这里也没有画出来所谓总线仲裁的逻辑就是为了实现两套总线都能进行对RAM的读写,而不互相冲突网卡控制器读写网卡RAMLOCALDMA的优先级比单片机读写网卡RAM的优先级要高优先级要高的意思是当两者都要请求控制总线时LOCALDMA优先获得控制权高优先级的LOCALDMA可以中断REMOTEDMA,而REMOTEDMA不能中断LOCALDMA在REMOTEDMA,也就是单片机对网卡RAM读写的过程进行中可以被LOCALDMA中断,LOCALDMA中断REMOTEDMA,然后进行LOCALDMA的数据传输,LOCALDMA传输完毕之后继续刚才被中断的REMOTEDMA,以完成REMOTEDMA的传输上图中的REMOTE就是REMOTEDMA的传输,LOCALBURST就是LOCALDMA的传输图的左边是一个REMOTEDMA被LOCALDMA中断的示意图REMOTEDMA是等到LOCALBURST完成之后才结束该次的传输被打断多久的时间取决于FT1,FT0是DCR配置寄存器的位单片机的总线要比网卡的DMA总线慢很多网卡的DMA总线大概在10MHZ,而单片机的总线大概1MHZ所以在REMOTEDMA的过程中不需要特别的等待时序但是如果使用较快的CPU,比如DSP,ARM等,可能要考虑时序问题也就是说IOCHRDYISA总线的一个信号,RTL8019AS,或者TRDYPCI总线的信号RTL8029AS,是需要考虑连到CPU上,或者做一定的处理那么对于不快也不慢的AVR单片机来说,要不要接IOCHRDY估计是要的因为我不提供AVR的上网方案,所以也没有做太多的研究对于77E58来说可以不接IOCHRDY,因为77E58可以内部设置外部RAM的存取的速度DMA有8位和16位两种网卡支持这两种DMA,一般我们使用8位的DMA,8位的DMA的接线比较少,同时适合单片机处理电脑里一般使用16位DMA有人问到在电脑里如何使用8位的DMA的问题有些卡自动检测总线上的IOCS16B来选择总线,比如RTL8019AS,我试过RTL8019AS使用8位DMA在电脑里是失败的如果真的要在电脑里使用8位的DMA,要把该引脚IOCS16B断开可以割断,而不连到ISA总线上,这样这些网卡会自动的进行8位的操作地址译码为10位对于使用DM9008芯片的网卡,16位DMA传输是由SLOT引脚决定的。我试过把DM9008的IOCS16B引脚与ISA槽断开(通过贴“透明胶”的方法),配套的设置程序检查时死机。如果想DM9008使用8位DMA操作,应该把SLOT引脚割断,而不是IOCS16B。在DSP里可以使用16位的DMA因为不同的单片机CPU,代码可能不同,我在下面将用几种表示法来论述假设用到的I/O地址为0XC000,读出到TEMP变量或写TEMP到寄存器,TEMP为8位变量通用的RTL8019C程序MCS51RTL8019汇编的程序MCS51TEMPREAD_REGISTERADDRESS读寄存器函数TEMPREG00MOVDPTR,ADDRESSMOVXA,DPTRMOVTEMP,AWRITE_REGISTERADDRESS,TEMP写寄存器函数REG00TEMPMOVTEMP,AMOVDPTR,ADDRESSMOVXDPTR,A注DEFINEREG00XBYTE0XC000注ADDRESSEQU0C000H通用的表达式VOIDWRITE_REGISTERUNSIGNEDCHARADDRESS,UNSIGNEDCHARVALUE或VOIDWRITE_REGISTERUNSIGNEDINTADDRESS,UNSIGNEDCHARVALUEUNSIGNEDCHARREAD_REGISTERUNSIGNEDCHARADDRESS或UNSIGNEDCHARREAD_REGISTERUNSIGNEDINTADDRESS上面的表达式中,根据你的地址或寻址方法而选择UNSIGNEDINTADDRESS或UNSIGNEDCHARADDRESS上表给出了用C语言或汇编语言或其他语言的表达的等价的程序下面给出用51单片机的C语言程序DEFINEREG00XBYTE0XC000/REG0010为ISA网卡接口的寄存器地址240250;DEFINEREG01XBYTE0XC100DEFINEREG02XBYTE0XC200DEFINEREG03XBYTE0XC300DEFINEREG04XBYTE0XC400DEFINEREG05XBYTE0XC500DEFINEREG06XBYTE0XC600DEFINEREG07XBYTE0XC700DEFINEREG08XBYTE0XC800DEFINEREG09XBYTE0XC900DEFINEREG0AXBYTE0XCA00DEFINEREG0BXBYTE0XCB00DEFINEREG0CXBYTE0XCC00DEFINEREG0DXBYTE0XCD00DEFINEREG0EXBYTE0XCE00DEFINEREG0FXBYTE0XCF00DEFINEREG10XBYTE0XD000XDATAUNSIGNEDCHARBUFFER1536/缓冲区,放在外部RAMUNSIGNEDINTCOUNT/需要读或写的字节数UNSIGNEDINTI/DCR0XC8要配置DCR为8位的DMA111VOIDWRITE_DMAUNSIGNEDINTADDRESS,UNSIGNEDINTCOUNT/写网卡的RAM/ADDRESS为要写入到网卡里的RAM的起始地址,COUNT为要连续写入的字节数PAGE0REG09ADDRESS8/ADDRESSHIGHREG08ADDRESS/ADDRESSLOWREG0BCOUNT8/WRITECOUNTHIGHREG0ACOUNT/WRITECOUNTLOWREG000X12/DMAWRITEFORI0I8/ADDRESSHIGHREG08ADDRESS/ADDRESSLOWREG0BCOUNT8/WRITECOUNTHIGHREG0ACOUNT/WRITECOUNTLOWREG000X0A/DMAREADFORI0I8/ADDRESSHIGHREG08ADDRESS/ADDRESSLOWREG0BCOUNT8/WRITECOUNTHIGHREG0ACOUNT/WRITECOUNTLOWREG000X12/DMAWRITECOUNTCOUNT1/2FORI0I8/ADDRESSHIGHREG08ADDRESS/ADDRESSLOWREG0BCOUNT8/WRITECOUNTHIGHREG0ACOUNT/WRITECOUNTLOWREG000X0A/DMAREADCOUNTCOUNT1/2FORI0I1WHILELEN0SUMDPIFLENGTHSUMSUM16SUMSUMSUM16LENSUMRETURNLEN所有TCP/IP协议的校验和计算和数据包的校验均由上面的子程序完成。不过需要注意的是TCP和UDP的校验需要加上伪头标,不然得不到正确的结果,伪头标违背了协议的分层原则,但这种违背是出于实际需要的,也正体现了TCP/IP协议设计的灵活性。24一个简单PING的实现PINGPACKETINTERNETGOPHER分组网间网探测器利用了ICMPINTERNETCONTROLMESSAGEPROTOCOL互联网控制报文协议协议的“回响”功能来实现主机/服务器是否有应答的测试。ICMP为路由器和主机提供了正常情况以外的通信,它是IP的一个完整的组成部分。ICMP包括降低传送速率的源站抑制报文、请求主机改变选路表的重定向报文以及主机可用来决定目的站是否可达的回送请求/回答报文。ICMP报文在IP数据报的数据区中传送。当主机/服务器接收到具有回响类型的ICMP报文时,就响应1个“回响应答”报文。本地机器收到该报文并确认之后即可认为该主机/服务器处于活动状态,从而本机与远程主机/服务器之间能够连通,也可以互相通信。仿照DOS下的PING命令并根据51单片机资源现状,我实现了一个简单的PING功能。它的使用方法如下1单片机PC机在SHELL里使用“PINGXXXXXXXXXXXX”,如果连通,显示“REPLYFROMXXXXXXXXXXXXBYTES32TTLXXX”,否则,显示“REQUESTTIMEDOUTXXXXXXXXXXXX”。2PC机单片机按照DOS里的常规操作即可每个PING命令重复测试8次,即显示8次信息。注意到显示内容与PC机上稍有不同,这是由于此处PING工作在多任务单窗口环境下,为了区分响应发送源,有必要增加源IP地址信息。另外,由于51资源限制,取消了TIME参数TIME是本机与对方主机往返一次所用时间显示。具体简化内容如下1只支持“PINGIP地址”命令格式,域名方式和其他可选项均不可用2固定32字节测试包3不计算本机与对方主机往返一次所用时间,测试用时为1到2秒总之,经过简化的PING能够完成最基本的连通测试功能。081631|类型8或0|代码0|校验和|标识符|序号|可选数据|。|图1ICMP回送请求或回答报文格式PINGCYCLE|定时操作VPINGCMD|PINGREQUEST|命令|请求|A|B|NUM1PRINTSTR“NPLEASEINPUTIPADDRESSNN“ELSEIFIPADRTOHEXWORDTABLEWT1STR,RETURNELSEPINGREQUESTPING_IP_ADDRESSINT16UCHECKSUMINT16UBUF,INT16ULENGTH/校验和计算INT16ULENINT32USUMLENLENGTH1FORSUM0LEN0LENSUMBUFIFLENGTHSUMSUM16SUMSUMSUM16RETURNSUMUNIONIP_ADDRESS_TYPE/IP地址数据结构UNSIGNEDLONGDWORDSUNSIGNEDINTWORDS2UNSIGNEDCHARBYTES4BITIPADRTOHEXUNSIGNEDCHARSTR,UNIONIP_ADDRESS_TYPEIP/IP字符串转换到IP地址值UNSIGNEDCHARI,J,CH,XCHSTRFORJ0J9RETURN0ELSEX10XCH0CHSTRIPBYTESJXX0FORI0I9RETURN0ELSEX10XCH0CHSTRIPBYTES3XRETURN1VOIDHEXTOIPADRUNSIGNEDCHARSTR,UNIONIP_ADDRESS_TYPEIP/IP地址值转换到IP字符串UNSIGNEDCHARIUNSIGNEDCHARX,YFORI0IBYTESIIFX99YX/100STRY0XX100YYX/10STRY0XX10YSTRX0IFI3STR0ELSESTRELSEIFX9YX/10STRY0XX10YSTRX0IFI3STR0ELSESTRELSESTRX0IFI3STR0ELSESTR参考文献1。用TCP/IP进行网际互连第3版第一、二、三卷DOUGLASECOMER著电子工业出版社2。WWWLAOGUCOM3。中国电脑教育报99合订本上册P182页上海曹建电子工业出版社25ARP协议实现原理ARP是ADDRESSRESOLUTIONPROTOCOL的缩写。中文译做“地址解析协议”,本质是完成网络地址到物理地址的映射。从概念上讲就是找到一个映射方法F,使得“物理地址F网络地址”。物理地址有两种基本类型以太网类型和PRONET令牌环网类型,网络地址特指IP地址,对映射方法的要求就是高效。具体到以太网,它使用的是动态绑定转换的方法。为什么不直接使用同一种地址,而要这么麻烦呢因为TCP/IP网络就是为将不同种类计算机互联而发明的,它的体系结构是分层的,层和层之间相互独立,改变物理层的实现不会影响到网络层。32位IP地址到以太网48位物理地址的映射,采用动态绑定转换的方法会遇到许多细节问题,例如减少广播,ARP包丢失,物理地址变更更换网卡、移动移动设备到另一子网、消失关机等。一般是设置ARP高速缓存,通过学习、老化、更新、溢出算法处理ARP映射表来解决这些问题。其中,学习指ARP收到任何指向本节点IP地址的ARP/IP包,从中提取出地址对,而ARP缓存中无对应项时,由ARP接收部分添加;老化指为每项设置寿命域,以便代谢掉陈旧的地址映射项;更新指ARP提取到新的地址对时,用其更新缓存里已有的对应项;溢出算法指当缓存满时,采取何种方法替换旧有的地址对儿。我找到了几个TCP/IP源代码,对比他们的实现,深感差别巨大,灵活多变。有的代码未实现ARP缓存,只用几个全局变量记录源目的IP地址和源目的MAC地址,每次通信前直接操作全局变量,这在使用51单片机,进行点对点通信时不失为一个有效的方案;而有的代码庞大复杂,细节处理精益求精。比如实现了ARP高速缓存、支持多址节点、支持网管查看/动态改变ARP相关参数、重发处理、支持IPV6等。我的看法是ARP的本质是地址转换,只要抓住这个灵魂,设计的大方向就把握住了。具体实现过程各具特色,因人而异,没有统一要求,有些功能可以不实现,有些优点不能兼得,而唯一不变的只有思想。我参考了几种已有的IP协议栈并结合51单片机的特点,实现了自己的基于UCOS51的TCP/IP协议栈方案。它只是一种具体的实现范例,不同的人有不同的设计方法。我保证自己的方案可以正常使用并具有较好的完备性。|状态|寿命TTL|IP地址|MAC地址|学习|0|FF|XXXX|XXXX|学习/更新|ARP表|发信号量|收完/收溢出错|SEMPOST|RXSEMPOST|发完/发被中断错TXSEMPOST图5网卡中断处理程序进入|V|发|低优先级|等待|已发了N次吗|Y图6发送流程图进入|V|收|高优先级|等待|RXSEMPEND|/|不执行|N|RXSEMPOSTV|Y|收溢出错|ISR之OVW|Y|N|N|网卡中还有包吗|V|CURRBNRY1|Y|读出包头,查有无逻辑错|/|N|V|按包长度申请合适的大中|释放内存|小号内存,并存入整个包|,再调整BNRY|/|V|N|ARPTABSIZEINDEX0IP_INPIP/IP包过滤ARP地址学习注这里处理的是IP包,伪代码与上面程序相似,但源代码差别很大。/更新FORI0IARPTABSIZEINDEX0TIMER/软定时器任务,用于ARP老化FORTASKDELAY1秒FORI0I设置控制面板网络标识。事实上,在我们的计算机中,计算机名往往是和本机IP地址对应的,默认的WINDOWS9X安装往往是带有NETBIOS协议的,通过使用网络程序可以由IP地址查出其对应的计算机名。所以在网上不少朋友常常奇怪为什么陌生人知道自己的姓名,原因大多是你安装WINDOWS时把计算机名填成了你的真实姓名。2628DHCP协议动态主机配置协议是TCP/IP的标准,设计目的是为了集中化动态IP地址的指派。比如我们拨号用户的IP地址都是由ISP的DHCP服务器动态指派的,所以几乎每次拨号后的IP地址都是不同的。其实利用DHCP服务器最大的好处是极大地提高了IP地址的利用率,不仅减少了开支,而且节省了IP资源。有的局域网里也采用DHCP服务器来为客户机动态分配IP地址以满足特殊需求。26299、ROUTE路由路由是指沿网络之间的路径转发通信的过程。被设置为支持路由选择的计算机,用来接收被发送的消息,并通过最有效的可用路由将它们转发到正确的目的地,即使可能有许多可用的路由。不同物理网络上的计算机要彼此进行通讯,就必需有路由器。路由器维护网络上的物理网络映射,并将从一个物理网络接收到的数据转发到其他物理网络。2621010、GATEWAY网关网关是互连网络中作在OSI运输层之上的设施,所以称为设施,是因为网关不一定是一台设备,有可能在一台主机中实现网关功能。当然也不排除使用一台计算机来专门实现网关具有的协议转换功能。由于网关是实现互连、互通和应用互作的设施。所以在TCP/IP网络中,网关有时就是指实现这种功能的设备路由器。263网络工具介绍为了让大家能够比较容易地掌握WINDOWS网络工具,下面的讲述中不仅给出了网络工具的作用、原理和用法,而且还给出了详尽的应用示例,参照练习,必将起到事半功倍之效。在这里需要指出的两点是以下网络工具的程序文件都存在于WINDOWS的安装目录中,一般WINDOWS系统安装的默认目录为CWINDOWS,但并不是所有的用户都安装在此目录中。L为介绍方便下文中的部分主机系统、用户名和密码等是假设的,用户具体演练时需要知道自己所面对的系统的真实网络配置。264最常用的网络测试工具PINGEXE作用PING的主要作用是验证与远程计算机的连接。该命令只有在安装了TCP/IP协议后才可以使用。原理向远程计算机通过ICMP协议发送特定的数据包,然后等待回应并接收返回的数据包,对每个接收的数据包均根据传输的消息进行验证。默认情况下,传输四个包含32字节数据(由字母组成的一个循环大写字母序列)的回显数据包。过程如下(1)通过将ICMP回显数据包发送到计算机并侦听回显回复数据包来验证与一台或多台远程计算机的连接。(2)每个发送的数据包最多等待一秒。(3)打印已传输和接收的数据包数。用法PINGTANCOUNTLLENGTHFITTLVTOSRCOUNTSCOUNTJCOMPUTERLIST|KCOMPUTERLISTWTIMEOUTDESTINATIONLIST参数一览表编号参数描述1TPING指定的计算机直到中断。2A将地址解析为计算机名。3NCOUNT发送COUNT指定的ECHO数据包数。默认值为4。4LLENGTH发送包含由LENGTH指定的数据量的ECHO数据包。默认为32字节;最大值是65,527。5F在数据包中发送“不要分段”标志。数据包就不会被路由上的网关分段。6ITTL将“生存时间”字段设置为TTL指定的值。7VTOS将“服务类型”字段设置为TOS指定的值。8RCOUNT在“记录路由”字段中记录传出和返回数据包的路由。COUNT可以指定最少1台,最多9台计算机。9SCOUNT指定COUNT指定的跃点数的时间戳。10JCOMPUTERLIST利用COMPUTERLIST指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)IP允许的最大数量为9。11KCOMPUTERLIST利用COMPUTERLIST指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)IP允许的最大数量为9。12WTIMEOUT指定超时间隔,单位为毫秒。13DESTINATIONLIST指定要PING的远程计算机。示例(1)判断本地的TCP/IP协议栈是否已安装PING127001或PING机器名说明若显示REPLYFROM127001信息则说明已安装。(2)判断能否到达指定IP地址的远程计算机CPING19216801或20210224525说明若显示REPLY信息则说明能够到达,若显示REQUESTTIMEDOUT则说明不能够到达。(3)根据域名获得其对应的IP地址CPINGWWWDOMAINCOM回车说明显示的REPLYFROMXXXXXXXXXXXX信息则XXXXXXXXXXXX就是域名对应的IP地址。(4)根据IP地址获取域名CPINGAXXXXXXXXXXXX说明若显示PINGINGWWWDOMAINCOMXXXXXXXXXXXX信息则WWWDOMAINCOM就是IP对应的域名。(5)根据IP地址获取机器名CPINGA127001说明若显示PINGINGJANKER127001信息则JANKER就是IP对应的机器名。此方法只能反解本地的机器名。(5)PING指定的IP地址30次CPINGN3020210224525(6)用400字节长的包PING指定的IP地址CPINGL40020210224525265网络配置查看程序WINIPCFGEXE(WIN95里)或IPCONFIGEXE(WIN98/ME里)作用该工具主要用于发现和解决TCP/IP网络问题,可以用该工具获得主机配置信息,包括IP地址、子网掩码和默认网关等等。用法(1)查看所有配置信息WINIPCFG或IPCONFIG/ALLHOSTNAME(计算机名)JANKERDESCRIPTION(描述)PPPADAPATER(点对点数据传输协议)PHYSICALADDRESS(MAC地址)00A00C18314CIPADDRESS(IP地址)2029616810SUBNETMASK(子网掩码)255255255255(用于识别是否在同一局域网内)DEFAULTGATEWAY(默认网关)2029616810(沟通不同网络的接点)DNSSERVER(域名服务器)20296199162(提供域名到IP的查询服务)NETBIOSOVERTCPIP(NETBIOS协议)ENABLED(能)说明如果计算机配置的IP地址与现有的IP地址重复,则子网掩码显示为0000。(2)刷新配置对于启用DHCP的WINDOWS95客户,请使用WINIPCFG命令的RELEASE和RENEW选项,而WINDOWS98/ME客户用而不是IPCONFIG/RELEASE_ALL和IPCONFIG/RENEW_ALL命令,手动释放或更新客户的IP配置租约。2663、网络连接统计工具NETSTATEXE作用该工具显示了您的计算机上的TCP连接表、UDP监听者表以及IP协议统计。用法可以使用NETSTAT命令显示协议统计信息和当前的TCP/IP连接。NETSTATA命令将显示所有连接,而NETSTATR显示路由表和活动连接。NETSTATE命令将显示ETHERNET统计信息,而NETSTATS显示每个协议的统计信息。如果使用NETSTATN,则不能将地址和端口号转换成名称。示例(1)显示所有连接CNETSTATAACTIVECONNECTIONS;活动的连接PROTOLOCALADDRESSFOREIGNADDRESSSTATE;协议本地地址外部地址状态TCP00002100000LISTENING;你的机器提供FTP文件传输服务TCP00008000000LISTENING;你的机器提供WEB网页服务TCP6112820319413900000LISTENING;本机提供NETBIOS服务TCP61128203194762600000LISTENING;你的机器很可能被安装了“冰河”木马TCP6112820319480202102251211164ESTABLISHED;IP地址为20210225121的人正在浏览你机器上的网页TCP1921680254107120210224924580SYN_SENT;你正在向IP地址为202102249245的网站提交网页请求TCP61128203194121120210841280ESTABLISHED;你正在浏览IP地址202108412网站的网页TCP6112820319412102021022452580CLOSE_WAIT;你正在关闭和IP地址为20210224525网站的连接TCP611282031941081202101981556667ESTABLISHED;你正在用IRC软件聊天UDP0000135;本地系统服务UDP61128203194137;NETBIOS名字服务UDP61128203194138;NETBIOS数据报服务UDP61128203194139;NETBIOS会话服务UDP00004000;你正在用OICQ软件聊天(2)显示所有协议的统计信息CNETSTATSIPSTATISTICS;IP统计结果PACKETSRECEIVED5378528;接收包数RECEIVEDHEADERERRORS738854;接收头错误数RECEIVEDADDRESSERRORS23150;接收地址错误数DATAGRAMSFORWARDED0;数据报递送数UNKNOWNPROTOCOLSRECEIVED0;未知协议接收数RECEIVEDPACKETSDISCARDED0;接收后丢弃的包数RECEIVEDPACKETSDELIVERED4616524;接收后转交的包数OUTPUTREQUESTS132702;请求数ROUTINGDISCARDS157;路由丢弃数DISCARDEDOUTPUTPACKETS0;丢弃请求包数OUTPUTPACKETNOROUTE0;不路由的请求包数REASSEMBLYREQUIRED0;重新组装的请求数REASSEMBLYSUCCESSFUL0;重新组装成功数REASSEMBLYFAILURES;重新组装失败数DATAGRAMSSUCCESSFULLYFRAGMENTED0;分片成功的数据报数DATAGRAMSFAILINGFRAGMENTATION0;分片失败的数据报数FRAGMENTSCREATED0;分片建立数ICMPSTATISTICS;ICMP统计结果RECEIVEDSENT;接收发送MESSAGES6934;消息数ERRORS00;错误数DESTINATIONUNREACHABLE6850;无法到达主机数TIMEEXCEEDED00;超时数PARAMETERPROBLEMS00;参数错误数SOURCEQUENCHES00;源夭折数REDIRECTS00;重定向数ECHOES40;回应数ECHOREPLIES04;回应回复数TIMESTAMPS00;时间戳数TIMESTAMPREPLIES00;时间戳回复数ADDRESSMASKS00;地址掩码数ADDRESSMASKREPLIES00;地址掩码回复数TCPSTATISTICS;TCP统计结果ACTIVEOPENS597;主动打开数PASSIVEOPENS135;被动打开数FAILEDCONNECTIONATTEMPTS107;连接失败尝试数RESETCONNECTIONS91;复位连接数CURRENTCONNECTIONS8;当前正连数SEGMENTSRECEIVED106770;接收到的片数SEGMENTSSENT118431;发送的片数SEGMENTSRETRANSMITTED461;被重新传输的片数UDPSTATISTICS;UDP统计结果DATAGRAMSRECEIVED4157136;数据报结束数NOPORTS351928;无端口数RECEIVEERRORS2;接收错误数DATAGRAMSSENT13809说明通常可以通过这些信息得知你机器上正在打开的端口和服务,利用这你点可以检查你的机器上是否有木马哦一般来说若有非正常端口在监听中,你就需要注意了。同时,你还可以看到机器正在和那些IP地址以TCP、UDP或其他协议进行连接的状态。267纵网络路由表的工具ROUTEEXE作用该工具用于显示和控制您的机器IP的路由表,主要显示的信息有目标地址、网络掩码、网关和本地IP地址等。用法ROUTEFPCOMMANDDESTINATIONMASKSUBNETMASKGATEWAYMETRICCOSTMETRIC参数说明(1)参数F清除所有网关入口的路由表。如果该参数与某个命令组合使用,路由表将在运行命令前清除。P该参数与ADD命令一起使用时,将使路由在系统引导程序之间持久存在。默认情况下,系统重新启动时不保留路由。与PRINT命令一起使用时,显示已注册的持久路由列表。忽略其他所有总是影响相应持久路由的命令。(2)COMMANDPRINT打印路由ADD添加路由DELETE删除路由CHANGE更改现存路由DESTINATION指定发送COMMAND的计算机。MASKSUBNETMASK指定与该路由条目关联的子网掩码。如果没有指定,将使用255255255255。GATEWAY指定网关。名为NETWORKS的网络数据库文件和名为HOSTS的计算机名数据库文件中均引用全部DESTINATION或GATEWAY使用的符号名称。如果命令是PRINT或DELETE,目标和网关还可以使用通配符,也可以省略网关参数。METRICCOSTMETRIC指派整数跃点数(从1到9999)在计算最快速、最可靠和(或)最便宜的路由时使用。示例(1)显示全部路由信息CROUTEPRINTINTERFACELIST网络接口列表0X1MSTCPLOOPBACKINTERFACE;本地回送接口0X2444553547777NTSPPPOEADAPTER1;ADSL网络卡0X10000050050BADDB540REALTEKRTL8029ASETHERNETADAPT;以太网卡ACTIVEROUTES;活动路由NETWORKDESTINATIONNETMASKGATEWAYINTERFACEMETRIC000000006114120610361141206103161141206025525525506114120610361141206103100611412061032552552552551270011270011006125525525525525525525561141206103611412061031001270002550001270011270011169254002552550016925415320516925415320521692541532052552552552551270011270011169254255255255255255255169254153205169254153205119216800255255255019216801192168011192168012552552552551270011270011192168025525525525525519216801192168011224000224000611412061036114120610310022400022400016925415320516925415320512240002240001921680119216801125525525525525525525525561141206103611412061031DEFAULTGATEWAY61141206103说明ROUTEPRINT和NETSTATR具有同样的效果。(2)添加一个路由CROUTEADD157000MASK25500015755801METRIC3IF2说明若IF参数没有给出的话,系统将尽力为网关1575

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论