打印

ICMP协议(Ping)在STC51实验板上的实现

[复制链接]
4047|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
不爱说话|  楼主 | 2009-9-2 08:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 不爱说话 于 2009-9-2 08:58 编辑

Ping程序在我的STC51实验板上实现了(https://bbs.21ic.com/icview-128485-1-1.html)。在这里和大家分享一下实现的过程。先讲一下ICMP协议然后是Ping程序在我板子上的实现情况。开始还是介绍协议的基本知识,以下内容摘自TCP/IP详解第一卷第六章:         ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议(TCPUDP)使用。一些ICMP报文把差错报文返回给用户进程。
         ICMP报文是在IP数据报内部被传输的,如下图所示。




         ICMP报文的格式如上图所示。所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。下面我们将逐个介绍各种报文格式。类型字段可以有15个不同的值,以描述特定类型的ICMP报文。
[u[/url]


    从上面的表格可以看到Ping程序就是利用ICMP中请求回显和回显应答的两种ICMP报文。“Ping”这个名字源于声纳定位操作。Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达。该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答
(上图列出了所有的ICMP报文类型)。
    一般来说,如果不能Ping到某台主机,那么就不能Telnet或者FTP到那台主机。反过来,如果不能Telnet到某台主机,那么通常可以用Ping程序来确定问题出在哪里。Ping程序还能测出到这台主机的往返时间,以表明该主机离我们有“多远”。
    我的目标是,用PC Ping通我的板子。为此我首先编写了一段单片机程序,让我的板子接收所有的数据包,并通过串口打印出来,这样得到数据就便于分析了。当然,因为没有对数据进行任何处理所以也就没有任何响应了,它就好比是网络上的一个监听者。下面是板子上电后收到的一系列数据包,由于我在其间执行了PC上得Ping程序,所以显示的数据包中就包括PC发来的Ping报文。(这里使用了大虾电子网的SSCOM串口调试工具)



通过人工筛选(就是一个一个字节的与TCP/IP协议对照啦),找到了Ping报文(ICMP请求回显),下面我们来具体解读一下每个字段的含义,也算是对TCP/IP协议的一个复习。



    红线标注的前六个字节为该数据包的目的MAC地址,接下来的蓝线标注的为源MAC地址。8
0
(绿线)表明这是一个IP包,后面的十几个Byte在这里可以不管。
    第二行褐色线标注的是源IP地址,橙色为目的IP地址。这些属于IP包头部分。下面的部分就属于ICMP报文了。
    第三行绿线标注的8
0
ICMP包的类型、代码(回显请求),紫色的为ICMP校验和(2字节),后面的为ICMP报文内容。最后4个字节为整个数据包的CRC校验码(由网络控制器自动生成)。
    知道了这个报文的含义后,组织回显应答报文就不是什么难事了。
    首先,变换源、目的MAC地址和IP地址;
    然后,将ICMP的类型字段由8改为0
    最后,校验和字段要加上8(因为类型字段减了8),这样才是正确的校验和。
    其他内容不变,原封不动Copy即可。
    经过上面三步,我们就得到了ICMP回显应答报文了,只要通过网络控制器发出去就OK了。下面就是用PC Ping我的板子的结果。





    我这个STC51+DM9000A板子,响应时间=1ms。这点还是比较振奋的,因为记得看过一般51+RTL8019做的板子ping的延时是十几ms。抛开架构不谈,这些年51 MCU的速度还是提高了不少。现在还没有做什么优化,如果用上STC单片机的双DPTR,在copy数据报时应该还能提高不少速度,相信性能还有提升的空间。

相关帖子

沙发
不爱说话|  楼主 | 2009-9-2 16:57 | 只看该作者
没有人回应啊:(
是这些技术太简单,大家都会了呢?还是我发错版面了呢?

使用特权

评论回复
板凳
o蓝玉莹| | 2009-9-3 08:31 | 只看该作者
本帖最后由 o蓝玉莹 于 2009-9-3 08:34 编辑

为此帖 特意登录 支持楼主一下
看不到图片 急啊

使用特权

评论回复
地板
不爱说话|  楼主 | 2009-9-4 08:30 | 只看该作者
多谢了。
我这能看到图片啊

使用特权

评论回复
5
不爱说话|  楼主 | 2009-9-4 08:30 | 只看该作者
多谢了。
我这能看到图片啊

使用特权

评论回复
6
a305566| | 2011-4-20 16:01 | 只看该作者
不错,可惜没看到图片

使用特权

评论回复
7
renno| | 2011-4-20 16:03 | 只看该作者
很好,可供深入学习

使用特权

评论回复
8
a305566| | 2011-4-20 16:27 | 只看该作者
如果分享源码,就更好了:P

使用特权

评论回复
9
gx19890101| | 2012-11-21 11:52 | 只看该作者
看看

使用特权

评论回复
10
zxhzlmh| | 2012-12-12 15:49 | 只看该作者
主要是看不到,!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

115

主题

886

帖子

34

粉丝