ARP协议的实现



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);  //编程错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值