ICMP 协议

在之前网络层的介绍中,我们知道 IP 提供一种无连接的、尽力而为的服务。这就意味着无法进行流量控制与差错控制。因此在 IP 数据报的传输过程中,出现各种的错误是在所难免的,为了通知源主机 IP 数据报传输过程中遇到的问题,因此设计了因特网控制报文协议(ICMP)。

虽然说 ICMP 协议将 IP 协议封装在内部,所以大多数人将 ICMP 视为传输层的协议,但实际上 ICMP 是 IP 协议的重要组成部分,所以将其放在网络层更为合适。

ICMP 的报文一般有两种,查询报文和查询报文

查询报文:例如我们在使用 ping 命令,子网掩码查询,时间戳查询等情况时,都会发送查询报文。

差错报文:而差错报文是在当对应的路由器或者终端设备收到查询报文后,产生了一系列问题。把出现的问题,回复给发起者的报文就是差错报文。

但考虑到整体网络资源的占用上,在如下情况下,是不会产生差错报文的:

  1. 差错报文不会产生差错报文 - 防止 ICMP 无限产生和传送差错报文
  2. 目的地址是广播或多播的 IP 数据包
  3. 链路层广播的数据包
  4. 不是 IP 分片的第一片 - IP 是尽力而为,自然不需要可靠性
  5. 源地址不是某个主机的数据包

ICMP 类型

由于 ICMP 本身就是为了弥补 IP 协议不可靠的特性,起到排错目的,所以它的 Header 并不复杂。

正如图中所示的,对于 ICMP Header 来说,比较重要的就是 Type (8 bit)和 Code (8 bit) 字段,用来表示各种错误的情况。

其中完整的介绍可以参考这篇 wiki,下面就介绍上常用的部分。

Type code Description
0 0 Echo 回复报文,如 Ping 命令的回复报文。
3 0 网络不可达
3 1 主机不可达
3 3 协议不可达
3 4 端口不可达
3 6 网络不知道
3 7 主机不知道
8 0 Echo 请求报文,如 Ping 命令的请求报文。
13 0 时间戳请求报文

下面我们抓个包,来看一下。

Ping 命令测试网络连通性

这里在主机上 Ping 下百度,通过 Wireshark 抓到的数据包如下:

先看一下 Echo Request 包,对应 Type 为8,Code 为0:

Echo Reply 包 - Type 为 0,Code 为 0:

Traceroute 测试网络连通性

在 IP 协议中,为了防止出现环路而设置了 TTL 字段。该字段也在 traceroute 中起到了很大的作用,通过设置 TTL 的数值,来获取数据报的传递过程。

TTL:当 IP 数据包进行传送时,每经过一个路由器,TTL 指就会减一,当 TTL = 0 时,该 IP 数据报会被丢弃。

下面就来了解下 Traceroute 的通信过程,用到的拓扑如下:

当主机收到目的主机的 IP 后,会给目的主机发送一个 TTL = 1 的 UDP 数据包。

而经过第一个路由器后,TTL - 1 变成 0.这时路由器会把数据报丢弃,然后把丢弃的数据包的 IP 头部封装起来,回复主机一个差错报文。如下:

这个过程主机会发三次,也就是说会产生 3 个 TTL =1 的 UDP,如下

接着会在再次发送 3 个 TTL = 2 的 UDP 报文,如下

第二个路由器,会再次向主机发送一个差错报文,如下:

这里需要注意的:由于第二台路由器已经相当于是目的地,所以将数据包拆到传输层,但由于传输层上的端口标识了应用层的应用,而在该路由器上不在该应用,进而回复了端口不可达的报文。

由于图中只经过 2 个路由器,所以截止发送到 TTL = 2

并且我们可以从 TTL = 2 的回复差错报文看出,只有两个差错报文。其中有个差错报文出现了丢失,并且没有给主机回复差错报文丢失的情况

CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了的更多相关文章

  1. CCNA 学习记录(三)通过仿真理解ARP协议

    拓扑图 配置 路由器R2: GigabitEthernet 0/0/0 IP Address: 192.168.1.1 Subnet Mask: 255.255.255.0 Serial 0/1/0 ...

  2. CCNA网络工程师学习进程(6)vlan相关协议的配置与路由器简单配置介绍

        前面已经介绍了大部分与vlan技术相关的交换机的协议的配置,更深层次的还有STP协议和以太网端口聚合技术,接着还会简单介绍一下路由器的基本应用.     (1)STP(Spanning-tre ...

  3. (网络层)IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)

    目录 IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit:最低位在右边 ...

  4. 网络层 IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)

    目录 IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit:最低位在右边 ...

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

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

  6. TCP/IP入门(2) --网络层

    /** 本篇博客由 126(127不可用) 2^24 -2 B 2^14 -1 128.1 191.255 2^16 -2 C 2^21 -1 192.0.1 223.255.255 2^8 -2 D ...

  7. [HTTP] tcp/ip详解 链路层 网络层 传输层 应用层

    1.可以把七层协议简化成四层协议链路层 网络层 传输层 应用层 2.通过路由器连接的两个网络网络层ip提供的是一个逐跳协议,提供了一种不可靠的服务,中间有可能会丢传输层tcp在ip的基础上提供了可靠的 ...

  8. 计算机基础:计算机网络-chapter4 网络层

    网络层的使用:如 ping,tracert,原理是ICMP 一.什么叫网络,网络层做什么,通过什么实现,这章的内容, 什么叫网络,实现这些需要做什么 将全世界范围内数以百万计的网络都互连起来,并且能够 ...

  9. ICMP协议、DNS、ARP协议、ping、DHCP协议

    1.ICMP协议 1)ICMP协议,即:网络控制消息协议(Internet Control Message Protocol) 2)ICMP是网络层协议,因为ICMP报文是装在IP数据报中,作为它的数 ...

随机推荐

  1. 【JMeter_20】JMeter逻辑控制器__事务控制器<Transaction Controller>

    事务控制器<Transaction Controller> 业务逻辑: 这个控制器在在业务控制上并没有什么特殊逻辑,可以理解为在简单控制器的基础上添加了统计的功能,当所有子节点全部成功则成 ...

  2. S7-200 PLC内部+5VDC电源的负载能力

    S7-200 PLC内部+5VDC电源的负载能力 S7-200 CPU模块提供DC5V和24V电源:当有扩展模块时,CPU通过I/O总线为其提供5V电源,所有扩展模块的SV电源消耗之和不能超过该CPU ...

  3. selenium(2)-selenium针对浏览器的操作有哪些

    对浏览器有哪些操作 最大化.最小化浏览器 控制.获取浏览器大小 获取当前标签页title.url 前进.后退.刷新 执行js语句 打开.关闭,切换新标签页 滚动页面 上传附件 鼠标悬停 对话框的定位方 ...

  4. 一位老程序员说,有这份python3的开发指南,月薪能突破20K

    推荐视频: AI人工智能识别技术_第一节AI人工智能识别技术_第二节Python基础案例之教你如何查询对方IP_第一节Python基础案例之教你如何查询对方IP_第二节 有程序员说,这份python3 ...

  5. python文件处理-将图像根据坐标画矩形标记

    内容涉及:文件遍历,选取csv后缀文件,用cv操作图片 import csv import os import sys import numpy as np import copy import sh ...

  6. sql 语句和实例

    修改字段格式的sql语句: alter table tablename alter column colname newDataType 比如:alter table mytable alter co ...

  7. maven测试配置是否成功

    测试maven 是否安装成功 win+r 输入 cmd 调出doc 输入 mvn -v maven安装完成测试报错 后来发现是java-home在path中配置缺少bin,如下图 这个是 java-h ...

  8. 半导体质量管理_SQM 供应商质量管理

    供应链上的质量保证 SPACE的此附加组件可帮助您与全球生产现场的供应商和分包商更紧密地合作.基于电子分析证书(eCOA,电子分析证书),您可以为整个供应链实施具有约束力的质量标准,并可以对其进行验证 ...

  9. conda+豆瓣源配置tensorflow+keras环境

    conda+豆瓣源配置tensorflow+keras环境 安装anaconda 打开Anaconda Prompt 创建虚拟环境 conda create -n myenv python=3.5 a ...

  10. Netty 源码解析(四): Netty 的 ChannelPipeline

    今天是猿灯塔“365篇原创计划”第四篇. 接下来的时间灯塔君持续更新Netty系列一共九篇 Netty 源码解析(一): 开始 Netty 源码解析(二): Netty 的 Channel Netty ...