51 RTL8019网络传输整个系统详解 ARP UDP TCP IP数据传输格式 WSP
51单片机网络通信及ICMP回显应答实现(全文)
![51单片机网络通信及ICMP回显应答实现(全文)](https://img.taocdn.com/s3/m/b10534db376baf1ffd4fada8.png)
51单片机网络通信及ICMP回显应答实现(全文) 摘要:在基于8位的单片机控制系统开发中,51系列单片机仍然具有广泛的应用前景。
将51单片机与RTL8019AS网络控制芯片结合起来,对网络控制芯片的控制实现方法进行探讨,并对51单片机ICMP回显应答报文实现进行研究,具有实际应用价值。
关键词:51单片机;RTL8019AS;ICMP回显应答中图分类号:TP368文献标识码:A文章编号:1009-3044(2012)12-2917-03The 51 Series MCU Network Communication and ICMP Echo Reply ImplementationYU Lei(College of Continuing Education, Guizhou University, Guiyang 550001, China)Abstract: Based on 8-bit MCU control system development, the 51 series single-chip still has the widespread application prospect.The 51 single-chip microcomputer and RTL8019AS network control chips combine to discussion on the control method for network control chip, and the 51 single chip microcomputer using ICMP Echo Reply methodology for study, which has practical application value.Key words: the 51 Series MCU; RTL8019AS; ICMP Echo Reply物联网技术的发展和应用,使越来越多的非PC设备开始接入到基于TCP/IP协议的网络中。
以太网控制器RTL8019
![以太网控制器RTL8019](https://img.taocdn.com/s3/m/6de4fbef856a561252d36fcc.png)
以太网控制器RTL8019RTL8019是高度集成的以太网控制器,为即插即用式NE2000兼容网络适配器提供了简易的解决方案.RTL8019共有32个输入输出地址,对应地址偏移量为00h—lFh.RTL8019的内部寄存器是分页的,每个寄存器都是8位.RTL8019的复位RTL8019的复位引脚RSTDRV是高电平有效的复位信号,高电平时间长度需大于800 ns,通常在RSTDRV从高电平回到低电平之后的100ms时,再对RTL8019进行读写操作,以确保完全复位.当处理器复位时,以太网控制器也复位.热复位:为了保证能够完全复位,可以使用热复位方法.18h一1Fh的8个地址,为复位端口,对该端口的偶数地址读或写入任何数,都会引起以太网控制器的复位,这种方式称为热复位.中断状态寄存器中的第7位RST跟复位有关,它的地址为07h,位于第0页,可直接读写.在以太网控制器执行了正确复位之后该位为1.一般在复位之后检查该标志位,以确认是否复位成功.RTL8019寄存器Ⅰ1.命令寄存器CR:地址偏移量是00h,长度为一个字节.位符号描述7,6 PS1,PS0 选择寄存器页00:0页01:1页10:2页11:3页(为RTL8019AS配置)5—3 RD2—0 表示要执行的功能000:不允许;001:远程读取以太网控制器内存;010:远程写入以太网控制器内存;011:发送包1XX:中止/完成远程DMA2 TXP 要发送数据包时,要将该位置1,该位可能在发送完成后或者发送中止时内部清0,对该位写0操作无效1 STA 写STP组合使用0 STP 该位是停止命令.该位被置1,就停止接收或发送任何数据包,上电时该位为1.STA 与STP组合使用,10:启动命令01:停止命令RTL8019寄存器Ⅱ(1)2.与发送/接收相关的寄存器:①PSTART:接收缓冲区的起始页地址(位于01h,在第0页可写,在第2页可读).②PSTOP:接收缓冲区的结束页地址(该页不用于接收,位于02h,在第0页可写,在第2页可读).③BNRY:边界寄存器(作为读指针使用,位于03h,在第0页可读写).这个寄存器用来避免对环形接收缓冲区中数据的错误覆盖,通常用作指针,指向接收缓冲区中已经被读取的最后一个页.④CURR:当前页寄存器(作为写指针使用,位于07h,在第1页可读写).这个寄存器的内容指向接收缓冲区中第一个可用于接收新数据的页面.⑤DCR:数据配置寄存器.将它设置为使用FIFO缓存,普通模式,8位数据传输模式.字节顺序为高位字节在前,低位字节在后.RTL8019寄存器Ⅱ(2)⑥TPSR:为发送页的起始页地址.初始化为指向第一个发送缓冲区的页.⑦RCR :接收配置寄存器,设置为使用接收缓冲区,仅接收与自己地址相匹配的数据包(以及广播地址数据包)和多点播送地址包;小于64字节的包和校验错的数据包将被丢弃.⑧TCR:发送配置寄存器,启用CRC(循环冗余校验)自动生成和校验功能,工作在正常模式.⑨RSAR0,1:对存储器进行操作的起始地址寄存器,RSAR0存放低8位,RSARl存放高8位.⑩RBCR0,1:对存储器操作的字节计数寄存器,RBCR0存放低8位,RBCRl存放高8位.⑩TBCR0,1:发送字节计数器,这两个寄存器设置了要发送数据包中的字节个数.TBCR0存放低8位,TBCRl存放高8位.RTL8019寄存器Ⅲ3.其他寄存器:①IMR:中断屏蔽寄存器,设置成0x00时,屏蔽所有的中断,设置成0xFF将允许中断.②MAR0一MAR8:多点播送地址,可以全写0xFF.③PAGE2的寄存器是只读的,不用设置.PAGE3的寄存器不是NE2000兼容的,所以也不用设置.RAM空间结构以太网控制器含有16KB的RAM,地址为0x4000—0x7FFF,每256个字节称为一页,共有64页._使用0x40—0x45作为以太网控制器的发送缓冲区,共6页.使用0x46~0x5F作为以太网控制器的接收缓冲区,共32页.CURR和BNRY寄存器是以太网数据收发中用到的两个最主要的寄存器,CURR和BNRY主要用来控制缓冲区的存取过程,保证能顺次写入和读出.CURR是以太网控制器写接收缓冲区的指针.BNRY指向接收缓冲区中已经被读取的最后一个页.网卡的物理地址在完成对寄存器的初始化后,还要对以太网控制器的物理地址(即48位的以太网控制器地址)进行设置.RAM地址中的0x0000~0x000B的12字节是网卡的物理地址.网卡的物理地址本应该是6个字节的,这12字节是单双地址重复存储的.0x000B后面的地址存储的是生产厂商的代码和产品标识代码,也是单双地址重复存储的.以太网模块的接口设计Ⅰ配置RTL8019:为了系统的精简,配置RTL8019为非即插即用模式.有着固定的中断,有着固定的端口地址.以太网模块与处理器的接口电路:以太网模块的接口设计Ⅱ1.寄存器地址映射:采用nGCS5作为以太网模块的地址使能位,将以太网卡映射在了系统的Bank5上,地址从0xa000000开始,由此,要在程序中定义RTL8019的寄存器地址.2.书写RTL8019中的页面切换函数,热复位函数(硬件复位之后的一次热复位)和初始化函数(设置接收缓冲区的位置和以太网物理地址,初始化寄存器,设置中断的模式).通过RTL8019传输数据:数据的发送校验,总线数据包的碰撞检测与避免都由芯片自己完成的,我们只需要配置发送数据的物理层地址的源地址,目的地址,数据包类型以及发送的数据就可以进行数据发送了.PSTART 接收缓冲区的起始页的地址。
开发指南---51单片机+RTL8019上网编程指南
![开发指南---51单片机+RTL8019上网编程指南](https://img.taocdn.com/s3/m/ef8ab660f5335a8102d220ae.png)
复位的过程将执行一些操作,比如将 93c46 读入,将内部寄存器初始化等。这些至少需要 2 毫秒的时间。我们推 荐大家等待更久的时间之后才对网卡操作,比如 100 毫秒之后才对它操作,以确保完全复位。
对 RSTDRV 可以接单片机的一个引脚进行对网卡的复位。但也可以直接将 RSTDRV 跟单片机的 RESET 引脚并联,单 片机复位的时候,网卡也复位,以减少一个单片机的引脚的使用。这种情况下,为了保证能够完全复位,可以使用下 面介绍的热复位代码。 1.5. 跟复位有关的寄存器:
00H--0FH 共 16 个地址是寄存器地址。 寄存器分成 4 页 PAGE0--PAGE3,但 NE2000 兼容的寄存器只有 3 页(Page0-Page2),(第四页是 RTL8019AS 自己定 义的,我们不用去管这些寄存器,因为你对第四页的寄存器的操作仅对这个网卡是有效的,如果你换成其他 Ne2000 兼容的网卡,例如 DM9008,DP8390 等,你的程序将无法正常运行。 为了保证驱动程序对所有 Ne2000 的网卡有效,不 要去操作第四页的寄存器) 由于寄存器较多,我将在用到该寄存器的时候才对该寄存器介绍。 1.8. 对网卡进行复位: 这是网卡驱动程序的需要做的第一个内容,由于我们将网卡设置为跳线模式,而不是即插即用的模式, RTL8019AS.PDF 中介绍的 PLUG and PLAY 的一些过程,我们不需要做,因为单片机的资源有限,能够减少的操作,都 尽量减少。 程序从 main()开始执行: #include <my.h> /*my.h 为作者所用的头文件,包含所有 89c52 寄存器的大写和小写的定义, 和一些常用的子函数,一些宏的定义*/
基于RTL8019AS的TCP/IP以太网数据交换技术研究
![基于RTL8019AS的TCP/IP以太网数据交换技术研究](https://img.taocdn.com/s3/m/463b30ced5bbfd0a7856730e.png)
1 以太 网协 议 标 准
以太 网是 当前 流行 的 主流 网络 形式 , 以太 网中
数 据交 换 的效 能 高低 , 对 以太 网 的运行 效率 至关 重
大 长度 为 l 5 1 4字节 , 最小 不小 于 6 0字节 。 目的地 址 D A为此 帧要发 送到 的 MA C地 址 , 源 地址 S A为
基于 R T L 8 0 1 9 A S的 T C P / I P以太 网数 据 交换 技 术 研 究
韩 泽远 , 张 宁 , 杨 艾 红
( 北京联合大学 信息学院 , 北 京 1 0 0 1 0 1 )
[ 摘 要 ] 探 讨 了以 太 网帧协 议 和 T C P / I P协 议 , 研 究 了以 太 网控 制 器 芯 片 R T L 8 0 1 9 A S及 其 内
设备 的 以太 网数据 交换 。
[ 关键 词 ] 以 太 网; T C P / I P; 数据 交换 [ 中 图分类 号 ] T P 3 9 3 . 1 1 [ 文献 标志 码 ] A [ 文章 编号 ] 1 0 0 5 . 0 3 1 0 ( 2 0 1 4) 0 1 — 0 0 2 6 . 0 4
2 0 1 4年 1月
北 京联 合 大 学 学 报
J o u r n a l o f B e i j i n g Un i o n Un i v e r s i t y
J a n . 2 0 1 4
Vo 1 . 28 No. 1 S um No . 95
第 2 8卷 第 1 期总 9 5期
发送 节点 的 MA C地址 , 可在 命令 行 中用 i p c o n i f g命
令查 询本 机 网卡 地 址 ; 其中 D A、 S A、 T Y P E 占据 1 4
RTL8019操作规范
![RTL8019操作规范](https://img.taocdn.com/s3/m/d218d33b83c4bb4cf7ecd1bb.png)
本系列文章的第三部分主要介绍了SkyEye硬件模拟平台的实现细节。
主要内容包括SkyEye的总体设计、SkyEye的可扩展框架、SkyEye的关键数据结构、SkyEye对各种CPU的模拟实现、SkyEye对各种外设的模拟实现、如何安装使用SkyEye以及如何扩展SkyEye的仿真模块等。
对SkyEye的深入了解,有助于对嵌入式硬件系统有更深入的认识,特别是对操作系统、驱动程序如何与嵌入式硬件系统进行交互有更深刻的了解。
1.1.6 SkyEye的网络模拟实现1. RTL8019AS网络芯片模拟的构思和设计概述目前网络在嵌入式系统中应用越来越广泛,通过为SkyEye增加虚拟以太网芯片设备,使SkyEye支持ethernet网络接口模拟。
这样在SkyEye硬件模拟平台上运行的操作系统能够与本地Linux主机进行网络通信,当然通过ipchains/iptables等包转发机制可以进一步支持直接跟Internet通信。
鉴于目前嵌入式设备中广泛使用了NE2K10Base-T兼容网络芯片,其中RTL8019AS又是比较有代表性的一种,购买也比较方便,我们就决定模拟它。
设计方案完全基于真实的RTL8019AS(NE2000兼容,简称8019AS),但做了部份简化。
简化掉的部分主要包括:∙一部分状态寄存器。
主要是收发数据包的状态信息,一般在嵌入式系统中用的比较少,因此暂时没有加入模拟。
∙16位模式DMA。
对NE2K的芯片,8位DMA和16位DMA模式仅在收发数据效率上不同,但这对SkyEye来说效率并不是很重要,所以仅模拟了8位DMA模式。
∙CPU从网络芯片收数据包的Remote DMA Read模式。
由于8019AS提供了另一种更高效的Send Command方式来收数据包,所以为简化起见,没有模拟Remote DMA Read。
目前设计虚拟以太网芯片设备对简化的原则是:把虚拟网络芯片的驱动放到真实8019AS 网络芯片上去,直接能用就可以了,目前还不能保证其它系统上的NE2K驱动能直接在SkyEye上用。
用51单片机控制RTL8019AS实现以太网通讯
![用51单片机控制RTL8019AS实现以太网通讯](https://img.taocdn.com/s3/m/3de72d030812a21614791711cc7931b765ce7b91.png)
用51单片机控制RTL8019AS实现以太网通讯用51单片机控制RTL8019AS实现以太网通讯摘要:介绍以太网的帧协议和以太网控制芯片RTL8019AS的结构特性;介绍51单片机控制RTL8019AS实现以太网通讯的硬件设计方案;采用C51语言实现ARP协议(地址解析协议),并进行了系统的调试与验证。
关键词:RTL8019ASEthernet51单片机TCP/IP协议互联网络硬件、软件的迅猛发展,使得网络用户呈指数增长,在使用计算机进行网络互联的同时,各种家电设备、仪器仪表以及工业生产中的数据采集与控制设备在逐步地走向网络化,以便共享网络中庞大的信息资源。
在电子设备日趋网络化的背景下,利用廉价的51单片机来控制RTL8019AS实现以太网通讯具有十分重要的意义。
1以太网(Ethernet)协议一个标准的以太网物理传输帧由七部分组成(如表1所示,单位:字节)。
表1以太网的物理传输帧结构表PRSDDASATYPEDATAFCS同步位分隔位目的地址源地址类型字段数据段帧校验序列7166246~15004除了数据段的长度不定外,其他部分的长度固定不变。
数据段为46~1500字节。
以太网规定整个传输包的最大长度不能超过1514字节(14字节为DA、SA、TYPE),最小不能小于60字节。
除去DA、SA、TYPE14字节,还必须传输46字节的数据,当数据段的数据不足46字节时需填充,填充字符的个数不包括在长度字段里;超过1500字节时,需拆成多个帧传送。
事实上,发送数据时,PR、SD、FCS及填充字段这几个数据段由以太网控制器自动产生;而接收数据时,PR、SD被跳过,控制器一旦检测到有效的前序字段(即PR、SD),就认为接收数据开始。
2RTL8019AS以太网控制器简介由台湾Realtek公司生产的RTL8019AS以太网控制器,由于其优良的性能、低兼的价格,使其在市场上10Mbps网卡中占有相当的比例。
51单片机网络通信及ARP协议论文
![51单片机网络通信及ARP协议论文](https://img.taocdn.com/s3/m/2343e9cc0875f46527d3240c844769eae009a3a6.png)
51单片机网络通信及ARP协议论文51单片机网络通信及ARP协议论文本文主要以SST89E564RD型51单片机和RTL8019AS 网络接口芯片为例,研究了如何将51单片机与网络接口芯片进行硬件的电路连接,并通过将ARP协议进行简化和重新定义,实现了将51单片机接入TCP/IP进行网络通信,对该领域的研究具有一定的借鉴意义。
1 51单片机与网络控制器的连接RTL8019AS 网络接口芯片是台湾 Realtek 公司的代表性产品之一,该芯片基于ISA 总线结构,性能稳定且价格低廉,在工业企业领域有非常广泛的应用[ 1 ]。
1.1 RTL8019AS接口芯片的主要特性RTL8019AS芯片主要优点有:一是支持热插拔(即插即用)的动态检测;二是完全兼容当前主流的NE2000 模式并可在8 位与16 位两种模式下工作;三是有跳线与非跳线两种模式可供选择;四是支持全双工通信模式,双工通信时信道的传输速率可达到10Mbps;五是内置数据预取功能;六是内置 16K 字节的闪存;七是支持 8/16两种前端总线工作模式,内置8 个中断申请线,同时有16 个I/O地址可供选择。
1.2 51单片机与RTL8019AS连接实现网络通信的电路设计1.2.1 RTL8019AS 与 93C46 接口电路93C46接口电路内部存储容量为1Kbits,是四线串行接口EEPROM。
RTL 8019 AS芯片在上电或者初始化复位时,首先要从该芯片中读取预设的配置信息才能完成初始化。
93C46 内部存储器的前三个地址空间用于存放RTL8019AS芯片的上电初始化信息;后5个地址空间用于记录本机地址;0AH-11H 的地址空间分配给制造商存储产品的信息;12H~7FH 的地址空间用于记录即插即用信息。
RTL 8019 AS 的EECS引脚连接93C46的CS引脚,EESK引脚连接SK引脚,EEDI引脚连接DI,EEDO引脚连接DO引脚,即由EECS 提供片选信号,EESK 提供时钟信号,EEDI 与 EEDO 定义为串行数据I/O通道。
51单片机RTL8019AS网卡驱动程序(重要有程序)
![51单片机RTL8019AS网卡驱动程序(重要有程序)](https://img.taocdn.com/s3/m/aabd293da8114431b90dd8dc.png)
51单片机RTL8019AS网卡驱动程序时间:2006-09-05 来源: 作者: 点击:3863 字体大小:【大中小】我的SNMP网管板使用了RTL8019AS 10M ISA网卡芯片接入以太网。
选它的好处是:NE2000兼容,软件移植性好;接口简单不用转换芯片如PCI-ISA 桥;价格便宜2.1$/片(我的购入价为22元RMB/片);带宽充裕(针对51);较长一段时间内不会停产。
8019有3种配置模式:跳线方式、即插即用P&P方式、串行Flash配置方式。
为了节省成本,我去掉了9346而使用X5045作为闪盘存储MAC地址和其他可配置信息。
P&P模式用在PC机中,这里用不上。
只剩下跳线配置模式可用,它的电路设计参考REALTEK提供的DEMO板图纸。
一天时间就可以完成,相对来说硬件设计比较简单。
与这部分硬件相对应的软件是网卡驱动。
所谓驱动程序是指一组子程序,它们屏蔽了底层硬件处理细节,同时向上层软件提供硬件无关接口。
驱动程序可以写成子程序嵌入到应用程序里(如DOS下的I/O端口操作和ISR),也可以放在动态链接库里,用到的时候再动态调入以便节省内存。
在WIN98中,为了使V86、WIN16、WIN32三种模式的应用程序共存,提出了虚拟机的概念,在CPU的配合下,系统工作在保护模式,OS接管了I/O、中断、内存访问,应用程序不能直接访问硬件。
这样提高了系统可靠性和兼容性,也带来了软件编程复杂的问题。
任何网卡驱动都要按VXD或WDM模式编写,对于硬件一侧要处理虚拟机操作、总线协议(如ISA、PCI)、即插即用、电源管理;上层软件一侧要实现NDIS规范。
因此在WIN98下实现网卡驱动是一件相当复杂的事情。
我这里说的驱动程序特指实模式下的一组硬件芯片驱动子程序。
从程序员的角度看,8019工作流程非常简单,驱动程序将要发送的数据包按指定格式写入芯片并启动发送命令,8019会自动把数据包转换成物理帧格式在物理信道上传输。
51单片机上网RLT8019 AS C文件源代码
![51单片机上网RLT8019 AS C文件源代码](https://img.taocdn.com/s3/m/d9cc380d844769eae009ed24.png)
本代码为10Mbit RTL8019网卡C文件完整代码,配置方式为跳线方式,适合51系列单片机,经多次使用,性能稳定,学习51单片机上网的网友可直接下载使用,#include "eth.h"#define TIME0_TH0 0xce#define TIME0_TL0 0x41// Packet transmit & receive buffer configuration#define ETH_TX_PAGE_START 0x40 // 0x4000 Tx buffer is 6 * 256 = 1536 bytes#define ETH_RX_PAGE_START 0x4c // 0x4600 Rx buffer is 26 * 256 = 6656 bytes#define ETH_RX_PAGE_STOP 0x60 // 0x6000#define ETH_MIN_PACKET_LEN 0x3Cstatic void etherdev_reg_write(unsigned char reg, unsigned char wr_data);static unsigned char etherdev_reg_read(unsigned char reg);static void etherdev_delay_ms(unsigned int count);static unsigned int etherdev_poll(void);void Delay1(uchar x);//static void etherdev_timer0_isr(void) interrupt 1 using 1;// Manipulate PS1 & PS0 in CR to select RTL8019AS register page.void page(uchar pagenumber){ uchar data temp;temp=CR; //读入命令寄存器的值。
基于RTL8019的以太网应用系统
![基于RTL8019的以太网应用系统](https://img.taocdn.com/s3/m/7c4a950ff12d2af90242e6b0.png)
基于RTL8019的以太网应用系统2007-11-06 10:57:09 本文已公布到博客频道校园·教育分类基于RTL8019的以太网应用系统基于RTL8019的以太网应用系统以太网接口模块是构造一给通用的基于网络的嵌入式Linux系统的基础,该接口模块的主要任务就是完成与外界信息的交互,以达到网络监控的目的。
使用RTL8019作为以太网的物理层接口,它的基本工作原理:是在收到由主机发来的数据报后(从目的地址域到数据域),侦听网络线路。
如果线路忙,就等到线路空闲为止,否则,立即发送数据桢。
RTL8019为台湾芯片生产商Realtek公司第三代快速以太网连接而设计,它支持多种嵌入式处理器芯片,内置FIFO缓存器用于发送和接受数据。
系统硬件电路结构图:系统工作流程图:网络数据的发送流程:RTL8019工作代码: //RTL8019.c#include "GloblDef.h" #include "MMenage.h"#include "RTL8019.h"extern BYTE MemAllocation(WORD size);extern void FreePage(BYTE page);extern BYTE xdata *MemPageToPoint(BYTE page);extern BYTE WriteQueue(BYTE page,struct Queue xdata * pQueue); BYTE xdata LocalMACAddr[6]={0x52,0x54,0x4c,0x30,0x2e,0x2f}; struct Queue xdata QueueNetPacketIn;BYTE StartPageOfPacket;/* 接收头文件信息*/struct RTLReceiveHeader{BYTE ReceiveStatus;BYTE NextPacketStartPage;BYTE PacketSizeLow;BYTE PacketSizeHigh;}Head; Head 须为全局变量.BYTE xdata Head[4];/* 上一次传输起始页*/BYTE LastSendStartPage;sbit RTLResetPin = RTL_RESET_PIN;/* 读rtl8019 寄存器端口*/BYTE ReadReg(WORD port){BYTE xdata * p;p = (BYTE xdata *)port;return *p;}/* 写寄存器*/void WriteReg(WORD port,BYTE value){BYTE xdata * p;p = (BYTE xdata *)port;*p = value;}/* 选择寄存器页使用*/void RTLPage(BYTE Index){/* 设置CR, CR_TXP 7-6位为0(为1 ,包重传) */BYTE temp;temp = ReadReg(CR);temp = temp & 0x3B; /*set 7-6 and 3 bit to 0*/Index = Index<<6;temp = temp | Index;WriteReg(CR,temp);}/* PRA 为物理地址*/void RTLInitial(){BYTE temp;int i;/* 硬件重启*/RTLResetPin = 1;for(i = 0;i<255;i++);RTLResetPin = 0;/* 如果硬件重启时延很大,rtl自我初始化*/for(i=0;i<DELAY_AFTER_HARDW ARE_RESET;i++);/* 写重启口*/temp = ReadReg(RESET_PORT);WriteReg(RESET_PORT,temp);/* 初始化RTL 寄存器*/WriteReg(CR,(CR_PAGE0 | CR_ABORT_COMPLETE_DMA | CR_STOP_COMMAND)); /* 设置page0, stop command */WriteReg(PSTART_WPAGE0, RECEIVE_START_PAGE); /* Pstart */WriteReg(PSTOP_WPAGE0, RECEIVE_STOP_PAGE); /* Pstop */WriteReg(BNRY_WPAGE0, RECEIVE_START_PAGE); /* BNRY */WriteReg(TPSR_WPAGE0, SEND_START_PAGE0); /* TPSR */WriteReg(RCR_WPAGE0, 0xCE); /*RCR: 在Rtl8019as.h定义*/WriteReg(TCR_WPAGE0, 0xE0); /* TCR: 在Rtl8019as.h定义*/WriteReg(DCR_WPAGE0, 0xC8); /* DCR: 在Rtl8019as.h定义*/WriteReg(IMR_WPAGE0,0); /* RTL 接收中断使能*/WriteReg(ISR_WPAGE0, 0xFF); /* 写FF 清除所有中断标志*/RTLPage(1);WriteReg(CURR_WPAGE1,RECEIVE_START_PAGE + 1);/* MAR0 */WriteReg(0x08,0x00);WriteReg(0x09,0x41);WriteReg(0x0a,0x00);WriteReg(0x0b,0x80);WriteReg(0x0c,0x00);WriteReg(0x0d,0x00);WriteReg(0x0e,0x00);WriteReg(0x0f,0x00)/* 设置物理地址*/WriteReg(PRA0_WPAGE1,LocalMACAddr[0]);WriteReg(PRA1_WPAGE1,LocalMACAddr[1]);WriteReg(PRA2_WPAGE1,LocalMACAddr[2]);WriteReg(PRA3_WPAGE1,LocalMACAddr[3]);WriteReg(PRA4_WPAGE1,LocalMACAddr[4]);WriteReg(PRA5_WPAGE1,LocalMACAddr[5]);/* 传输起始页*/LastSendStartPage = SEND_START_PAGE0;StartPageOfPacket = RECEIVE_START_PAGE + 1;/* 初始化结束*/WriteReg(CR,(CR_PAGE0 | CR_ABORT_COMPLETE_DMA | CR_STOP_COMMAND)); }/* 写buffer 到rlt ram */void RTLWriteRam(WORD address, WORD size, BYTE xdata * buff){WORD i;BYTE PrePage; /* store page */PrePage = ReadReg(CR);RTLPage(0);WriteReg(RSARH_WPAGE0,(BYTE)((address>>8)&0x00ff));WriteReg(RSARL_WPAGE0,(BYTE)address);WriteReg(RBCRH_WPAGE0,(BYTE)((size>>8)&0x00ff));WriteReg(RBCRL_WPAGE0,(BYTE)size);WriteReg(CR,(0x00 | CR_REMOTE_WRITE | CR_START_COMMAND));for(i=0;i<size;i++){WriteReg(REMOTE_DMA_PORT,buff[i]);}/* 完成dma */WriteReg(RBCRH_WPAGE0,0);WriteReg(RBCRL_WPAGE0,0);WriteReg(CR,((PrePage&0xC0) | CR_ABORT_COMPLETE_DMA |CR_START_COMMAND));}/* 读rlt ram 数据到buffer */void RTLReadRam(WORD address,WORD size,BYTE xdata * buff){WORD i;BYTE PrePage; /* 存储页*/PrePage = ReadReg(CR);RTLPage(0);WriteReg(RSARH_WPAGE0,(BYTE)((address>>8)&0x00ff));WriteReg(RSARL_WPAGE0,(BYTE)address);WriteReg(RBCRH_WPAGE0,(BYTE)((size>>8)&0x00ff));WriteReg(RBCRL_WPAGE0,(BYTE)size);WriteReg(CR,(0x00 | CR_REMOTE_READ | CR_START_COMMAND));for(i=0;i<size;i++){buff[i] = ReadReg(REMOTE_DMA_PORT);}/* 完成dma */ WriteReg(RBCRH_WPAGE0,0);WriteReg(RBCRL_WPAGE0,0);WriteReg(CR,((PrePage&0xC0) | CR_ABORT_COMPLETE_DMA |CR_START_COMMAND));}BYTE RTLSendPacket(BYTE xdata * buffer,WORD size){BYTE StartPage;/* 存储页*/BYTE PrePage;PrePage = ReadReg(CR);/* 检查包大小*/if(size < MIN_PACKET_SIZE || size > MAX_PACKET_SIZE)return FALSE;/* 写包到ram */if(LastSendStartPage == SEND_START_PAGE0){StartPage = SEND_START_PAGE1;LastSendStartPage = SEND_START_PAGE1;}else{StartPage = SEND_START_PAGE0;LastSendStartPage = SEND_START_PAGE0;}RTLWriteRam(((WORD)StartPage)<<8,size,buffer);/* 等待上一次传输结束*/while((ReadReg(CR) & CR_TXP) == CR_TXP);/* 写传输起始页和大小*/RTLPage(0);WriteReg(TPSR_WPAGE0,StartPage); /* TPSR */WriteReg(TBCRL_WPAGE0,(BYTE)size); /*low */WriteReg(TBCRH_WPAGE0,(BYTE)((size>>8)&0x00ff)); /*high*/WriteReg(CR,((PrePage&0xC0) | CR_ABORT_COMPLETE_DMA | CR_TXP | CR_START_COMMAND));return TRUE;}void RTLReceivePacket(){BYTE curr,bnry;WORD address;WORD PacketSize;BYTE MemPage;struct MemHeader xdata *pMemHead;RTLPage(1);curr = ReadReg(CURR_RPAGE1);RTLPage(0);/*在接收缓存中读所有包*/while(TRUE){/* 检验起始页是否未知错误*/if(StartPageOfPacket >= RECEIVE_STOP_PAGE || StartPageOfPacket < RECEIVE_START_PAGE){/* 用curr作为StartPageOfPacket */StartPageOfPacket = curr;break;}/*检查是否有包读到*/if(StartPageOfPacket == curr)break;/*读一个包*//* 读包头信息*/address = ((WORD)StartPageOfPacket)<<8;RTLReadRam(address,4,Head);/* 校验rsr */if(Head[0] & RSR_RECEIVE_NO_ERROR){/*好包*//* 得到MAC校验和*/PacketSize = ((WORD)Head[3])*256 + Head[2] - 4;/* 分配buffer ,读包到buffer */MemPage = MemAllocation(PacketSize);if(MemPage != PAGE_NOT_FOUND){pMemHead = (struct MemHeader xdata *)MemPageToPoint(MemPage);pMemHead->StartPos = (BYTE xdata *)pMemHead + sizeof(struct MemHeader);/* pos起始有效地址*/pMemHead->StopPos = pMemHead->StopPos + PacketSize;/* 停止pos */address += 4;if(StartPageOfPacket > Head[1] && Head[1] != RECEIVE_START_PAGE){RTLReadRam(address,(((WORD)RECEIVE_STOP_PAGE)<<8) - address,pMemHead->StartPos); /* 读rtl */RTLReadRam(((WORD)RECEIVE_START_PAGE)<<8,PacketSize - ((((WORD)RECEIVE_STOP_PAGE)<<8) - address),pMemHead->StartPos + ((((WORD)RECEIVE_STOP_PAGE)<<8) -address)); /* 读rtl */}else{RTLReadRam(address,PacketSize,pMemHead->StartPos);/ * 读rtl */}if(WriteQueue(MemPage,&QueueNetPacketIn) == PAGE_NOT_FOUND) /* 写到对列*/{/* 对列满*/#ifdef DEBUGprintf("\n-------queue full-------");#endifFreePage(MemPage);break;}}else{/* 结束*/#ifdef DEBUGprintf("\n-------mem over-------");#endifbreak;}}/* 得到下一包的起始页*/StartPageOfPacket = Head[1];}/* 重置bnry */bnry = StartPageOfPacket - 1;if(bnry < RECEIVE_START_PAGE)bnry = RECEIVE_STOP_PAGE - 1;WriteReg(BNRY_WPAGE0,bnry);}系统调试代码://main.cvoid main(void){BYTE temp;WORD port = 1001;LocalMACAddr[0]=0x52;LocalMACAddr[1]=0x54;LocalMACAddr[2]=0x4c;LocalMACAddr[3]=0x30;LocalMACAddr[4]=0x2e;LocalMACAddr[5]=0x2f;LocalIPAddress = 0xc0a8020d; /* 本地地址192.168.2.14*/ ServerIPAddress = 0xc0a8020e; /* 目的地址192.168.2.13*/ /*初始化*/SerialInitial();MemInitial();NetInInitial();RTLInitial();Start8019();InterruptInitial();// 建立一个ARP包p[0] =0xff;p[1] =0xff;p[2] =0xff;p[3] = 0xff;p[4] = 0xff;p[5] = 0xff;p[6] = 0x52;p[7] =0x54;p[8] =0x4c;p[9] =0x30;p[10] =0x2e;p[11] =0x2f;p[12] = 0x08;p[13] = 0x06;p[14] = 0x00;p[15] = 0x01;p[16] = 0x08;p[17] = 0x00;p[18] = 0x06;p[19] = 0x04;p[20] = 0x00;p[21] = 0x01;// 发送ARP包RTLSendPacket(p,60);while(1);#ifdef DEBUGprintf("\n-------bigine-------");#endif/* 处理*/TCPBind(port);if(TCPConnect(ServerIPAddress,1001) == TRUE) {while(UserFunc());}/* 延时*/for(temp;temp<255;temp++);#ifdef DEBUGprintf("\n run over!");#endif/* 存储*/Stop8019();while(1);}。
TCPIP_UDP参数配置和网络连接
![TCPIP_UDP参数配置和网络连接](https://img.taocdn.com/s3/m/c659a786680203d8ce2f24c8.png)
参数配置和网络连接卓岚联网产品遵守的是标准的TCP/IP协议,所以任何遵守该协议的网络终端都可以和联网产品通信,卓岚科技提供了网络调试工具(SocketDlgTest程序,用户可以在开始菜单/程序/ZLVircom/调试工具,找到该软件)来模拟网络终端来和联网产品通信。
要想两个网络终端(这里是网络调试工具和联网产品)能够通信,其参数配置必须需要配对。
在UDP模式下,参数配置如图1所示,左边为vircom中联网产品的配置,右边为网络调试工具SocketDlgTest的设置。
首先必须两者都是UDP工作模式。
另外用红色箭头表示的,网络工具的目的IP和目的端口必须指向联网产品的本地IP和本地端口。
用蓝色箭头表示的,联网产品的目的IP必须是网络工具所在计算机的IP地址,而联网产品的目的端口必须是网络调试工具的本地端口。
这些网络参数配置好后才能保证双向的UDP数据通信。
图 1 UDP模式参数配置在TCP模式下工作模式有两种TCP服务端和TCP客户端,不论采用哪一种模式,必须一方是服务端,另一方是客户端,之后客户端才能访问服务端,都为客户端或者服务端则无法实现通信。
当联网产品作为客户端时,必须有3个对应关系,如图2所示。
联网产品的工作模式为客户端对应网络工具的服务器模式,联网产品的目的IP必须是网络工具所在计算机的IP地址,联网产品的目的端口必须是网络工具的本地端口。
这样设置后联网产品即可自动连接网络工具,连接建立后即可收发数据。
图 2 联网产品作为客户端当联网产品作为服务端时,也有3个对应关系,如图3所示,这里不一一解说。
这样设置后点击网络工具的打开按钮即可和联网产品建立TCP连接,连接建立后即可收发数据。
图 3 联网产品作为服务端注意:这种模块对连方式,如果是直接用一根网线连接两个模块的网口(不是通过交换机的方式),那么该网线最好采用交叉网线。
51单片机RTL8019AS网卡驱动程序(重要有程序)
![51单片机RTL8019AS网卡驱动程序(重要有程序)](https://img.taocdn.com/s3/m/aabd293da8114431b90dd8dc.png)
51单片机RTL8019AS网卡驱动程序时间:2006-09-05 来源: 作者: 点击:3863 字体大小:【大中小】我的SNMP网管板使用了RTL8019AS 10M ISA网卡芯片接入以太网。
选它的好处是:NE2000兼容,软件移植性好;接口简单不用转换芯片如PCI-ISA 桥;价格便宜2.1$/片(我的购入价为22元RMB/片);带宽充裕(针对51);较长一段时间内不会停产。
8019有3种配置模式:跳线方式、即插即用P&P方式、串行Flash配置方式。
为了节省成本,我去掉了9346而使用X5045作为闪盘存储MAC地址和其他可配置信息。
P&P模式用在PC机中,这里用不上。
只剩下跳线配置模式可用,它的电路设计参考REALTEK提供的DEMO板图纸。
一天时间就可以完成,相对来说硬件设计比较简单。
与这部分硬件相对应的软件是网卡驱动。
所谓驱动程序是指一组子程序,它们屏蔽了底层硬件处理细节,同时向上层软件提供硬件无关接口。
驱动程序可以写成子程序嵌入到应用程序里(如DOS下的I/O端口操作和ISR),也可以放在动态链接库里,用到的时候再动态调入以便节省内存。
在WIN98中,为了使V86、WIN16、WIN32三种模式的应用程序共存,提出了虚拟机的概念,在CPU的配合下,系统工作在保护模式,OS接管了I/O、中断、内存访问,应用程序不能直接访问硬件。
这样提高了系统可靠性和兼容性,也带来了软件编程复杂的问题。
任何网卡驱动都要按VXD或WDM模式编写,对于硬件一侧要处理虚拟机操作、总线协议(如ISA、PCI)、即插即用、电源管理;上层软件一侧要实现NDIS规范。
因此在WIN98下实现网卡驱动是一件相当复杂的事情。
我这里说的驱动程序特指实模式下的一组硬件芯片驱动子程序。
从程序员的角度看,8019工作流程非常简单,驱动程序将要发送的数据包按指定格式写入芯片并启动发送命令,8019会自动把数据包转换成物理帧格式在物理信道上传输。
基于RTL8019AS的单片机网络通信接口设计
![基于RTL8019AS的单片机网络通信接口设计](https://img.taocdn.com/s3/m/0d8adcdd6529647d272852dd.png)
基于RTL8019AS的单片机网络通信接口设计作者:吴全玉陈杰来源:《现代电子技术》2008年第22期摘要:网络数据传输技术具有传输速率高、传送距离远、通讯协议完善、信息共享程度高等优点,为嵌入式设备增加网络功能有着深远的意义。
介绍以太网的帧协议和以太网控制芯片RTL8019AS的结构特性以及工作原理,设计STC89C54RD+单片机控制RTL8019AS实现以太网通讯的硬件设计方案和软件流程图;采用标准C语言实现ARP协议,所有程序在Keilc51环境下编译连接。
最后并进行系统的调试与验证,取得了满意的效果。
关键词:以太网;RTL8019AS;网络数据传输技术;TCP/IP协议中图分类号:TP393文献标识码:B文章编号:1004373X(2008)2204703Design of Single Chip Computer Network Communication Interface Based on RTL8019ASWU Quanyu,CHEN Jie(West Anhui University,Lu′an,237012,China)Abstract:The data transmission of net has many virtues,such as high transmission speed and perfect communication protocol.It is important that the embedded devices have communicated with Ethernet.The frame of Ethernet protocol and the Ethernet microcontroller TL8019AS characteristics are presented,the principle diagram of hardware system that STC89C54RD+ single chip computer controlling RTL8019AS is designed,and the diagram of software is given.ARP protocol based on the standard C language is realized in the paper,and it is succeeded to compile and link them in keil c51 environment.Finally,the system debugging and the experiment results are also given,the result is satisfied.Keywords:Ethernet;RTL8019AS;network data transmission technology;TCP/IP protocol1 引言网络技术的飞速发展促使嵌入式设备的数据传输方式发生重大变化,如今嵌入式设备网络化已成为嵌入式技术发展的一个重要方向。
udp概念及工作原理
![udp概念及工作原理](https://img.taocdn.com/s3/m/5c9e54c18662caaedd3383c4bb4cf7ec4afeb60f.png)
udp概念及工作原理
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输
层协议,用于简单、快速地发送封装的数据报。
UDP的工作原理如下:
1. UDP在传输数据之前不需要建立连接,可以直接发送数据。
2. UDP发送数据时,将数据打包成数据报,并尽可能快地将其发送到网络上。
3. UDP在发送端将每个数据报放入队列中,然后应用程序每次从队列中读
取一个数据报进行处理。
4. UDP在接收端将每个数据报放入队列中,然后应用程序每次从队列中读
取一个数据报进行处理。
5. 由于UDP没有连接的概念,因此不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
6. UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息
包的额外开销很小。
7. UDP的吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
UDP具有简单、快速、非连接、无需维护连接状态等优点,因此在需要实时、可靠的数据传输时被广泛应用,例如在线视频游戏和VoIP(语音通话)等。
然而,UDP也存在着一些不足之处,例如不能保证数据包的到达顺序
和时间等。
51单片机网络通信及ARP协议实现
![51单片机网络通信及ARP协议实现](https://img.taocdn.com/s3/m/780ba41459eef8c75fbfb374.png)
机对该 R M空 间的读 写操作都是通过 芯片 内部 A 被称为“ 远程 D A 的数据链路完成的。 M ”
在 R L09 S收 发 中 , R M 从 逻辑 上被 划 T 8 1A 该 A 分为 发送 和接 收两 个 区域 。其 中发送 缓 冲 区的 首
页地 址 由位 于 P g0中 T S ae P R寄存 器 配 置 , 收 缓 接
的。当 5 单片机通过远程 D A读 出并正常处理 1 M R L 09 S内部有 一块 长 度 为 1 K字节 的 T 8 1A 6
一
页 数 据 后 , 将 B R 加 1 若 B R 到 达 应 NY , NY
收 稿 日期 : 0 1一 8— 0 2 1 O 2
作 者简介 : 于 磊 (9 ห้องสมุดไป่ตู้一 , , 17 ) 男 陕西西安人 , 硕士 , 副教授 , 从事计算机科学技术相关专业教 学及科研工作 , m i ce1 @g .d .n E a :c. u z e u c l y u
RTL 01 8 9AS.
冲区的首 页地址 由位于该页 中的寄存器 P T R SA T
配 置 , 收缓 冲 区的最 末 页地址 由位 于该 页 中的寄 接 存器 P T P配 置 。 SO 5 1单 片机 与 R L0 9 S的连 接 使 用 通 常是 T 8 1A
51RTL8019网络传输整个系统详解ARPUDPTCPIP数据传
![51RTL8019网络传输整个系统详解ARPUDPTCPIP数据传](https://img.taocdn.com/s3/m/ac66dd9fe518964bce847c52.png)
TCP/IP协议栈与数据包封装TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。
如下图所示(该图出自)。
图36.1. TCP/IP协议栈两台计算机通过TCP/IP协议通讯的过程如下所示(该图出自)。
图36.2. TCP/IP通讯过程传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用socket API编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示(该图出自)。
图36.3. TCP/IP数据包的封装不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。
上图对应两台计算机在同一网段中的情况,如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器,如下图所示(该图出自)。
图36.4. 跨路由器通讯过程其实在链路层之下还有物理层,指的是电信号的传递方式,比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤等都属于物理层的概念。
物理层的能力决定了最大传输速率、传输距离、抗干扰性等。
集线器(Hub)是工作在物理层的网络设备,用于双绞线的连接和信号中继(将已衰减的信号再次放大使之传得更远)。
链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。
试论51单片机网络通信及ARP协议实现
![试论51单片机网络通信及ARP协议实现](https://img.taocdn.com/s3/m/bf17afc229ea81c758f5f61fb7360b4c2e3f2afb.png)
试论51单片机网络通信及ARP协议实现宋泽【摘要】网络通信的快速发展对单片机的使用提出更高的要求,以51单片机为典型代表,其以自身运行稳定且价格低廉等优势得到广泛认可.本文主要结合现代网络控制芯片,对该系列单片机的应用进行分析,并在此基础上研究基于该系列单片机的ARP协议,对网络通信目标的实现具有极其重要的作用.【期刊名称】《数字技术与应用》【年(卷),期】2015(000)011【总页数】1页(P10)【关键词】51单片机;网络控制芯片;ARP协议【作者】宋泽【作者单位】湖北工程学院新技术学院湖北孝感432000【正文语种】中文【中图分类】TN915.03在信息高速发展时代下,网络通信中开始引入如智能仪表以及信息化设备等,该类设备在控制过程中多以八位微控制器为主。
然而在控制器选择过程中可发现51系列单片机在占据极大的优势,无论从其扩展性或整体结构上都可满足现代网络通信协议要求。
因此,在网络接入选择中以该系列单片机作为主要平台成为现行网络通信协议实现研究的重要内容。
选择网络控制器过程中,现行常见的控制器主要以RTL8019AS为主,将其与单片机连接可取得良好的效果。
而连接过程中需注意做好与单片机硬件连接控制工作、控制器缓冲区的使用、控制器的初始设置及其端口读写等工作。
其中在连接单片机硬件方面,一般以八位跳线模式为主,要求正确选择控制器中数据线、地址线与单片机进行连接,而其他数据线或接地线则要求采取悬空或置高电平等措施。
需注意通常为保证控制器在工作模式上以八位为主,还应对IOCS16B进行低电平控制。
而在缓冲区使用方面,控制器内设的RAM可针对发送或接收的数据帧进行缓存,其主要以按页缓存形式为主,这样单片与其连接过程中能够完成相应的读写操作。
通常单片机在连接控制器中多利用短数据包,接收数据帧时完全可采取的两个寄存器配合应用的方式,这样缓存区的数据帧便可被接收。
以其中边界寄存器为例,其可根据单片机的控制要求进行寄存器值的适时调整。
51单片机网络通信及ARP协议实现
![51单片机网络通信及ARP协议实现](https://img.taocdn.com/s3/m/3d87e5870129bd64783e0912a216147917117e2b.png)
51单片机网络通信及ARP协议实现于磊【期刊名称】《贵州大学学报(自然科学版)》【年(卷),期】2011(028)005【摘要】In 8-bit single-chip control system development, 51 Series MCU for its low price, reliable operation, technology maturation characteristics still has broad application prospects. The 51 single-chip microcomputer and RTL8019AS network control chips were combined to explore the control method for network control chip, and the 51 single chip microcomputer using ARP protocol methodology for study, which has practical application value.%在基于8位的单片机控制系统开发中,51系列单片机以其低价、运行可靠、技术成熟的特性仍然具有广泛的应用前景.将51单片机与RTL8019 AS网络控制芯片结合起来,对网络控制芯片的控制实现方法进行探讨,并对51单片机下ARP协议的实现进行研究,具有实际应用价值.【总页数】5页(P99-103)【作者】于磊【作者单位】贵州大学继续教育学院,贵州贵阳550001【正文语种】中文【中图分类】TP368.2【相关文献】1.试论51单片机网络通信及ARP协议实现 [J], 宋泽2.基于51单片机的网络通信接口设计 [J], 冯杰;李述良3.51单片机网络通信及ARP协议实现 [J], 李鹏4.51单片机网络通信及ICMP回显应答实现 [J], 于磊5.试论51单片机网络通信及ARP协议实现 [J], 宋泽因版权原因,仅展示原文概要,查看原文内容请购买。
udp传输原理
![udp传输原理](https://img.taocdn.com/s3/m/c94fbb5b26d3240c844769eae009581b6bd9bd28.png)
udp传输原理UDP(User Datagram Protocol)是一种面向无连接的传输层协议,它与TCP(Transmission Control Protocol)一样,都是用于互联网中的数据传输。
UDP传输原理主要包括数据报文、数据报文的封装和解封装、错误检测、传输可靠性等方面。
UDP传输的基本单位是数据报文(Datagram),它是一段被分割成固定大小的数据。
与TCP不同,UDP在传输数据时不需要建立连接,而是直接发送数据报文。
这使得UDP具有传输速度快的特点,适合用于对实时性要求较高、对传输可靠性要求相对较低的应用场景,如音频和视频传输。
UDP在发送数据时会将数据报文封装成UDP数据包。
UDP数据包由源端口号、目的端口号、长度和检验和等字段组成。
源端口号和目的端口号用于标识发送方和接收方的应用程序,长度字段用于记录整个UDP数据包的长度,检验和字段用于检测数据在传输过程中是否出错。
UDP的封装过程相对简单,不需要建立连接、维护状态等操作,因此可以减少传输延迟和系统开销。
在UDP传输的过程中,由于UDP是一种无连接的协议,因此无法保证数据的可靠传输。
为了实现传输的可靠性,UDP引入了一种简单的错误检测机制,即校验和。
发送方在发送数据时会计算数据的校验和,并将其放置在UDP数据包的检验和字段中。
接收方在接收数据时会重新计算校验和,并与UDP数据包中的校验和进行比较,从而判断数据是否在传输过程中出现错误。
如果校验和不匹配,则认为数据包出现错误,接收方可以选择丢弃该数据包或请求重新发送。
UDP还具有数据包独立性的特点。
即每个UDP数据包是相互独立的,每个数据包的传输都是独立的,不会受到其他数据包的影响。
这使得UDP可以实现并行传输,提高传输效率。
总结起来,UDP传输原理包括数据报文、数据报文的封装和解封装、错误检测和传输可靠性等方面。
UDP通过将数据封装成数据报文,使用源端口号和目的端口号标识发送方和接收方的应用程序,通过校验和检测数据在传输过程中的错误,实现了一种快速传输、无连接和简单可靠性的传输方式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TCP/IP协议栈与数据包封装TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。
如下图所示(该图出自)。
图36.1. TCP/IP协议栈两台计算机通过TCP/IP协议通讯的过程如下所示(该图出自)。
图36.2. TCP/IP通讯过程传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用socket API编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示(该图出自)。
图36.3. TCP/IP数据包的封装不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。
上图对应两台计算机在同一网段中的情况,如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器,如下图所示(该图出自)。
图36.4. 跨路由器通讯过程其实在链路层之下还有物理层,指的是电信号的传递方式,比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤等都属于物理层的概念。
物理层的能力决定了最大传输速率、传输距离、抗干扰性等。
集线器(Hub)是工作在物理层的网络设备,用于双绞线的连接和信号中继(将已衰减的信号再次放大使之传得更远)。
链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。
交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧(比如十兆以太网和百兆以太网之间、以太网和令牌环网之间),由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层首部重新封装之后再转发。
网络层的IP协议是构成Internet的基础。
Internet上的主机通过IP地址来标识,Internet 上有大量路由器负责根据IP地址选择合适的路径转发数据包,数据包从Internet上的源主机到目的主机往往要经过十多个路由器。
路由器是工作在第三层的网络设备,同时兼有交换机的功能,可以在不同的链路层接口之间转发数据包,因此路由器需要将进来的数据包拆掉网络层和链路层两层首部并重新封装。
IP协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应用程序中提供支持。
网络层负责点到点(point-to-point)的传输(这里的“点”指主机或路由器),而传输层负责端到端(end-to-end)的传输(这里的“端”指源主机和目的主机)。
传输层可选择TCP或UDP协议。
TCP是一种面向连接的、可靠的协议,有点像打电话,双方拿起电话互通身份之后就建立了连接,然后说话就行了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接。
也就是说TCP传输的双方需要首先建立连接,之后由TCP协议保证数据收发的可靠性,丢失的数据包自动重发,上层应用程序收到的总是可靠的数据流,通讯之后关闭连接。
UDP协议不面向连接,也不保证可靠性,有点像寄信,写好信放到邮筒里,既不能保证信件在邮递过程中不会丢失,也不能保证信件是按顺序寄到目的地的。
使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作。
目的主机收到数据包后,如何经过各层协议栈最后到达应用程序呢?整个过程如下图所示(该图出自)。
图36.5. Multiplexing过程以太网驱动程序首先根据以太网首部中的“上层协议”字段确定该数据帧的有效载荷(payload,指除去协议首部之外实际传输的数据)是IP、ARP还是RARP协议的数据报,然后交给相应的协议处理。
假如是IP数据报,IP协议再根据IP首部中的“上层协议”字段确定该数据报的有效载荷是TCP、UDP、ICMP还是IGMP,然后交给相应的协议处理。
假如是TCP段或UDP段,TCP或UDP协议再根据TCP首部或UDP首部的“端口号”字段确定应该将应用层数据交给哪个用户进程。
IP地址是标识网络中不同主机的地址,而端口号就是同一台主机上标识不同进程的地址,IP地址和端口号合起来标识网络中唯一的进程。
注意,虽然IP、ARP和RARP数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于网络层。
虽然ICMP、IGMP、TCP、UDP的数据都需要IP协议来封装成数据报,但是从功能上划分,ICMP、IGMP与IP同属于网络层,TCP和UDP属于传输层。
本文对RARP、ICMP、IGMP协议不做进一步介绍,有兴趣的读者可以看参考资料。
2. 以太网(RFC 894)帧格式以太网的帧格式如下所示(该图出自):图36.6. 以太网帧格式其中的源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。
用ifconfig命令看一下,“HWaddr 00:15:F2:14:9E:3F”部分就是硬件地址。
协议字段有三种值,分别对应IP、ARP、RARP。
帧末尾是CRC校验码。
以太网帧中的数据长度规定最小46字节,最大1500字节,ARP和RARP数据包的长度不够46字节,要在后面补填充位。
最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)。
ifconfig命令的输出中也有“MTU:1500”。
注意,MTU这个概念指数据帧中有效载荷的最大长度,不包括帧首部的长度。
3. ARP数据报格式在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。
因此在通讯前必须获得目的主机的硬件地址。
ARP协议就起到这个作用。
源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP 应答数据包给源主机,将自己的硬件地址填写在应答包中。
每台主机都维护一个ARP缓存表,可以用arp -a命令查看。
缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。
想一想,为什么表项要有过期时间而不是一直有效?ARP数据报的格式如下所示(该图出自):图36.7. ARP数据报格式注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
硬件类型指链路层网络类型,1为以太网,协议类型指要转换的地址类型,0x0800为IP地址,后面两个地址长度对于以太网地址和IP地址分别为6和4(字节),op字段为1表示ARP请求,op 字段为2表示ARP应答。
下面举一个具体的例子。
请求帧如下(为了清晰在每行的前面加了字节计数,每行16个字节):以太网首部(14字节)0000: ff ff ff ff ff ff 00 05 5d 61 58 a8 08 06ARP帧(28字节)0000: 00 010010: 08 00 06 04 00 01 00 05 5d 61 58 a8 c0 a8 00 370020: 00 00 00 00 00 00 c0 a8 00 02填充位(18字节)0020: 00 77 31 d2 50 100030: fd 78 41 d3 00 00 00 00 00 00 00 00以太网首部:目的主机采用广播地址,源主机的MAC地址是00:05:5d:61:58:a8,上层协议类型0x0806表示ARP。
ARP帧:硬件类型0x0001表示以太网,协议类型0x0800表示IP协议,硬件地址(MAC地址)长度为6,协议地址(IP地址)长度为4,op为0x0001表示请求目的主机的MAC地址,源主机MAC地址为00:05:5d:61:58:a8,源主机IP地址为c0 a8 00 37(192.168.0.55),目的主机MAC地址全0待填写,目的主机IP地址为c0 a8 00 02(192.168.0.2)。
由于以太网规定最小数据长度为46字节,ARP帧长度只有28字节,因此有18字节填充位,填充位的内容没有定义,与具体实现相关。
应答帧如下:以太网首部0000: 00 05 5d 61 58 a8 00 05 5d a1 b8 40 08 06ARP帧0000: 00 010010: 08 00 06 04 00 02 00 05 5d a1 b8 40 c0 a8 00 020020: 00 05 5d 61 58 a8 c0 a8 00 37填充位0020: 00 77 31 d2 50 100030: fd 78 41 d3 00 00 00 00 00 00 00 00以太网首部:目的主机的MAC地址是00:05:5d:61:58:a8,源主机的MAC地址是00:05:5d:a1:b8:40,上层协议类型0x0806表示ARP。
ARP帧:硬件类型0x0001表示以太网,协议类型0x0800表示IP协议,硬件地址(MAC地址)长度为6,协议地址(IP地址)长度为4,op为0x0002表示应答,源主机MAC地址为00:05:5d:a1:b8:40,源主机IP地址为c0 a8 00 02(192.168.0.2),目的主机MAC地址为00:05:5d:61:58:a8,目的主机IP地址为c0 a8 00 37(192.168.0.55)。
思考题:如果源主机和目的主机不在同一网段,ARP请求的广播帧无法穿过路由器,源主机如何与目的主机通信?4. IP数据报格式IP数据报的格式如下(这里只讨论IPv4)(该图出自):图36.8. IP数据报格式IP数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍。
对于IPv4,4位版本字段是4。