ICMP协议简介(一)

ICMP协议简介(一)

1. ICMP介绍

  • 架构IP网络时需要特别注意两点:
    • 1.确认网络是否正常工作
    • 2.遇到异常时进行问题诊断
  • ICMP的主要功能:
    • 1.确认IP包是否成功送达目标地址。
    • 2.通知在发送过程当中IP包被废弃的具体原因。
  • ==ICMP技术网络设备都配合。==

2. ICMP实例

image

eg:如果R1到达R2的包在R2发现没有到达R3的路由,则发送ICMP到R1,告知不可达。

3.ICMP头部

image
  • ICMP头部有8个字节
  • 前四个字节格式固定
    • type类型 ==8bit==
    • code代码 ==8bit==
    • checksum校验和 ==16bit==
  • 后四个字节不固定:可能有可能没有,和类型有关系。

4. ICMP报文的类型

  • 不同类型由报文中的==类型字段==和==代码字段==共同决定
  • ICMP分为两种类型
    • 查询报文
    • 差错报文

  • 报文类型如下图所示:
    其中最熟悉的两个报文都是 查询报文:++type0-code0++,++type8-code0++。
    • 0-Echo Reply 0。echo响应,被ping使用
    • 8-请求回复 0。echo请求
  • 差错报文占大多数
image

4.1 差错报文

4.1.1差错报文结构

  • 当发送一份ICMP差错报文时,报文始终包含IP的==首部==和产生ICMP差错报文的IP数据包的==前8个字节==。

image
  • 差错报文数据前8个字节意义:
    tcp,udp,arp前8字节都含有==源端口号==反馈给源主机。
  • 接收ICMP差错报文的模块就会把它与某个==协议==、和==用户进程==联系起来
    • 协议(根据IP数据报首部中的协议字段来判断)
    • 用户进程(根据包含在IP数据报前8字节中的TCP、UDP报文首部中的TCP、UDP端口号判断)

4.1.2 不可达差错

1.路由
  • 回复收到==U.U.U==,则类型为3:目的不可达
image

  • ==debug ip icmp== 进一步解析为哪种不可达。发现==host unreachable==(主机不可达)
    image

  • 思科路由器,Telnet一个IP地址,如果收到ICMP报错则会报错
image
2.过滤PING
  • 同样 ==debug ip icmp==
  • 出现==administratively prohibited unreachable==,表示用户强制过滤
  • 另外可以抓包观察到++type:3,code:13++
image

  • 思科路由器Telnet之后会报错。
  • 当然也存在 ==TCP reset==的可能
  • 但是微软计算机不会报错,只是坚持发送Telnet SYN包,直到超时,程序员不太关心网络。
    image
3.MTU
  • 调小MTU,一个包与出接口MTU有关。
    image
  • ICMP flag为df的包不可分片,一旦大于MTU就丢弃,并且发送不可达信息。

  • 如果因为MTU问题回复ICMP,则ICMP首部后两个字节中会写入MTU大小


    image
4.端口不可达
  • ==TCP==访问一个未开放端口号立刻会失败,(可以利用这个特性进行 ==端口扫描==
    • 有失败反应,则端口未开放
    • 无反应,反而有可能端口已打开
  • ==UDP==访问未开放端口号,会反馈端口不可达信息


    image

4.1.3 关闭不可达信息

  • 面对未知的互联网,不必要提供不可达等重要信息。使用:==no ip unreachable==
    image

    -思科对ICMP 报错速率已经够进行了控制,避免发送大量的ICMP。
    eg:==ip icmp rate-limit unreachable== 1000。默认1000毫秒=1秒,发送一个ICMP

4.1.4 ICMP TTL超时

  • TTL不断减少,到0之后超时。

4.1.5 ICMP Redirect

-ICMP 重定向,选择更优化更应该走的路径。路由器不会理会重定向ICMP,无路由信息的二层设备会接收ICMP


image

你可能感兴趣的:(ICMP协议简介(一))