zl程序教程

您现在的位置是:首页 >  工具

当前栏目

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

应用协议 分类 ping 计算机网络 报文 icmp 网络层
2023-06-13 09:17:44 时间

文章目录

一、ICMP 协议


网络层 协议 :

① IP 协议 : IP 协议是 网络层 核心协议 ;

② ARP 协议 : ARP 协议 是 网络层 与 数据链路层 之间的协议 , 通过 IP 地址查找 物理地址 ;

③ ICMP 和 IGMP 协议 : ICMP 和 IGMP 协议 是 网络层 与 传输层 之间的协议 ; 目的是更加有效的转发 IP 数据报 , 提高交付的成功率 ;

二、ICMP 协议 简介


ICMP 协议 简介 :

① ICMP 协议 全称 : 网际控制报文协议 ;

② ICMP 协议 功能 :

  • 差错报告 : 对应 发送 差错报文 ;
  • 网络探寻 : 对应 发送 探寻报文 ;

③ ICMP 报文 在 IP 数据报中位置 : ICMP 报文 属于 IP 数据报 的 数据部分 ;

ICMP 报文内容 : 其中的类型是 差错报文 / 探询报文 ;

三、ICMP 五种差错报告报文


ICMP 五种差错报告报文 :

① 终点不可达报文 : 路由器 / 主机 不能交付数据报时 , 就会向源点 发送 终点不可达报文 ;

② 源点抑制报文 : 路由器 / 主机 拥塞 , 丢弃 IP 数据报 , 向源点发送源点抑制报文 , 让源点降低发送速率 ;

③ 时间超过报文 :

  • 生存周期为
0

: 路由器 生存周期 TTL =

0

时 , 丢弃该报文 , 同时向源点发送 时间超过报文 ;

  • 分组丢失 : 终点 在预定时间内 没有收到 数据报的全部数据分组时 , 就会将已收到的数据分组全部丢弃 , 向源点发送时间超过报文 ;

④ 参数问题报文 : 路由器 / 主机 收到的 数据报 首部 字段由错误值 , 丢弃该数据报 , 向源点发送 参数问题报文 ;

⑤ 改变路由报文 : 路由器 将 改变路由报文 发送给主机 , 让主机下次将数据报发送给另外的路由器 ; 又称为 “重定向报文” ;

四、ICMP 差错报文形成


ICMP 差错报文形成 :

① 取出 IP 数据报内容 : 取出 IP 数据报 首部 , 以及 数据部分的 前

8

字节 ;

② ICMP 差错报文 组成 : ICMP 前

8

个字节 + IP 数据报 首部 + IP 数据报数据部分前

8

字节 ;

③ 组装 IP 数据报 : 将 ICMP 数据报 装入 IP 数据报 数据部分 ;

五、ICMP 差错报文 不发送 情形


ICMP 差错报文 不发送 情形 :

① ICMP 差错报文错误 : IP 数据报 中 , 如果 ICMP 差错报文部分出错 , 就不用再发送 ICMP 差错报告报文了 ;

② 后续数据报分片 : ICMP 差错报文只针对数据报的第一个分片 , 后续分片就不发送 ICMP 差错报告报文了 ;

③ 组播地址 : 如果 IP 数据报的地址是 组播地址 , 不发送 ICMP 差错报文 ;

④ 特殊地址 : 如果 IP 数据报的地址是 特殊地址 , 不发送 ICMP 差错报文 ; 如 : 默认路由地址 等 ;

六、ICMP 询问报文


ICMP 询问报文 :

① 回送请求 和 回答报文 : 主机 / 路由器 询问特定主机 , 目的主机收到该报文后 , 必须给源主机 发送 ICMP 回答报文 ; 目的是 测试该 目的主机是否可达 ;

② 时间戳请求 和 回答报文 : 请求 主机 / 路由器 当前的日期 和 时间 ; 用于进行时钟同步 和 时间测量 ;

七、ICMP 应用


ICMP 应用 :

① PING : 测试连通性 , 使用 ICMP 回送请求 和 回答报文 ;

② Traceroute : 追踪 分组 从原点 到 终点 路径 , 使用 ICMP 时间超过差错报告报文 ;

Traceroute 应用 细节 :

源主机 与 目的主机之间 有

n

个路由器 ;

1

个数据报 TTL =

1

, 第

1

个路由器收到该数据报 , 发现其生存周期为

0

, 向源主机回送 ICMP 时间超过差错报告报文 , 这样就得到了第

1

个路由器的地址 ;

2

个数据报 TTL =

1

, 第

2

个路由器收到该数据报 , 发现其生存周期为

0

, 向源主机回送 ICMP 时间超过差错报告报文 , 这样就得到了第

2

个路由器的地址 ;

\vdots

n

个数据报 TTL =

n

, 第

n

个路由器收到该数据报 , 发现其生存周期为

0

, 向源主机回送 ICMP 时间超过差错报告报文 , 这样就得到了第

n

个路由器的地址 ;