zoukankan      html  css  js  c++  java
  • 《计算机网络基础》笔记 6——网际控制报文ICMP

    0 前言

    懈怠了啊兄弟!
    总想攒点东西再发,这个思想不可取!持续集成,OK?

    1 ICMP是个啥?

    今天总结的这个ICMP是啥?好像平时都是TCP,UDP,IP,没怎么搞过这个嘛。(只限小白)
    ping总用过吧?网络有问题,先ping一下。其实这个ping工具就是使用的ICMP。

    首先需要明确,这个协议是IP层,即网际层,并不是更上层传输层协议。为了更有效地传输IP数据报提高交付成功机会,在网际层使用ICMP。为啥用了它就提供交付成功机会了?因为它允许主机和路由器报告差错情况和提供异常情况报告。

    2 ICMP格式及分类

    其格式如下:

    类型如下:

    截图一时爽,一直截图一直爽!
    下面这段文字,我差点也懒得敲出来,那还总结个毛线?直接分享个书名得了!还是纯手打加深记忆为好。
    ICMP差错报告报文共有四种,如下说明:
    (1)终点不可达 当路由器或主机不能交付数据报时,向源点发送终点不可达报文
    (2)时间超过 当路由器收到生存时间为0的数据报时,除了丢弃该数据报外,还会向源点发送时间超过报文。当终点在预计时间内未收到一个数据报的所有数据报片时,把已收到的数据报片丢弃,向源点发送时间超过报文。
    (3)参数问题 当路由器或主机收到的数据报的首部中有字段的值不正确时,丢弃,然后向源点发送参数问题报文。
    (4)改变路由(重定向) 路由器把改变路由报文发给主机,让主机知道下次发送数据报时使用新的路由。这个注意,是路由器发给主机。主机刚开始工作时,会有一个默认路由器。当这个默认路由器发现有更好的路由到达目的地址时,就会向主机发送改变路由报文,主机就在自己的路由表中增加一个项目。

    差错报文格式如下:

    看到图中ICMP报文数据部分除了IP首部还有数据部分的8个字节,这是啥东东,可以回忆一下IP数据报格式。。。开玩笑,那是传输层端口号(UDP和TCP)和传输层报文的发送序号(对于TCP),这个呢是给高层协议也就是从传输层看的。
    什么事情呢,都会有例外,这个差错报告也有,对于以下几种情况,就不进行差错报告:
    (1)具有多播地址的数据报
    (2)ICMP差错报告报文本身
    (3)127.0.0.0和0.0.0.0等特殊地址
    (4)对第一个分片的数据报片后续的所有数据报片

    说完了差错报告,来说说ICMP询问报文,这个呢有两种:
    (1)回送请求和应答 由路由器或主机向特定主机发送ICMP回送请求报文,收到该报文的主机需要向路由器和主机发送ICMP回送应答报文,主要用来测试目的站是否可达及其相关状态
    (2)时间戳请求和应答 时间戳请求报文是请某个路由器或主机回答当前的日期和时间。在应答报文中包含一个32位的字段,存储的是从1900年1月1日起到当前时刻的秒数。用于时间同步和时间测量。

    3 ICMP应用

    (1) ping
    第一节也说了,ping就是用的ICMP,具体是使用了ICMP回送请求和应答报文。
    (2)traceroute
    traceroute是Unix系统中的名字,Windows系统中是tracert,使用的是ICMP时间超过和终点不可达差错报告报文。具体实现如下截图所述:

  • 相关阅读:
    Shell脚本最佳实践
    tmux会话断电保存自动恢复
    [JD15] 括号匹配方案
    [LeetCode 187.] 重复的DNA序列
    [LeetCode 162.] 寻找峰值
    基于 Chocolatey 打造 Windows 开发环境
    [LeetCode 71.] 简化路径 【IO】
    【栈】栈排序
    [LeetCode 829.] 连续整数求和
    [LeetCode 29.] 两数相除
  • 原文地址:https://www.cnblogs.com/1million/p/12176613.html
Copyright © 2011-2022 走看看