一、ICMP协议

1.ICMP协议概述

  • ICMP协议同IP协议,ARP协议属于网络层的协议。IP协议封装的IP包头中的协议号值为1表示是同层的ICMP协议传给IP协议的;协议号值为6表示是上层TCP协议传给IP;协议号值为17表示是上层UDP协议传给IP

  • 误区:ICMP协议属于三层协议,故没有对应的端口号。只有五层协议才有对应的端口号

2.ICMP的作用

  • 可以利用ICMP的网络探测和回馈机制,来实现①网络探测,②路由跟踪,③错误反馈

3.ICMP协议的封装格式

  • ICMP协议生成的ICMP报文组成部分:ICMP头数据

4.数据与ICMP头

1)数据

  • 数据字段没有任何意义,一般会填充一些字符,比如0000…或者abcdefg…,只表示有内容

2)ICMP头

  • ICMP头的组成:ICMP类型字段,代码

  • 作用:ICMP头会标识此ICMP报文使用哪一种探测类型或者哪一种回馈类型

  • 代码:代码一般跟前面ICMP类型字段的值一致–无意义;但是如果ICMP类型字段值为3,那么代码则有意义----会告诉你不可达的种类(原因),比如为1或者3或者0等

  • ICMP类型字段

    • 值为8:表示此ICMP报文类型为ping请求(利用ICMP探测机制)

      比如当我们输入ping命令时,则ICMP类型字段为8,表示此ICMP报文用于ping请求

    • 值为0:表示此ICMP报文的类型为ping应答(利用ICMP回馈机制)

      比如当我们ping对方,对方在线回应请求时,对方发送的ICMP报文中ICMP类型字段为0,表示此报文是一个ping应答报文,即对方成功应答

    • 值为3:表示此ICMP报文的类型为目标主机不可达(利用ICMP回馈机制)

      ICMP类型字段为3的原因有很多种:

      情况一:当帧到达路由表,由于路由器缺少路由表(不完整),无法路由,则会将此帧丢弃,并且回馈给我一个ICMP报文,此报文的ICMP头中类型字段为3,代码也为3表示目标主机不可达

      情况二:PC去ping一个不同网段的IP,则PC会先请求网关,但是如果PC没有配置网关,那么屏幕上就会弹出一句话,目标主机不可达

      情况三:整个网络中的路由器的路由表都配置完整,且也指网关了,但是现在某个路由器上配置了一个安全过滤策略,相当于一个防火墙,比如会过滤我的IP,那么路由器不会路由我的帧,则此时也会回馈一个ICMP报问,类型字段为3

      情况四:我发的帧已经成功到达对方电脑,但是对方电脑拒收:即拒绝ping对方主机。比如我现在想去ping服务器上的80端口,对方电脑可以收到我的帧,但是解封装到四层时,对方电脑四层上有一个防火墙,设置策略----禁止我访问80端口,则会将我的信息丢弃。也会回馈3,表示目标主机不可达

    • 值为11TTL超时(利用ICMP回馈机制)

      比如我去ping一台主机,但是网络中出现了回路,一个帧会有TTL值,经过一个路由器就会减一,最后减为0,路由器就会将帧丢弃,这台路由器就要回馈ICMP报文,类型值为11

5.启用ICMP协议误区

  • ICMP协议不是只有ping对方,发送与回馈需要使用ICMP协议,ping只是其中能启用ICMP协议的一种方式
  • ICMP适用于任何协议,只要帧在网络传输过程中,在某个三层及三层以上的设备处发生错误,这个设备就有义务启用ICMP协议给发送方回馈一个ICMP报文

二、路由跟踪

1.路由跟踪命令

1)windows上的命令

tracert IP地址

2)linux或路由器上的命令

traceroute IP地址

2.路由跟踪原理

  • 如图所示:

  • 说明:

    • 当PC1在cmd输入tracert 40.1.1.1时,PC会启用ICMP协议生成ICMP报文:ICMP类型字段值为8(即表示ping请求)、代码、数据为一堆填充数据比如abc。然后再经过IP协议,封装IP包头:源IP、目标IP、TTL值先设为1。在传入第四层封装帧头帧尾(ARP过程省略)。最后将帧发送出去
    • 当经过r1时,r1会解封装,最后将IP包头中的TTL值改为减一,即为0,那么r1路由器会将此帧丢弃;然后启用ICMP协议,生成ICMP报文:ICMP类型字段值为11(表示TTL超时)、代码、数据。同样通过IP协议封装IP包头:源IP为r1网关IP,目标IP为发送方10.1.1.1。通过四层封装帧头帧尾再将帧回馈给PC1
    • PC1收到后再启用ICMP协议生成ICMP报文:ICMP类型字段为8…。再通过IP协议封装IP包头:TTL值改为2…。再发送
    • 经过r1将TTL值减一,则TTL值=1。再经过r2,r2将TTL减一变为0。那么r2也会通过ICMP报文:类型值为11。封住成帧后回馈给PC1。
    • PC2收到后再启用ICMP,TTL值改为3…

    经过不断的发送ping请求ICMP报文,TTL值不断加一,最后收到了来自目标IP40.1.1.1的TTL超时ICMP报文,则结束追踪命令

    • 此时PC1的主机上会显示以下四条记录

  • 出现错误:

    1. 当有一条记录显示三个星号:表示此设备设置了禁止跟踪,但是允许帧通过

    2. 如果前面显示了几条记录,但是后面一律不显示了:表示可能从不显示的设备这里开始出现了网络问题

3.跟踪路由结果显示

三、路由跟踪抓包分析

  1. 在PC上安装抓包工具:这里使用科来软件来分析。设置好抓取进出PC上的某网卡的数据包

  2. 在PC的cmd上输入tracert 目标IP地址,然后去科来上查看抓取的包,进行分析

  3. 选取ICMP协议这几个帧进行分析

    • 可以看到ICMP协议没有对应的端口,因为是一个三层协议,直接生成报文最后封装成帧

    • 此帧由帧头、IP包头、ICMP报文、帧尾构成,所以是ICMP协议的封装格式

    • 选取第一个由本地发帧中的ICMP报文部分:类型为8表示是ping请求,代码为0,数据部分这里以全0填充

    • 再看此帧中的IP包头部分:协议值为1表示此IP协议是从同层的ICMP协议传入的。即此帧为一个ICMP协议生成的

    • 再选取第二个由对方发送的帧的ICMP报文部分:类型为0表示ping应答,代码为0,数据用全0填充

day16、3 - ICMP协议相关推荐

  1. 4.3.9 ICMP协议

    4.3.9 ICMP协议

  2. 协议森林06 瑞士军刀 (ICMP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载. 到现在为止,我们讲解了网络层中最重要的IP协议(参考协议森林).IP协议的一个重要补充是是ICMP ...

  3. PING的原理以及ICMP协议

    主要内容: 1.ping的原理以及工作过程 2.ICMP协议 3.ICMP的应用:ping,traceroute 1.ping的原理以及工作过程  ping的原理  ping 程序是用来探测主机到主机 ...

  4. linux c icmp协议 判断主机存活

    详细参考 <linux c ping 分析实现> https://blog.csdn.net/whatday/article/details/104192608 ICMP(Internet ...

  5. TCP/IP详解--学习笔记(4)-ICMP协议,ping和Traceroute

    1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成.其中一个重要的模块就是ICMP(网络控制报文)协议. 当传送 ...

  6. 【计算机网络】网络层 : ICMP 协议 ( ICMP 差错报文 | 差错报文分类 | ICMP 询问报文 | ICMP 应用 | Ping | Traceroute )

    文章目录 一.ICMP 协议 二.ICMP 协议 简介 三.ICMP 五种差错报告报文 四.ICMP 差错报文形成 五.ICMP 差错报文 不发送 情形 六.ICMP 询问报文 七.ICMP 应用 一 ...

  7. 4、以太网基础知识——ICMP协议详解

    返回总目录 上一篇 下一篇 ICMP协议是一个网络层协议.  一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通:但是IP协议并不提供可靠传输.如果丢包了,IP协议并不能通知传输层是 ...

  8. ping程序和tracert(traceroute)背后的故事--ICMP协议

    为路由器生,为交换机死,为了Ping通奋斗一辈子-----tracert.cn 上面是一个网络工程师的个人定位,很有意思,哈哈!那么我们来看看ping和tracert都是什么吧 PING (Packe ...

  9. ping 原理与ICMP协议---转

    http://blog.csdn.net/inject2006/article/details/2139149 ping 的原理 ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某 ...

最新文章

  1. 存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储
  2. Java_spark简单例子
  3. windows redis安装与配置
  4. 阿里云ACE共创空间——MQ消息队列产品测试
  5. Spring MVC 中的 controller层的方法的返回值类型
  6. Java实现qq截图工具
  7. 15张图带你彻底明白spring循环依赖,再也不用怕了
  8. Nginx - 原理机制
  9. Arcgis4js实现链家找房的效果
  10. 阿里云ECS服务器组内网
  11. NC65 用户密码重置
  12. App推广都有哪些渠道?一张图片让你全看明白!
  13. 鸿蒙之下分城如果建设,率土之滨:分城数量不再限制,戍城、金虎台、拜将台让战斗更激烈...
  14. ftp服务器上传不了文件怎么办,ftp服务器怎么上传不了文件
  15. 全缓存、行缓存和无缓存
  16. MySQL中获取当前时间与时间戳
  17. A Byte of Python3 学习笔记
  18. Klin、Druid、ClickHouse核心技术对比
  19. 什么是jQuery[0002]
  20. 弱酸阳离子树脂去除硫酸锂溶液中的钙镁离子技术

热门文章

  1. 浅谈室内定位常见的几种运用场景
  2. Pytorch系列_1
  3. 面试经历---Samp;G(2016年02月27日上午面试)
  4. 自适应模糊控制——间接自适应模糊控制
  5. java计算机毕业设计校园一卡通服务平台源码+mysql数据库+lw文档+系统+调试部署
  6. JDBC连接Orac报错 Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186646784)(ERR=12505)(ERROR_STACK=(ERROR=(
  7. C语言之 - 双向链表
  8. 09情态动词(2):运用
  9. 编写Java程序_找星座朋友应用软件
  10. 基于STM32实现孤立词语音识别系统