简介

ICMP(Internet 控制报文协议,Internet Control Message Protocol , RFC 792)。主要用于在IP主机与路由器之间传递控制消息,用于报告主机是否可达、路由是否可用等。可以用于手机网络信息、诊断和排除各种网络故障以及用户数据的传递具有至关重要的作用。

ICMP报文

ICMP报文是基于IP包的(也就是基于网络层)

不管是 ICMPv4 还是 ICMPv6 都采用如下格式:

分类

ICMP报文可以分为两大类:

  • 差错报文(error message),有关IP数据报传递的ICMP报文
  • 查询/信息类报文(query / informational message)

ICMPv4 报文

在IPv4中,协议(Protocol)字段值为1表示该报文携带了ICMPv4

ICMPv4根据类型字段的不同而代表不同的含义:

E(差错类报文)/ I (信息类报文),*表示常见报文,+表示[RFC4884] 扩展对象

ICMPv6 报文

ICMPv6 负责的不仅仅只是差错和信息类报文,也负责了大量IPV6路由器和主机的配置

在ICMPv6 类型中,差错报文的报文类型从0到127,信息类的报文类型从128到255.

应用

ICMP的作用是根据类型和代码决定的,目前ICMP中许多类型都被其他协议替代,目前用的最的的类型是回显应答(ping 应答),回显(ping 请求),超时(TTL)。如ping 程序中。

ping

Ping程序目的是为了测试另一台主机是否可达。该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答

源地址ping程序发出的回显与回显应答



根据设备的不同ttl的值也会不一样

目的地址发出的不可达

traceroute

路由跟踪,主要用于查看源到目的的路径信息,从而检查中间节点已经整个网络是否可用。当网络出现故障时,用该命令可以定位错误。

运行如下命令,到出口的路径是否正常(192.168.100.5为出口地址)

➜ ~ traceroute 192.168.100.5

traceroute to 192.168.100.5 (192.168.100.5), 64 hops max, 52 byte packets

 1  moshujia.cn (192.168.124.1)  72.598 ms  23.765 ms  4.736 ms

 2  192.168.24.254 (192.168.24.254)  8.905 ms  5.795 ms  6.632 ms

 3  192.168.100.5 (192.168.100.5)  9.466 ms  16.580 ms  14.073 ms

traceroute 程序运行结果如下

红色为UDP
黑色为ICMP

从图中可以看出,中间节点都向源地址发送一个TTL超时的通知来表示传输期间生存时间超时。

当到达目的地址,目的主机会发送一个端口不可达的通知。并且ICMP发送和接受的端口都为33609(这是随机的,但是都超过30000)。UDP发送和接受的端口相同,但是会随着发送/接受次数的增加而增加

具体如下图所示

上图简化了192.168.24.254这个中间节点。

参考

TCP/IP 详解 卷一

ICMP 介绍的更多相关文章

  1. icmp介绍以及arp攻击

    目录 一.ip数据包格式 二.ICMP协议介绍 三.ARP协议介绍 四.ARP攻击原理 一.ip数据包格式 网络层的功能: 定义了基于ip协议的逻辑地址 连接不同的媒介类型 选择是数据通过网络的最佳途 ...

  2. ICMP路由重定向攻击

    ICMP介绍 ICMP(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议簇的一个子协议,用于在IP主机.路由器之间传递控制消息.控 ...

  3. 趣学CCNA 路由与交换

    第1章 OSI和TCP/IP 11.1 协议与协议分层 31.2 OSI参考模型 61.2.1 物理层 91.2.2 数据链路层 91.2.3 网络层 101.2.4 传输层 101.2.5 会话层 ...

  4. ICMP、ARP协议介绍和ping命令

    交换机工作原理和常用的简单命令    一.ICMP协议      1)ICMP协议的封装    二.ARP协议      1)什么是ARP协议      2)ARP相关命令    三.Ping命令的使 ...

  5. Linux基础介绍【第二篇】

    远程连接Linux的原理 SHH远程连接介绍 当前,在几乎所有的互联网企业环境中,最常用的Linux提供远程连接服务的工具就是SSH软件,SSH分为SSH客户端和SSH服务端两部分.其中,SSH服务端 ...

  6. python select网络编程详细介绍

    刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...

  7. [翻译]Telnet简单介绍及在windows 7中开启Telnet客户端

    文章翻译自 http://social.technet.microsoft.com/wiki/contents/articles/910.windows-7-enabling-telnet-clien ...

  8. iptables中文介绍 、基本使用操作命令(转)

    iptables 命令介绍   原文链接http://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457072.html iptables防火墙可 ...

  9. RSVP协议的基本概念介绍

    2010-06-12 14:12 佚名 互联网 字号:T | T 对于RSVP协议的简单介绍和图解.通过文章,我们将对这个含义的基本概念和结构,以及工作方式等方面的知识有所了解.希望对大家有所帮助. ...

随机推荐

  1. 设置 Visual Studio 总是以管理员身份运行

    话不多说直接上干货 第一步: 打开 Visual Studio 的安装目录,找到 devenv.exe,然后右键快捷菜单选择"兼容性疑难解答". 第二步: 选择故障排查选项 疑难解 ...

  2. python3 常见错误(一)

    以下全部是在python3中适用. 错误一: 函数默认参数 Python允许为函数的参数提供默认的可选值.但是它可能会导致一些易变默认值的混乱.例子: 我们希望每次调用myFun函数,list1都为默 ...

  3. 2.3 为什么建议使用虚拟机来安装Linux?

    笔者认为,通过虚拟机软件学习是初学者学习 Linux 的最佳方式. 在与部分读者的交流中,笔者发现,很多初学者都认为,学习 Linux 就必须将自己的电脑装成 Linux 系统或者必须要有真正的服务器 ...

  4. 年年出妖事,一例由JSON解析导致的"薛定谔BUG"排查过程记录

    前言 做开发这么多年,也碰到无数的bug了.不过再复杂的bug,只要仔细去研读代码,加上debug,总能找到原因. 但是最近公司内碰到的这一个bug,这个bug初看很简单,但是非常妖孽,在一段时间内我 ...

  5. elastic search(以下简称es)

    参考博客园https://www.cnblogs.com/Neeo/p/10304892.html#more 如何学好elasticsearch 除了万能的百度和Google 之外,我们还有一些其他的 ...

  6. Node.js躬行记(20)——KOA源码分析(下)

    在上一篇中,主要分析了package.json和application.js文件,本文会分析剩下的几个文件. 一.context.js 在context.js中,会处理错误,cookie,JSON格式 ...

  7. 好客租房44-react组件基础综合案例-5发表评论-1

    发表评论 1给按钮绑定点击事件 2在事件处理程序中 通过state获取评论信息 3将评论信息添加到state中 并调用setState()方法更新数据 //导入react import React f ...

  8. 场景实践:使用RDS和ECS搭建个人博客

    体验简介 本教程将使用一台基础环境为CentOS7.7的云服务器ECS实例, 搭配您已有的云数据库RDS实例,帮助您快速搭建属于自己的云上博客. 背景知识 本场景主要涉及以下云产品和服务: 阿里云关系 ...

  9. Activate-or-Not:learning-customized-activation

    关于activate-or-Not的PPT paper code step1 step2 step3 step4 step5 step6 step7 step8 step9 step10

  10. 20212115 实验二 《python程序设计》实验报告

    实验二 计算器设计 #20212115 2021-2022-2 <python程序设计> 实验报告二 课程: 课程:<Python程序设计>班级: 2121姓名: 朱时鸿学号: ...