ICMP的全称是 Internet Control Message Protocol ,它是TCP/IP协议族的一个子协议,属于网络层协议,用于在IP主机路由器之间传递控制消息。从技术角度来讲,就是让我们能够判断网络通不通、主机是否可达、路由是否可用等等。

在网络中,ICMP协议的应用随处可见,比如我们经常使用的用于检查网络通不通的Ping命令,这个“Ping”的过程实际上就是ICMP协议工作的过程。那么当你“Ping”时,具体的ICMP协议是怎么工作的呢?

Ping命令

Ping命令利用ICMP回射请求报文和回射应答报文来测试目标系统是否可达。ICMP回射请求和ICMP回射应答报文是配合工作的。当源主机向目标主机发送了ICMP回射请求数据包后,它期待着目标主机的回答。目标主机在收到一个ICMP回射请求数据包后,它会交换源、目的主机的地址,然后将收到的ICMP回射请求数据包中的数据部分原封不动地封装在自己的ICMP回射应答数据包中,然后发回给发送ICMP回射请求的一方。如果校验正确,发送者便认为目标主机的回射服务正常,也即物理连接畅通。如果校验错误,源主机随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。注意,ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由源主机完成。

ICMP 重定向

ICMP虽然不是路由协议,但是有时它也可以指导数据包的流向(使数据流向正确的网关)。ICMP协议通过ICMP重定向数据包达到这个目的。

如图所示,主机PC要ping路由器R2的loopback 0地址:192.168.3.1,主机将判断出目标属于不同的网段,因此它要将ICMP请求包发往自己的默认网关192.168.1.253(路由器R1的E0接口)。但是,这之前主机PC首先必须发送ARP请求,请求路由器R1的E0(192.168.1.253)的MAC地址。

当路由器R1收到此ARP请求包后,它首先用ARP应答包回答主机PC的ARP请求(通知主机PC:路由器R1自己的E0接口的MAC地址)。然后,它(路由器R1)将此ICMP请求转发到路由器R2的E0接口:192.168.1.254(要求路由器R1正确配置了到网络192.168.3.0/24的路由)。此外,路由器R1还要发送一个ICMP重定向消息给主机PC,通知主机PC对于主机PC请求的地址的网关是:192.168.1.254。

路由器R2此时会发送一个ARP请求消息请求主机PC的MAC地址,而主机PC会发送ARP应答消息给路由器R2。最后路由器R2通过获得的主机PC的MAC地址信息,将ICMP应答消息发送给主机PC。如果校验正确,就实现了畅通的物理连接。

参考文章:ICMP协议Ping命令的应用

感谢关注!

更多信息与我们交流:

WIZnet邮箱:wiznetbj@wiznet.co.kr

WIZnet中文主页:http://www.iwiznet.cn

WIZnet企业微博:http://e.weibo.com/wiznet2012

ICMP协议Ping命令的应用的更多相关文章

  1. 错误的另一个常见原因是默认的安全组规则。default security group默认情况下不允许ICMP(ping命令使用的协议)

    可以在openstack horizon界面中添加ICMP和ssh(TCP)规则,也可以通过命令行.命令行方式给默认安全组添加规则的方法如下: $ nova secgroup-add-rule def ...

  2. 使用ICMP协议Ping网络主机

    #coding:utf-8 #!/usr/bin/env python import os import argparse import socket import struct import sel ...

  3. 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?

    本文引用了公众号纯洁的微笑作者奎哥的技术文章,感谢原作者的分享. 1.前言   老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天.实时音视频等)时,如果发现网络连接超时,第一时间想到的就是 ...

  4. ssh命令、ping命令、traceroute 命令所使用的协议

    在Node reboot or eviction: How to check if yourprivate interconnect CRS can transmit network heartbea ...

  5. 每天一个Linux命令(48)ping命令

        ping命令用来测试主机之间网络的连通性.     (1)用法:     用法:  ping [参数] [主机名或IP地址]     (2)功能:     功能:  确定网络和各外部主机的状态 ...

  6. Ping命令的设计与实现

    ping命令的设计与实现 发表于 C++ Socket TCP/IP 2016-05-15 19:07 字数: 10796 阅读量: 528 ping 命令使用的相关 TCP/IP 协议 ping 命 ...

  7. IP协议的助手 —— ICMP 协议

    IP协议的助手 —— ICMP 协议 IP协议的助手 —— ICMP 协议 ping 是基于 ICMP 协议工作的,所以要明白 ping 的工作,首先我们先来熟悉 ICMP 协议. ICMP 是什么? ...

  8. Ping命令与ICMP协议

    ICMP协议 ICMP是"Internet Control Message Ptotocol"(Internet控制消息协议)的缩写.它是TCP/IP协议族的一个子协议,用于在IP ...

  9. UNIX网络编程——利用ARP和ICMP协议解释ping命令

    一.MTU 以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大传输单元(MTU,Maximum Transmission Unit)      ...

随机推荐

  1. 与众不同 windows phone (20) - Device(设备)之位置服务(GPS 定位), FM 收音机, 麦克风, 震动器

    原文:与众不同 windows phone (20) - Device(设备)之位置服务(GPS 定位), FM 收音机, 麦克风, 震动器 [索引页][源码下载] 与众不同 windows phon ...

  2. shell 调试

    感觉编写shell在查找错误的过程中,很让你崩溃,还好shell也提供了一些调试的方式: 语法检查      -n选项做语法检查,而不执行脚本      sh -n script_name.sh 启动 ...

  3. codeforces.com/contest/325/problem/B

    http://codeforces.com/contest/325/problem/B B. Stadium and Games time limit per test 1 second memory ...

  4. Java学习笔记——File类之文件管理和读写操作、下载图片

    Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...

  5. heapq

    heapq-Guest-ChinaUnix博客 假设你需要维护一个列表,这个列表不断有新的元素加入,你需要在任何时候很方便的得到列表中的最大(小)值,因此要求列表始终处于排序完毕状态,怎么办呢 最简单 ...

  6. iOS 搜索框控件 最简单的dome

    刚学习搜索框控件,写了个最简单的dome #import <UIKit/UIKit.h> .h @interface ViewController : UIViewController&l ...

  7. fs学习笔记之输出格式

    接触fs那么久,有必要再记录一下. 上一篇介绍了fs拓扑描写叙述文件dot的格式,今天要介绍fs输出文件的格式. 举个样例,下面是d节点输出文件的一行记录,也就是一条流经过d的记录. textexpo ...

  8. asp.net中用FileStream类实现下载文件功能,自定义下载路径,像IE下载一样

    方法一: //这个值可以从配置文件读取,或者放个textbox让用户填 string path = "你的路径";FileStream outputStream = new Fil ...

  9. [WPF]使用Pack URI路径訪问二进制资源

    一.路径格式定义 完整的URI定义为: pack://application,,,[/可选程序集名称;][可选版本;][目录名称/]文件名 缩略后的写法是: [目录名称/]文件名 二.在XAML代码中 ...

  10. Python数据结构-序表

    序表解包: list=['aa','bb','cc'] [a1,a2,a3]=list