当前位置: 首页 > news >正文

认识ICMP协议 —— ping命令的作用过程

目录

一、为什么需要ICMP协议?

二、ICMP协议的报文格式

三、ICMP协议的作用过程(ping命令的作用过程)

1、通过DNS解析域名

2、封装各个协议的报头

3、发送包

四、ping命令的坑


ICMP协议是一个网络层协议,但在IP协议之上,用于检测网络的连通性,平时我们使用的ping命令使用的就是ICMP协议。

一、为什么需要ICMP协议?

ICMP协议用于检查网络是否连通,你或许会疑惑,直接给对方发一个报文,如果对方有应答,那就说明连通了;如果没有就说明没连通。

这种理解存在误区,如果在传输过程中丢包了,网络层不提供可靠性传输,丢了就丢了,也不会通知传输层TCP协议,正是因为如此,TCP长时间没有收到响应,就会触发超时重传机制。

因此,ICMP协议能够检测网络是否连通,并提供传输异常的原因。

二、ICMP协议的报文格式

报文格式只是简单了解ICMP是怎么将应答或者错误信息反馈给我们的。这里主要了解 8位类型 和 返回内容的对应关系。

8位类型字段和报文内容的对应关系如下: 

三、ICMP协议的作用过程(ping命令的作用过程)

下面使用ping命令来了解ICMP协议的作用过程,假设我们ping的是 baidu.com。

1、通过DNS解析域名

用户输入的是域名baidu.com,但是封装IP报头需要的是IP地址,因此,用户输入域名的时候,会自动查询DNS 服务器,由DNS服务器检索数据库, 得到对应的IP地址 39.156.66.10

2、封装各个协议的报头

一些管理员命令使用的是原始套接字,这些套接字绕过了传输层直接发送IP报文,ping命令算是其中之一,使用ping命令的时候相当于应用层直接告诉ICMP协议,我想测试一下与IP地址39.156.66.10 是否连通。

  • 一开始是请求,所以ICMP协议的类型字段填入的是“询问报文”对应的值
  • 交给IP协议封装IP协议的报头;
    • 如果不知道下一跳的Mac地址,下面就要交给ARP协议获取下一跳的Mac地址;
    • 如果知道,直接进行下一步操作;
  • 获取到Mac地址以后,封装Mac帧报头

3、发送包

当主机X发送的报文到达路由器B的时候,路由器B为了获取到服务器的Mac地址,会发送ARP请求,但是如果多次发送ARP请求无响应,此时路由器B就会返回一个ICMP的包给主机X,这个包里就携带了错误信息。

 正常情况下,如果我们发送的测试报文能到达服务器,ping命令得到的结果如下:

四、ping命令的坑

telnet是23端口,ssh是22端口,ping是什么端口?很显然这是一个坑,端口号是传输层为了向上交付给应用层,但ping命令绕过了传输层,直接发送IP报文。

相关文章:

  • 【Pandas总结】第七节 Pandas 合并数据集_pd.concat()
  • 【Meetup预告】OpenMLDB+37手游:一键查收实时特征计算场景案例及进阶使用攻略
  • OPTEE:TA镜像的签名和加载-上(五)
  • mysql在django中开启事务,实现悲观锁和乐观锁
  • 极限多标签学习之-PLT
  • MMDetection系列 | 5. MMDetection运行配置介绍
  • java实现顺序表
  • 【英语:基础进阶_核心词汇扩充】E5.常见词根拓词
  • 命令执行漏洞——系统命令执行
  • 【数据结构与算法】List接口栈队列
  • 将cookie字符串转成editthiscookie插件的json格式
  • SpringAOP总结
  • python--数据容器--列表
  • Roson的Qt之旅 #119 QNetworkAddressEntry详细介绍
  • Mybatis -- 使用
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Angular数据绑定机制
  • CSS 提示工具(Tooltip)
  • ES2017异步函数现已正式可用
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • gulp 教程
  • log4j2输出到kafka
  • maven工程打包jar以及java jar命令的classpath使用
  • Node 版本管理
  • Octave 入门
  • Odoo domain写法及运用
  • React-Native - 收藏集 - 掘金
  • STAR法则
  • yii2权限控制rbac之rule详细讲解
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 设计模式 开闭原则
  • 智能网联汽车信息安全
  • 字符串匹配基础上
  • RDS-Mysql 物理备份恢复到本地数据库上
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (20050108)又读《平凡的世界》
  • (4)STL算法之比较
  • (9)STL算法之逆转旋转
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (二)Linux——Linux常用指令
  • (二)斐波那契Fabonacci函数
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (一一四)第九章编程练习
  • .NET Core引入性能分析引导优化
  • .NET 事件模型教程(二)
  • .net6 webapi log4net完整配置使用流程
  • .Net6使用WebSocket与前端进行通信
  • .net访问oracle数据库性能问题
  • @Mapper作用
  • [AX]AX2012 SSRS报表Drill through action
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷
  • [gdc19]《战神4》中的全局光照技术