C/C++教程

4.4 ICMP

本文主要是介绍4.4 ICMP,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

    • ICMP简介
    • 几种常用的ICMP报文类型
      • 4种差错报告报文
      • 2种询问报文
    • TTL 是什么
      • TTL初始值
    • ICMP的应用

ICMP简介

  • ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告
  • ICMP报文是装在IP数据报中,作为其中的数据部分
  • ICMP报文的种类有两种,即ICMP差错报告报文ICMP询问报文
  • ICMP报文的前4个字节是统一的格式,共有三个字段:类型代码检验和。接着的4个字节的内容与ICMP的类型有关。最后面是数据字段,其长度取决于ICMP的类型
  • 代码字段是为了进一步区分某种类型中的几种不同情况。检验和字段用来检验整个ICMP报文。因为IP数据报首部的检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP报文不产生差错

几种常用的ICMP报文类型

在这里插入图片描述

4种差错报告报文

(1)终点不可达 当路由器或主机不能交付数据报时就向源点发送终点不可达报文。

(2)时间超过 当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。

(3)参数问题 当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。

(4)改变路由(重定向) 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。

2种询问报文

  • 回送(Echo)请求或回答 这种询问报文用来测试目的站是否可达以及了解其有关状态

  • 时间戳(Timestamp)请求或回答 ICMP时间戳请求报文是请某台主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。时间戳请求与回答可用于时钟同步和时间测量

TTL 是什么

  • 每个数据包都会有一个ttl初始值,比如为10,每到达一个路由器时ttl会减一,如果=0了就会被丢弃

TTL初始值

  • Linux 64
  • Windows 128
  • Unix 255

ICMP的应用

  1. 分组网间探测, PING(Packet InterNet Groper),用来测试两台主机之间的连通性
  2. traceroute(这是UNIX操作系统中名字),它用来跟踪一个分组从源点到终点的路径。在Windows操作系统中这个命令是tracert
    在这里插入图片描述
这篇关于4.4 ICMP的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!