ICMP 介绍
简介
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 介绍的更多相关文章
- icmp介绍以及arp攻击
目录 一.ip数据包格式 二.ICMP协议介绍 三.ARP协议介绍 四.ARP攻击原理 一.ip数据包格式 网络层的功能: 定义了基于ip协议的逻辑地址 连接不同的媒介类型 选择是数据通过网络的最佳途 ...
- ICMP路由重定向攻击
ICMP介绍 ICMP(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议簇的一个子协议,用于在IP主机.路由器之间传递控制消息.控 ...
- 趣学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 会话层 ...
- ICMP、ARP协议介绍和ping命令
交换机工作原理和常用的简单命令 一.ICMP协议 1)ICMP协议的封装 二.ARP协议 1)什么是ARP协议 2)ARP相关命令 三.Ping命令的使 ...
- Linux基础介绍【第二篇】
远程连接Linux的原理 SHH远程连接介绍 当前,在几乎所有的互联网企业环境中,最常用的Linux提供远程连接服务的工具就是SSH软件,SSH分为SSH客户端和SSH服务端两部分.其中,SSH服务端 ...
- python select网络编程详细介绍
刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...
- [翻译]Telnet简单介绍及在windows 7中开启Telnet客户端
文章翻译自 http://social.technet.microsoft.com/wiki/contents/articles/910.windows-7-enabling-telnet-clien ...
- iptables中文介绍 、基本使用操作命令(转)
iptables 命令介绍 原文链接http://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457072.html iptables防火墙可 ...
- RSVP协议的基本概念介绍
2010-06-12 14:12 佚名 互联网 字号:T | T 对于RSVP协议的简单介绍和图解.通过文章,我们将对这个含义的基本概念和结构,以及工作方式等方面的知识有所了解.希望对大家有所帮助. ...
随机推荐
- Blazor和Vue对比学习(基础1.4):事件和子传父
Blazor和Vue的组件事件,都使用事件订阅者模式.相对于上一章的组件属性,需要多绕一个弯,无论Blazor还是Vue,都是入门的第一个难点.要突破这个难点,一是要熟悉事件订阅模式<其实不难& ...
- KLOOK客路旅行基于Apache Hudi的数据湖实践
1. 业务背景介绍 客路旅行(KLOOK)是一家专注于境外目的地旅游资源整合的在线旅行平台,提供景点门票.一日游.特色体验.当地交通与美食预订服务.覆盖全球100个国家及地区,支持12种语言和41种货 ...
- python常用内置函数和关键字
常用内置方法 在Python中有许许多多的内置方法,就是一些Python内置的函数,它们是我们日常中经常可以使用的到的一些基础的工具,可以方便我们的工作. 查看所有的内置类和内置方法 # 方法一 bu ...
- CSAPP 之 CacheLab 详解
前言 本篇博客将会介绍 CSAPP 之 CacheLab 的解题过程,分为 Part A 和 Part B 两个部分,其中 Part A 要求使用代码模拟一个高速缓存存储器,Part B 要求优化矩阵 ...
- 【多线程】线程礼让 Thread.yield()
线程礼让 Thread.yield() 礼让线程,让当前正在执行的线程暂停,但不阻塞 : 将线程从运行状态转为就绪状态 : 让cpu重新调度,礼让不一定成功!看CPU心情. 代码示例: /** * @ ...
- 【多线程】线程休眠 Thread.sleep()
线程休眠 Thread.sleep() sleep (时间) 指定当前线程阻塞的毫秒数: sleep存在异常InterruptedException: sleep时间达到后线程进入就绪状态: slee ...
- leetcode 3. Longest Substring Without Repeating Characters 无重复字符的最长子串
一.题目大意 https://leetcode.cn/problems/longest-substring-without-repeating-characters/ 给定一个字符串 s ,请你找出其 ...
- linux篇-Linux MBR分区、挂载操作步骤,逻辑卷扩容操作
Linux MBR分区.挂载操作步骤,逻辑卷扩容操作 服务器开机之后,能自动识别出硬盘,但是硬盘不能够存储数据,必须对硬盘进行分区.格式化.挂载后才能使用:linux主分区和拓展分区总数不能超过4个 ...
- Git标签用法
我们通常会在项目开发到一定阶段时给代码打上标签. 1.Git查看所有标签及其描述信息 git tag -l -n 2.Git创建标签 创建标签并添加描述信息 git tag -a v1.0.0 -m ...
- [THUSCH2017] 杜老师
description \(T\)次询问,每次问\(L,L+1...R\)有多少种子集满足子集中乘积为完全平方数. solution 50pt 首先双倍经验 通常的思路是:平方数即每个质因子指数为偶 ...