前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【RL-TCPnet网络教程】第24章 RL-TCPnet之网络控制报文协议ICMP

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

作者头像
Simon223
发布2018-09-04 10:48:24
6650
发布2018-09-04 10:48:24
举报
文章被收录于专栏:安富莱嵌入式技术分享

第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协议基础知识:

对于初学者来说,学习上面四个参考资料就够了。如果大家有网络方面的书籍,比如《TCP/IP详解》,也可以直接看书籍中这方面的内容。

24.3  ICMP基础知识点

(这里的知识点整理自上面的参考资料地址)

教程这里也对ICMP的基础知识做个介绍,方便大家先有个大概的认识。

24.3.1 ICMP简要说明

ICMP(Internet Control Message Protocol,网络控制报文协议)是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。

它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。

ICMP提供了易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。

我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

24.3.2 ICMP协议功能

从技术角度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性﹐其功能主要有:

  • 侦测远端主机是否存在。
  • 建立及维护路由资料。
  • 重导资料传送路径(ICMP重定向)。
  • 资料流量控制。

ICMP在沟通之中,主要是透过不同的类别(Type)与代码(Code) 让机器来识别不同的连线状况。ICMP 是个非常有用的协议,尤其是当我们要对网路连接状况进行判断的时候。

24.3.3 ICMP技术细节

ICMP是在RFC 792中定义的互联网协议族之一。通常用于返回的错误信息或是分析路由。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的Echo request(类别代码:8)和Echo reply(类别代码:0)消息来实现的。

24.3.4 ICMP报文格式

1、报头

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

  • Type - ICMP的类型,标识生成的错误报文。
  • Code - 进一步划分ICMP的类型,该字段用来查找产生错误的原因,例如,ICMP的目标不可达类型可以把这个位设为1至15等来表示不同的意思。
  • Checksum - 校验码部分,这个字段包含有从ICMP报头和数据部分计算得来的,用于检查错误的数据,其中此校验码字段的值视为0。
  • ID - 这个字段包含了ID值,在Echo Reply类型的消息中要返回这个字段。
  • Sequence - 这个字段包含一个序号,同样要在Echo Reply类型的消息中要返回这个字段。

2、填充数据

填充的数据紧接在ICMP报头的后面(以8位为一组):

  • Linux的"ping"工具填充的ICMP除了8个8字节的报头以外,默认情况下还另外填充数据使得总大小为64字节。
  • 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.5 总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第24章     RL-TCPnet之网络控制报文协议ICMP
    • 24.1  初学者重要提示
      • 24.2  ICMP基础知识参考资料
        • 24.3  ICMP基础知识点
          • 24.3.1 ICMP简要说明
          • 24.3.2 ICMP协议功能
          • 24.3.3 ICMP技术细节
          • 24.3.4 ICMP报文格式
          • 24.3.5 ICMP报文类型
        • 24.4 ICMP函数
          • 24.5 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档