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

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

  1. 2016.7.9 计算机网络复习要点第四章之网际控制报文协议ICMP

    1.ICMP允许主机或路由器报告差错情况和提交有关异常情况的报告:为了更有效地转发IP数据报和提高交付成功的机会: 2.ICMP不是高层协议,因为ICMP报文是装在IP数据报中的,作为其中数据部分,所 ...

  2. 《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  3. TCP/IP详解,卷1:协议--第6章 ICMP:Internet控制报文协议

    引言 I C M P经常被认为是 I P层的一个组成部分.它传递差错报文以及其他需要注意的信息. I C M P报文通常被I P层或更高层协议( T C P或U D P)使用.一些I C M P报文把 ...

  4. 《TCP/IP 详解 卷1:协议》第 8 章:Internet 控制报文协议

    路由器是 Internet 的重要组成部分,严密监视 Internet 的操作.IP 协议未给发送失败的 IP 数据包提供一种错误处理,也没有给端系统提供直接的方法来发现错误.为了解决这一不足之处,I ...

  5. TCP/IP详解 卷一(第六章 ICMP:Internet控制报文协议)

    ICMP是(Internet Control Message Protocol)Internet控制报文协议. 用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可 ...

  6. 《TCP/IP详解卷1:协议》——第6章 ICMP:Internet控制报文协议(转载)

    1.引言 ICMP被认为是IP层的一个组成部分,它传递差错报文以及其他需要注意的信息.ICMP报文通常被IP层或更高层协议(TCP或UDP)使用.一些ICMP报文把差错报文返回给用户进程. ICMP报 ...

  7. C#4.0图解教程 - 第24章 反射和特性 - 1.反射

    24.1 元数据和反射 有关程序及类型的数据被成为 元数据.他们保存在程序集中. 程序运行时,可以查看其他程序集或其本身的元数据.一个运行的程序查看本身元数据或其他程序的元数据的行为叫做 反射. 24 ...

  8. C#4.0图解教程 - 第24章 反射和特性 – 2.特性

    1.特性 定义 Attribute用来对类.属性.方法等标注额外的信息,贴一个标签(附着物) 通俗:给 类 或 类成员 贴一个标签,就像航空部为你的行李贴一个标签一样 注意,特性 是 类 和 类的成员 ...

  9. 网络操作系统 第七章 管理TCP/IP网络

    本章小结 本章介绍了TCP/IP的相关概念,并且在此处基础上,介绍了Windows Server 2008中使用TCP/IP网络配置工具实现网络连接和管理的方法,在Linux系统中,讲解了是如何使用图 ...

随机推荐

  1. mysql 利用druid 为访问密码加密

    在原来数据库配置文件jdbc.properties 文件中增加几行加密文件 jdbc.username=rootjdbc.password=KqYkfcQkQOdOpCnaokLfb9Kbzdf+NG ...

  2. 02-再探MySQL数据库

    一.数据类型 1.数值类型 a.整数类型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT 作用:存储年龄,等级,id,各种号码等. =============== ...

  3. Textwrap模块

    该模块首先提供了三个便捷的方法:wrap,fill和decent,也提供了TextWrapper类 textwrap.wrap(text,[width[,…]]) 这个方法是将一个字符串按照width ...

  4. cmake让add_subdirectory()的所有target生成到同一目录

    问题描述和解决办法 整个项目包括: 库.测试程序,都是基于源码生成:测试程序肯定是executable类型了,而如果生成的库是SHARED类型,在windows下就是.dll(以及对应的.lib)文件 ...

  5. openssl私钥转换为PKCS8

    先装openssl 原来 -----BEGIN DSA PRIVATE KEY----- 转换后 -----BEGIN PRIVATE KEY----- openssl pkcs8 -topk8 -i ...

  6. Echarts折线图案例

    公司要求做个累计收益图,没用过Echarts,再这里记录一下 html页面 <!DOCTYPE html> <html> <head> <meta chars ...

  7. BZOJ2759 一个动态树好题 LCT

    题解: 的确是动态树好题 首先由于每个点只有一个出边 这个图构成了基环内向树 我们观察那个同余方程组 一旦形成环的话我们就能知道环上点以及能连向环上点的值是多少了 所以我们只需要用一种结构来维护两个不 ...

  8. 激活windows专业版(激活windows10专业版,解决“我们无法在此设备上激活windows因为无法连接到你的组织的激活服务器 ”)

    本来系统用的好好的,但是前几天系统突然提示我要去取设置里面激活windows,我就想:我的系统好像是原厂正版的吧,怎么就过期了呢?没办法只能搜索下怎么激活,去系统城,各大网站什么的试了好多密钥全部不行 ...

  9. 【webpack系列】从零搭建 webpack4+react 脚手架(五)

    本章节,我们一起来探讨以下问题:如何对编译后的文件进行gzip压缩,如何让开发环境的控制台输出更加高逼格,如何更好的对编译后的文件进行bundle分析等. 1 gzip压缩 如果你想节省带宽提高网站速 ...

  10. Linux下使用http协议下载文件

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h&g ...