板子处于复位状态时,先做好一系列的准备工作。
1、从EEROM中读取板子的MAC 地址(事先已经写在地址0xFA to 0xFF 中了)。
2、配置PHY 寄存器,并读取该寄存器的值,检查一下,此时的寄存器配置时候是合理的(全双工,自协商等)。
3、等待片刻,使以太网稳定。随后,启动DHCP 协议,获取该电路板的IP地址。其中,PC 机是服务机,板子是客户机。
4、获得板子的IP地址之后,就可以正常通信了。在发送数据之前,首先确认是否ARP(IP地址和MAC地址绑定)和ping(ICMP协议,确定网络是否链接成功)是否请求成功。如果成功,就可以传输我们真正关心的数据了。
以太网协议 MAC 层
前导帧 : 55
帧开始: 5D
长度或类型:0x0800 表示以IP帧 ; 0x0806 表示以ARP帧 ;
以太网IP协议
版本:4 ; 头部长:5;服务类型:00;总长: UDP data + 8 UDP header + 20 IP header; time to live :80; 协议:11--UDP/IP,10--ICMP/PINGN ;
以太网校验和:在运算的时候,先设置该处的值为0,等运算结果出来之后,再把结果添加进去。
以太网UDP格式
UDP端口有几个特殊的:68 --BOOT客户端,同时用于DHCP ,67--BOOT 服务,同时用于DHCP; 校验和:UDP 的校验和可以设置为0,如果要计算的话,比较麻烦。
动态主机设置协议 DHCP
http://zh.wikipedia.org/wiki/%E5%8A%A8%E6%80%81%E4%B8%BB%E6%9C%BA%E8%AE%BE%E7%BD%AE%E5%8D%8F%E8%AE%AE
我们来介绍一下DHCP的报文格式,如图1,
OP(1) |
Htype(1) |
Hlen(1) |
Hops(1) |
Transaction ID(4) |
|||
Seconds(2) |
Flags(2) |
||
Ciaddr(4) |
|||
Yiaddr(4) |
|||
Siaddr(4) |
|||
Giaddr(4) |
|||
Chaddr(16) |
|||
Sname(64) |
|||
File(128) |
|||
Options(variable) |
(图1 DHCP的 报文格式)
l OP:若是client送给server的封包,设为1,反向为2;
l Htype:硬件类别,ethernet为1;
l Hlen:硬件长度,ethernet为6;
l Hops:若数据包需经过router传送,每站加1,若在同一网内,为0;
l Transaction ID:事务ID,是个随机数,用于客户和服务器之间匹配请求和相应消息;
l Seconds:由用户指定的时间,指开始地址获取和更新进行后的时间;
l Flags:从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用;
l Ciaddr:用户IP地址;
l Yiaddr:客户IP地址;
l Siaddr:用于bootstrap过程中的IP地址;
l Giaddr:转发代理(网关)IP地址;
l Chaddr:client的硬件地址;
l Sname:可选server的名称,以0x00结尾;
l File:启动文件名;
l Options:,厂商标识,可选的参数字段
动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:
· 给内部网络或网络服务供应商自动分配IP地址给用户
· 给内部网络管理员作为对所有计算机作中央管理的手段
DHCP运行分为四个基本过程,分别为请求IP租约、提供IP租约、选择IP租约和确认IP租约。
DHCP 发现 (DISCOVER)[编辑] 客户在物理子网上发送广播来寻找可用的服务器。网络管理员可以配置一个本地路由来转发DHCP包给另一个子网上的DHCP服务器。该客户实现生成一个目的地址为255.255.255.255或者一个子网广播地址的UDP包。 客户也可以申请它使用的最后一个IP地址(在下面的例子里为192.168.1.100)。如果该客户所在的网络中此IP仍然可用,服务器就可以准许该申请。否则,就要看该服务器是授权的还是非授权的。 授权服务器会拒绝请求,使得客户立刻申请一个新的IP。非授权服务器仅仅忽略掉请求,导致一个客户端请求的超时,于是客户端就会放弃此请求而去申请一个新的IP地址。 |
DHCP提供 (OFFER)[编辑] 当DHCP服务器收到一个来自客户的IP租约请求时,它会提供一个IP租约。DHCP为客户保留一个IP地址,然后通过网络广播一个DHCPOFFER消息给客户。该消息包含客户的MAC地址、服务器提供的IP地址、子网掩码、租期以及提供IP的DHCP服务器的IP。 服务器基于在CHADDR字段指定的客户硬件地址来检查配置。这里的服务器,192.168.1.1,将IP地址指定于YIADDR字段。 |
DHCP请求 (REQUEST)[编辑] 当客户PC收到一个IP租约提供时,它必须告诉所有其他的DHCP服务器它已经接受了一个租约提供。因此,该客户会发送一个DHCPREQUEST消息,其中包含提供租约的服务器的IP。当其他DHCP服务器收到了该消息后,它们会收回所有可能已提供给客户的租约。然后它们把曾经给客户保留的那个地址重新放回到可用地址池中,这样,它们就可以为其他计算机分配这个地址。任意数量的DHCP服务器都可以响应同一个IP租约请求,但是每一个客户网卡只能接受一个租约提供。 |
DHCP确认 (Acknowledge,ACK)[编辑] 当DHCP服务器收到来自客户的REQUEST消息后,它就开始了配置过程的最后阶段。这个响应阶段包括发送一个DHCPACK包给客户。这个包包含租期和客户可能请求的其他所有配置信息。这时候,TCP/IP配置过程就完成了。 该服务器响应请求并发送响应给客户。整个系统期望客户来根据选项来配置其网卡。 |
ARP协议解码详解
ARP,全称Address Resolution Protocol,中文名为地址解析协议,它工作在数据链路层,在本层和硬件接口联系,同时对上层提供服务。
IP数据包常通过以太网发送,以太网设备并不识别32位IP地址,它们是以48位以太网地址传输以太网数据包。因此,必须把IP目的地址转换成以太网目的地址。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。ARP协议用于将网络中的IP地址解析为的硬件地址(MAC地址),以保证通信的顺利进行。
硬件类型 |
协议类型 |
|
硬件地址长度 |
协议长度 |
操作类型 |
发送方的硬件地址(0-3字节) |
||
源物理地址(4-5字节) |
源IP地址(0-1字节) |
|
源IP地址(2-3字节) |
目标硬件地址(0-1字节) |
|
目标硬件地址(2-5字节) |
||
目标IP地址(0-3字节) |
(图1 ARP/RARP报头结构)
l 硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1;
l 协议类型字段指明了发送方提供的高层协议类型,IP为0800(16进制);
l 硬件地址长度和协议长度指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;
l 操作字段用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;
l 发送方的硬件地址(0-3字节):源主机硬件地址的前3个字节;
l 发送方的硬件地址(4-5字节):源主机硬件地址的后3个字节;
l 发送方IP(0-1字节):源主机硬件地址的前2个字节;
l 发送方IP(2-3字节):源主机硬件地址的后2个字节;
l 目的硬件地址(0-1字节):目的主机硬件地址的前2个字节;
l 目的硬件地址(2-5字节):目的主机硬件地址的后4个字节;
l 目的IP(0-3字节):目的主机的IP地址。
ICMP (PING)协议
ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文(见图表,ICMP报文的结构和几种常见的ICMP报文格式),IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面。RFC定义了13种ICMP报文格式,具体如下:
0 响应应答(ECHO-REPLY)
8 响应请求(ECHO-REQUEST)