诸如dm9000网卡芯片,怎么设置寄存器可以收到自己发送的数据包?
曾今也看过网络编程,发现只要往127.0.0.1发送,就能够本机收到,或者直接发数据包给自己的IP地址,也是能够接收。我自己做了一块网卡,然后自己也开发了简单的TCP/IP协议栈,数据包的收发已经做完了,两台网络上的机器对法都能收到。二现在我想给自己发,却收不到,我不知道是什么问题。提出以下几点看法:
1、是否是dm9000网卡这类网卡芯片的寄存器可以设置。而且我特意看了一下,网卡可以工作在自环模式,而这个自环模式是什么意思我没理解,设置完了也不好使。
2、有可能是普通网卡的驱动程序帮你处理好了,当发现发送的数据包的IP地址为本机IP或者是127.0.0.1回环地址,就直接不把数据包发送出去,直接在驱动走了一圈然后又回来了,也就是根本就没有单打网卡的发送缓冲区。
上面两种情况是我猜想的,不一定对,但我感觉后一种可能性大。但是也不对,因为在使用Ping命令时,说只要Ping回环地址能Ping通,就说明自己的网卡工作正常,那么可能还是在驱动程序做了文章,可能是操作某个寄存器了。另外,我想RJ45把数据发送出去是差分信号往外发,是串行的,那么数据只要发出去了,能收回吗,好像是收不回把?就跟泼出去的水一样,除非是有路由或交换机之类的东西看到你的数据包和特殊,然后又返还给你了。希望做过网络方面的人能够帮忙,这个问题困扰我很久了,我都不知道这个帖子该发到哪个板块。
[解决办法]
1、我记得DM9000是有MAC回环和PHY回环两种的?每种PHY或MAC芯片都提供回环模式,回环只能作为测试MAC层和PHY层读写是否正常,并不能检测你变压器以及差分线周边电路连接的正确性,因为回环模式是不会往外发包的。
2、ping 本机IP实际上就看操作系统处理了。我试了下,在拔掉网线的情况下,我嵌入式的linux ping本机地址能够ping通,说明可能驱动作为回环处理了。而windows XP则ping不通。
ping 127.0.0.1是一个标准的测试回环的做法。