TCP/IP协议(8): ICMP(Internet Control Message Protocol) 协议 ——诊断和控制 IP 协议层
TCP/IP协议(8): ICMP(Internet Control Message Protocol) 协议 ——诊断和控制 IP 协议层
关于网际控制报文协议(Internet Control Message Protocol, ICMP)
网际控制报文协议(Internet Control Message Protocol, ICMP) 是定义在 RFC 792 中的因特网协议套件的一部分。ICMP 报文通常用于诊断或控制目的,它也可以用于响应 IP 操作中的错误(定义于 RFC 1122)。
(ICMP is part of the Internet protocol suite as defined in RFC 792. ICMP messages are typically used for diagnostic or control purposes or generated in response to errors in IP operations (as specified in RFC 1122). )
ICMP 协议介于传输层和网络层之间。不能说它是网络层协议,是因为它依赖于所有的 IP 协议实现,ICMP 报文在传输过程中,又很可能被传输层解析处理。
尽管如此,我们通常仍然认为 ICMP 协议是网络层协议。维基百科对此有如下解释:
ICMP 协议使用了 IP 协议的基本支持,以至于它好像是更高层的协议。然而, ICMP 协议实际上是 IP 协议的一个组成部分。尽管 ICMP 报文被封装在标准 IP 协议包中,但与一般的 IP 包处理不同,ICMP 报文通常作为特殊情况处理。
(ICMP uses the basic support of IP as if it were a higher level protocol, however, ICMP is actually an integral part of IP. Although ICMP messages are contained within standard IP packets, ICMP messages are usually processed as a special case, distinguished from normal IP processing. )
ICMP 报文
类型(Type): 1 字节。 定义该 ICMP 报文的类型。常用的类型值如下:
类型值 正式名称 注释 0 回显应答 ping 的应答 3 目的不可达 不可达的主机/协议 5 重定向 表示应该被使用的可选路由器 8 回显 回显请求 11 超时 资源耗尽 12 参数问题 有问题的数据包或首部 代码(Code):1 字节。ICMP 报文 子类型。进一步的解释该 ICMP 报文的作用。目标不可达类型常见代码如下:
代码值 正式名称 注释 0 网路不可达 (完全) 没有路由到目的地 1 主机不可达 已知但不可达的主机 2 协议不可达 未知的(传输)协议 3 端口不可达 未知的端口 4 需要进行分片但设置不分片位 需要设置分片但被 DF 禁止 校验和(Checksum): 2 字节。该 ICMP 报文的首部和数据计算出的校验和。
ICMP 首部剩余部分(Rest Of Header):4 字节。根据不同的类型和代码,表达不同的含义。
ICMP 数据: ICMP 报文携带的附加数据。
常见的 ICMP 报文
ICMP 回显类型 — 分组网际探测(Packet InterNet Groper, PING)
我们通常使用 PING 操作来测试主机之间的连通性。该操作使用的 ICMP 回显报文结构如下:
其中,回显请求的类型值是 8, 回显应答的类型值是 0。其对应的代码值都为 0。
标识符和序列号用于匹配回显应答和回显请求。有效负载可能包括一个表示传输时间的时间戳和一个序列号,这允许 PING 以无状态的方式计算往返时间(Round Trip Time, RTT),而不需要记录每个包的传输时间。
目标不可达报文(Destination Unreachable)
目标不可到达报文由主机或其入站网关生成,用于通知客户端由于某种原因目标网络设备不可到达。
其中,类型值为 3, 表示网络不可达。 代码值用于标识目标设备不可达的具体原因,常见代码值如前文所示。
下一跳最大传输单元在代码值为 4 时有效,存放下一跳网络的 MTU。
IP 首部及原始数据报数据的前 8 字节用于客户端识别目标不可到达报文所对应的原报文。
参考文献
- Internet Control Message Protocol - Wikipedia
- ping (networking utility) - Wikipedia
- W.Richard Stevens等著,《TCP/IP 详解(卷一: 协议)》
- 谢希仁编著, 《计算机网络》
TCP/IP协议(8): ICMP(Internet Control Message Protocol) 协议 ——诊断和控制 IP 协议层的更多相关文章
- ICMP(Internet Control Message Protocol)网际控制报文协议初识
ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网 ...
- 网络协议 5 - ICMP 与 ping:投石问路的侦察兵
日常开发中,我们经常会碰到查询网络是否畅通以及域名对应 IP 地址等小需求,这时候用的最多的应该就是 ping 命令了. 那你知道 ping 命令是怎么工作的吗?今天,我们就来一起认识下 pi ...
- 网络协议 5 - ICMP 与 Ping
日常开发中,我们经常会碰到查询网络是否畅通以及域名对应 IP 地址等小需求,这时候用的最多的应该就是 ping 命令了. 那你知道 ping 命令是怎么工作的吗?今天,我们就来一起认识下 ping 命 ...
- 国际控制报文协议ICMP
国际控制报文协议ICMP ICMP简介 ICMP 用于主机或路由器报告差错情况和提供有关异常情况的报告(检测网络错误). ICMP 不是高层协议,而是 IP 层的协议. ICMP 报文的格式 ICMP ...
- TCP/IP详解学习笔记(5)-- ICMP:internet 控制报文协议
1.概述 ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制 ...
- TCP/IP详解 卷一(第六章 ICMP:Internet控制报文协议)
ICMP是(Internet Control Message Protocol)Internet控制报文协议. 用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可 ...
- 《TCP/IP 详解 卷1:协议》第 8 章:Internet 控制报文协议
路由器是 Internet 的重要组成部分,严密监视 Internet 的操作.IP 协议未给发送失败的 IP 数据包提供一种错误处理,也没有给端系统提供直接的方法来发现错误.为了解决这一不足之处,I ...
- ICMP Internet控制报文协议
ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网 ...
- ICMP:internet 控制报文协议
ICMP:internet 控制报文协议 1.概述 ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个 ...
- 【RL-TCPnet网络教程】第24章 RL-TCPnet之网络控制报文协议ICMP
第24章 RL-TCPnet之网络控制报文协议ICMP 本章节为大家讲解ICMP(Internet Control Message Protocol,网络控制报文协议),通过前面章节对TCP和 ...
随机推荐
- std C++11 生成随机数组
#include <algorithm> #include <array> #include <iostream> #include <iterator> ...
- 网络I/O模型 解读
网络.内核 网卡能「接收所有在网络上传输的信号」,但正常情况下只接受发送到该电脑的帧和广播帧,将其余的帧丢弃. 所以网络 I/O 其实是网络与服务端(电脑内存)之间的输入与输出 内核 查看内核版本 : ...
- 【每日一题】【字符串与数字互转】【去除空格】【大数处理】2021年12月12日-8. 字符串转换整数 (atoi)
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAtoi(string s) 的算法如下: ...
- Python Excel 处理模块 : OpenPyXL
OpenPyXL模块使用方法 以下是介绍OpenPyXL的基本使用,不涉及样式和合并单元格的跨行操作 一般来说,对于大名鼎鼎的xlrd,xlwt和xlutils三个模块,Excel操作有3个基本状态 ...
- Java单例模式的最佳实践?
"读过书,--我便考你一考.茴香豆的茴字,怎样写的?"--鲁迅<孔乙己> 0x00 大纲 目录 0x00 大纲 0x01 前言 0x02 单例的正确性 new关键字 c ...
- echarts map地图中绘制浙江省市区县乡镇多级联动边界下钻的最新geojson数据文件获取和更新
目录 ECharts Map地图的显示 GeoJSON数据文件获取 在ECharts中绘制浙江省的数据 ECharts Map地图的显示 ECharts支持地理坐标显示,专门提供了一个geo组件,在s ...
- Django视图层/FBV与CBV/jsonResponse对象/form表单上传文件/request对象获取文件
目录 虚拟环境 视图层views 三板斧 jsonResponse对象 form如何上传文件/request对象获取文件 request对象方法 FBV与CBV CBV源码解析 虚拟环境 每创建一个虚 ...
- java中方法传参形式
成员方法传参形式: 1.基本数据类型:传递的是值 public class Object03 { public static void main(String[] args) { AA aa = ne ...
- vue项目 h5上拉加载(分页功能)
<template> <div class="receivable"> <div class="application-header fle ...
- Python免杀过360
本文章仅供参考学习 作者:mantou 博客地址:https://www.cnblogs.com/mantou0/ 分离免杀 这个我就不多说了,效果确实不错,网上关于分离免杀的也有很多文章 不分离过3 ...