zoukankan      html  css  js  c++  java
  • 【RL-TCPnet网络教程】第24章 RL-TCPnet之网络控制报文协议ICMP

    第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的相关知识需要大家查阅相关书籍进行学习,或者网上搜索相关资料进行学习。

  • 相关阅读:
    一起talk C栗子吧(第一百二十六回:C语言实例--statickeyword)
    leetcode:程序猿面试技巧
    学习图像算法阶段性总结 (附一键修图Demo)
    KMP算法具体解释
    数据结构中的7种排序算法
    关于系统首页绘制问题(ext布局+c#后台加入数据)经html输出流输出响应client
    jumpserver 堡垒机环境搭建(图文具体解释)
    Android二维码工具zxing使用
    Oracle对没有主键的表分页
    Mondiran创建连接
  • 原文地址:https://www.cnblogs.com/armfly/p/9524425.html
Copyright © 2011-2022 走看看