自从完成51实验板的焊接,本来想直接移植uIP到板子上的,我也把自己写的DM9000A驱动替换到uIP的webserver例程里了,但是结果板子上电后没有数据包输出,在IE里输入板子的地址也没有页面出來,一时无从下手,不知道应该从哪方面debug。感觉TCP/IP这方面还有很多要看的知识,与其在那里瞎调程序,不如看一些专业书籍有用。因此,这段时间主要看了TCP/IP协议 第一卷,学习一些基本的知识。知道了以太网和802.3的关系,以太网数据包的组成,什么是IP,TCP协议等。今天,从最基本的开始,先来说一说ARP(地址解析协议)在我的板子上的实现。
ARP协议是一个网络层的协议,实现的功能是网络设备的MAC地址到IP地址的映射。在以太网中每个网络设备都有一个唯一的48位(6字节)MAC地址,数据报都是按照MAC地址发送的,其地址范围是由相关组织按照不同设备制造商统一分配的,这样保证了网络上设备地址不会冲突。但是TCP/IP协议是以32位(4字节)IP地址作为通讯地址的,怎样使MAC地址和IP地址对应上呢,这里就用到了ARP协议。
ARP的工作过程大致是这样的:比如网络中的一台主机想要知道MAC地址为01:02:03:04:05:06的机器的IP地址,于是它就向网上发送一个ARP查询数据报(目的MAC全为FF的广播报文),网络上的所有机器收到这个广播后将查询的MAC与自己的MAC比对,如果不一致,则不回应该报文。若一致则向该主机发出ARP回复数据报(这时就是只针对发送方的单播报文了),告诉主机自己的IP(比如192.168.0.9)。这样主机就会在ARP映射表中记录这一项192.168.0.9-----〉01:02:03:04:05:06。以后,发往这个IP地址的IP/TCP/UDP等数据报就会对应到它的MAC地址。
我在我的网络实验板上按照这个协议,实现了ARP响应(有ARP查询时,回复自己的IP),并且与PC连接后调试通过。从命令提示符窗口输入arp -a查询ARP表项可以看到,PC已经识别了我的板子,并且正确建立了MAC-〉IP的映射。这样就为后面的高层协议实现打下了基础。
|