1、需要实现的函数----发送ARP请求包
图一:ARP包格式
1.1根据ARP包的格式(即图1),构造ARP请求包
1.2填充ARP包的结构
-->ARP帧类型是0x0806
-->当未知MAC地址的时候,设置为全F
-->
硬件类型是指发送方想知道的硬件接口的类型,即以太网类型,编号为1
-->
协议类型是指发送方提供的高层协议的类型,在这里协议地址是IP地址,IP类型的编号是ox0800
-->
硬件地址长度即以太网地址长度,6个字节
-->
协议地址长度即Ip地址长度4个字节
-->
op为1表示请求,为0表示应答
-->
发送端以太网地址就是以太网源地址,事先制定的,6个字节
-->
发送端Ip地址是事先制定的,4个字节,注意:要和PC在同一网段
-->
目的以太网地址,
暂时不填
,要获取的就是该数据
-->
目的Ip地址就是PC的Ip实际地址。
之后还需调整网络字节序,,使发送的数据为大端模式,不需调整地址的存储模式。见注2
1.3调用dm9000发送函数,发送解析包
2、 需要实现的函数----解析ARP应答包,提取mac地址(pc主机的)
注:
1、memcpy函数的使用:
原型:void *memcpy( void *dst, void const *src, size_t length);
功能:将从src的起始位置复制length个字节到dst的内存起始位置;可以复制任何类型的值,第3个参数指定复制值的长度(以字节计)。相对于字符串操作函数,能处理任意字节序列。
字符串函数不能处理内部含有NUL的字符。
2、
由于各个主机存储数据的模式不一致(大小端问题);需要将双方主机统一格式。默认在网路通讯中,都是采用大端的存储模式
专业名词:
网络字节序:
一种数据表示格式,排序方式:大端模式
网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确的解释,
3、把结构体的地址指针直接赋值给单字节数组:
buffer[n] = &val_struct;-----??
4、for(i = 0; i<length; i+2); //编程错误