码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 认识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报文。

  • 相关阅读:
    迪文TPS04电容触摸屏驱动IC溅水触摸测试成功
    从头开始使用 KNN 进行 KNN 和 MNIST 手写数字识别的初学者指南
    WPS或Excel查找A列中有B列没有的值
    C#的Console 类使用说明
    java基本数据类型的分类
    嵌入式学习笔记(29)轮询方式处理按键
    netty框架学习记录
    Unity中的MonoBehaviour脚本-基础知识和继承关系
    CVE-2021-3490 eBPF 32位边界计算错误漏洞利用分析
    【前端】vscode快捷键和实用Api整理
  • 原文地址:https://blog.csdn.net/challenglistic/article/details/126881240
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号