硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1989|回复: 0
收起左侧

[RL-TCPnet教程] 【RL-TCPnet网络教程】第24章 RL-TCPnet之网络控制报文协议ICMP

[复制链接]

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
发表于 2017-11-16 14:38:01 | 显示全部楼层 |阅读模式
第24章      RL-TCPnet之网络控制报文协议ICMP



      本章节为大家讲解ICMP(Internet Control Message Protocol,网络控制报文协议),通过前面章节对TCP和UDP的学习,需要大家对ICMP也有个基础的认识。
      (本章的知识点主要整理自网络)
24.1 初学者重要提示
24.2 ICMP基础知识参考资料
24.3 ICMP基础知识点
24.4 ICMP函数
24.5      总结



24.1  初学者重要提示

         通过前面几个章节对TCP和UDP的学习,需要初学者对ICMP的基础知识点也有个认识。

24.2 ICMP基础知识参考资料


      为了对TCP和UDP有更全面的认识,需要对ICMP协议的一些基础知识有个了解。大家可以从以下地址获得ICMP协议基础知识:
1、RFC792地址 : ftp://ftp.rfc-editor.org/in-notes/rfc792.txt
2、wiki百科中文版:地址链接(这个是超链接)
3、wiki百科英文版:地址链接(这个是超链接)
4、百度百科:地址链接(这个是超链接)
对于初学者来说,学习上面四个参考资料就够了。如果大家有网络方面的书籍,比如《TCP/IP详解》,也可以直接看书籍中这方面的内容。

24.3 ICMP基础知识点


      (这里的知识点整理自上面的参考资料地址)
      教程这里也对ICMP的基础知识做个介绍,方便大家先有个大概的认识。

24.3.1 ICMP简要说明


      ICMP(InternetControl Message Protocol,网络控制报文协议)是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。
      它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
      ICMP提供了易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。
       我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

24.3.2 ICMP协议功能


      从技术角度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性﹐其功能主要有:
1、侦测远端主机是否存在。
2、建立及维护路由资料。
3、重导资料传送路径(ICMP重定向)。
4、资料流量控制。
        ICMP在沟通之中,主要是透过不同的类别(Type)与代码(Code) 让机器来识别不同的连线状况。ICMP 是个非常有用的协议,尤其是当我们要对网路连接状况进行判断的时候。

24.3.3 ICMP技术细节


        ICMP是在RFC792中定义的互联网协议族之一。通常用于返回的错误信息或是分析路由。ICMP错误消息总是包括了源数据并返回给发送者。ICMP错误消息的例子之一是TTL值过期。每个路由器在转发数据报的时候都会把IP包头中的TTL值减1。如果TTL值为0,“TTL在传输中过期”的消息将会回报给源地址。每个ICMP消息都是直接封装在一个IP数据包中的,因此,和UDP一样,ICMP是不可靠的。
        虽然ICMP是包含在IP数据包中的,但是对ICMP消息通常会特殊处理,会和一般IP数据包的处理不同,而不是作为IP的一个子协议来处理。在很多时候,需要去查看ICMP消息的内容,然后发送适当的错误消息到那个原来产生IP数据包的程序,即那个导致ICMP讯息被传送的IP数据包。
        很多常用的工具是基于ICMP消息的。traceroute是通过发送包含有特殊的TTL的包,然后接收ICMP超时消息和目标不可达消息来实现的。ping则是用ICMP的Echorequest(类别代码:8)和Echo reply(类别代码:0)消息来实现的。

24.3.4 ICMP报文格式


报头
        ICMP报头从IP报头的第160位开始(除非使用了IP报头的可选部分)。
24.1.png

(1)Type - ICMP的类型,标识生成的错误报文。
(2)Code - 进一步划分ICMP的类型,该字段用来查找产生错误的原因,例如,ICMP的目标不可达类型可以把这个位设为1至15等来表示不同的意思。
(3)Checksum - 校验码部分,这个字段包含有从ICMP报头和数据部分计算得来的,用于检查错误的数据,其中此校验码字段的值视为0。
(4)ID - 这个字段包含了ID值,在Echo Reply类型的消息中要返回这个字段。
(5)Sequence - 这个字段包含一个序号,同样要在EchoReply类型的消息中要返回这个字段。
填充数据
         填充的数据紧接在ICMP报头的后面(以8位为一组):
(1)Linux的"ping"工具填充的ICMP除了8个8字节的报头以外,默认情况下还另外填充数据使得总大小为64字节。
(2)Windows的"ping.exe"填充的ICMP除了8个8字节的报头以外,默认情况下还另外填充数据使得总大小为40字节。

24.3.5 ICMP报文类型


        ICMP报文类型列表内容较多,我们这里不再列出来了,大家可以直接看本章24.2小节里面给的参考资料。

24.4 ICMP函数


        关于ICMP,RL-TCPnet提供了如下一个函数:
icmp_ping
        函数功能:通过这个函数就可以实现类似电脑端的ping功能注意,这个函数不支持重入,也就是不支持多任务。
        关于这个函数的详细讲解及其使用举例可以看教程第 3 章 3.4 小节里面说的参考资料 rlarm.chm 文件,我们这里就不再专门做例子进行说明了:
24.2.png



24.5 总结

        本章节就为大家讲解这么多,更多ICMP的相关知识需要大家查阅相关书籍进行学习,或者网上搜索相关资料进行学习。


努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-16 22:25 , Processed in 0.157527 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表