哈尔滨工业大学(威海)本科毕业设计(论文)
成。在本系统中,以太网帧的分用和帧的接收是在同一函数rec_data()中实现的,当一个数据帧接收完后,根据其协议选项的值做相应的处理。帧接收的具体步骤如下:
(1) 帧接收
RTL8019AS通过本地DMA自动将帧存入接收缓冲环,当条件:CURR-BNRY!=1成立时,表示接收缓冲区中有数据,则进行下一步。
(2) 帧读入
远程DMA在主控器的控制下将接收缓冲环中的帧读入系统数据存储器。
具体函数实现步骤如下:
1) 设置命令寄存器CR:CR=0x22,选择页0的寄存器。
2) 设置地址寄存器RSAR:RSAR0=0,读取数据块的缓存起始地址(低8位);RSAR1=BNRY,读取数据块的缓存起始地址(高8位)。
3) 设置远程字节计数寄存器RBCR:指定远程DMA操作时传输数据的字节数,RBCR1=0,要读取的字节数的计数(高8位);RBCR0=4,要读取的字节数的计数(低8位)共要读取4个字节。
4) 设置命令寄存器CR:CR=0x0a,远程读DMA。
5) 读数据端口,读出4个字节:第1个字节表示接收状态,第2个字节为下一包开始地址指针,第3~4个字节为本数据包的长度(高位字节在前)。
6) 根据接收状态,判断数据包是否接收正确。
7) 如果接收正确,启动远程DMA,收取该数据包并进行处理。
8) 协议字段为0x0800,为IP报文,进入函数ippro()对IP包进行处理;协议字段为0x0806,为ARP报文,进入函数arppro()对ARP包进行处理。
9) 结束远程DMA:CR=0x22。
10) 重新设置读指针BNRY,满足条件BNRY=CURR-1,为下一次帧接收作准备。
4.1.4 RTL8019AS的帧发送
帧的发送是指将待发送的数据以帧的形式发送到网络传输线上的过程,因此,帧的发送过程应包括以下步骤[13]:
- - - 17 -
哈尔滨工业大学(威海)本科毕业设计(论文)
(1) 装帧:数据包在发送前应该按规定的格式封装好。 (2) 将帧送入以太网控制器的发送缓冲区:
1) 设置地址寄存器RSAR:RSAR0=0,发送数据帧的缓存起始地址(低8位);RSAR1=40, 发送数据块的缓存起始地址(高8位)。
2) 设置远程字节计数寄存器RBCR:设置为发送数据帧的长度。 3) 设置命令寄存器CR:CR=12,远程DMA写。 4) 往数据端口写入发送数据。
(3) 初始化发送的字节数寄存器TBCR:设置为发送数据帧的长度。 (4) 初始化发送页面地址寄存器TPSR:TPSR=0x40。
(5) 启动以太网控制器将该帧发送到网络传输线上:CR=0x26,启动发送。在本系统中,帧的发送由函数send_package()来具体实现。
4.2 网络层的实现
4.2.1 地址解析协议ARP
系统中在数据链路层还实现了ARP协议。本质是完成网络地址到物理地址的映射。从概念上讲就是找到一个映射方法f,使得“物理地址=f(网络地址)”。物理地址有两种基本类型:以太网类型和proNET令牌环网类型,前者有大型的固定的物理地址,后者有小型的易于配置的物理地址,网络地址特指正地址。对映射方法的要求就是高效。以太网中的地址转换使用的是通过动态绑定进行转换的方法。为什么不直接使用同一种地址,而要这么麻烦呢?因为TCP/IP网络就是为将不同种类计算机互联而发明的,它的体系结构是分层的,层和层之间相互独立,改变物理层的实现不会影响到网络层。
ARP协议把32位IP地址映射到以太网48位物理地址,ARP报文结构如表4-2所示。
(l) 硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。
(2) 协议类型字段表示要映射的协议地址类型。它的值为0x0800即表示它的值与包含IP数据报的以太网数据帧中的类型字段的值相同。
(3) 硬件地址长度和协议长度字段分别指出硬件地址和协议地址的长度,IP地址以字节为单位。对于以太网上IP地址的ARP请求或应答来说,
- - - 18 -
哈尔滨工业大学(威海)本科毕业设计(论文)
它们的值分别为6和4。
(4) 操作字段指出四种操作类型,它们是ARP请求(值为l)、A即应答(值为2)、RARP请求(值为3)和RARP应答(值为4)。
(5) 接下来的四个字段是发送端的硬件地址(在本系统中是以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址。
表4-2 ARP报文结构
硬件类型(16比特) 协议类型(16比特) 硬件长度(8比协议长度(8比操作:请求1,应答2(16比特) 特) 特) 发送站硬件地址 发送站IP地址 目标硬件地址 目标IP地址
整个ARP处理过程,ARP包函数处理流程如图4-1:
开始开始N合法的合法的ARPARP报文段报文段YNARPARP请求请求YARPARP应答处理应答处理NARPARP应答应答Y更新更新ARPARP表表唤醒唤醒IPIP发送函数发送函数结束结束
图4-1 ARP包函数处理流程
4.2.2 网际协议IP
网际协议IP存在于TCP/IP参考模型的网络层中。IP可以被认为是将
- - - 19 -
哈尔滨工业大学(威海)本科毕业设计(论文)
数据包从一个主机移动到另一个主机的传递机制。因为它处理传递,它也提供寻址[14]。
本系统中,IP协议完成如下功能:
(1) 将上层传下来的TCP包加上IP包的包头,并封装成以太网帧。 (2) 对接收到的IP包进行处理。 1. IP报文格式
IP数据报的格式如表4-3所示。普通的IP首部长为20个字节,除非含有选项字段[15]。
表4-3 IP数据报的格式
版本(4比特) 首部长度服务类型(8比(4比总长度(16比特) 特) 特) 标识(16比特) 标志 片偏移量(13比特) 寿命(8比特) 协议(8比特) 首部校验和(16比特) 源IP地址(32比特) 目的IP地址(32比特) IP选项(若有) 填充 数据 ......
2. 发送IP数据包
对IP数据包进行发送时,首先填写IP报文的首部,然后将其封装成以太网数据帧,最后调用数据链路层的发送函数进行发送。函数流程图如图4-2所示。
其中填写以太网帧头与填写IP报文首部应包括: (1) 填写以太网帧头:
1) 填写以太网源地址为本机地址。
2) 以太网协议为0x0800(0800为IP报文,0806为ARP报文)。 (2) 填写IP报文首部: 1) 首部长度值为0x45。 2) 服务类型设置成0x00。
3) 总长度值为TCP包长度加IP包头度。 4) 设置IP标记为本机IP标记。 5) 分片偏移量设为0x0000。
6) 生存时间设为0x80(生存时间为128)。 7) 设置上层协议类型。
- - - 20 -
相关推荐: