• TCP/IP五层模型-网络层-ICMP协议


    ​1.定义:ICMP(Internet Control Message Protocol)是网际控制报文协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。

    2.作用:主要是用于补充IP传输数据报的过程中,发送主机无法确定数据报是否到达目标主机。ICMP报文分为出错报文和查询报文两种。若数据报不能到达目标主机,ICMP出错报告报文可以以回送信息的方式,向源主机发去信息,并不能纠正数据报中的任何出错。除了出错报告,ICMP还可以诊断出某些网络问题,这就是ICMP的查询报文。

    ICMP差错报文:(type code组合决定发送的报文,具体见: 

    http://www.cnitblog.com/yang55xiaoguang/articles/59581.html
    ICMP目标不可达消息:IP路由器无法将IP数据报发送给目的地址时,会给发送端主机返回一个目标不可达ICMP消息,并在这个消息中显示不可达的具体原因。
    ICMP重定向消息:如果路由器发现发送端主机使用次优的路径发送数据时,那么它会返回一个ICMP重定向消息给这个主机,这个消息包含了最合适的路由信息和源数据。主要发生在路由器持有更好的路由信息的情况下,路由器会通过这个ICMP重定向消息给发送端主机一个更合适的发送路由。
    ICMP超时消息:IP数据包中有一个字段TTL(Time to live,生存时间),它的值随着每经过一个路由器就会减1,直到减到0时该IP数据包被丢弃。此时,IP路由器将发送一个ICMP超时消息(包含路由器自己的信息)给发送端主机,并通知该包已被丢弃。
    源抑制消息:当TCP/IP主机发送数据到另一主机时,如果速度达到路由器或者链路的饱和状态,路由器发出一个ICMP源抑制消息。

    ICMP查询报文:

    ICMP回送消息(echo):用于进行通信的主机或路由之间,判断发送数据包是否成功到达对端的消息。可以向对端主机发送回送请求消息,也可以接收对端主机回来的回送应答消息。
    ICMP地址掩码消息(Addressmask):主要用于主机或路由想要了解子网掩码的情况。可以向那些主机或路由器发送ICMP地址掩码请求消息,然后通过接收ICMP地址掩码应答消息获取子网掩码信息。
    ICMP时间戳消息(Time stamp):可以向那些主机或路由器发送ICMP时间戳请求消息,然后通过接收ICMP时间戳应答消息获取时间信息。

    常见的type + code组合:

    正常的ping请求,使用icmp包,type 8 code 0
    正常的ping回应,使用icmp包, type 0 code 0
    因ttl失效导致丢包,丢弃包的设备也是用icmp包通知源主机,type 11 code 0
    目标主机不可达(缺路由),路由器用icmp通知源主机,type 3 code 1
    目标端口不可达(目标没开放端口),目标主机通过icmp通知源主机。可以用telnet ip 端口 来发出指定端口的包,type 3 code 3

    3.PING:测试到达目标主机的连通性和延迟。原理:发出一个ping请求,对方回一个ping回应,使用icmp报文。常用参数:

    -t  无限ping,测试稳定性
    -l  指定包大小
    -f  不允许分片,测试路径mtu
    -n  指定icmp包个数
    -i  指定ttl

    ping的整个过程见:

    https://blog.csdn.net/qiuchaoxi/article/details/79970201

    4.Tracert:作用:Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据包访问目标所采取的路径。Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。

    工作过程:Windows系统下发的是icmp包,发送一个echo request请求包,ttl设置为1,检测第一跳,ttl设置为2,检测第二跳,直到到达最终目标,目标主机回应echo replay回应包。发3个包的作用是检测第一跳设备的网络连接延时和稳定性。Unix系统下发的是UDP包,端口随机,ttl设置为1,检测第一跳,ttl设置为2,检测第二跳,直到到达最终目标,目标主机回应icmp  port unreadable。

    TTL:TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。

    5.ICMP报文解析:ICMP报文格式:

    ICMP是控制协议,不需要端口号。ICMP 包发送是不可靠的,ICMP只能用来检测问题,不能解决任何网络问题。

  • 相关阅读:
    SQL Server中六种数据移动的方法
    SQL Server数据导入导出技术概述与比较
    深入浅出SQL之左连接、右连接和全连接
    安装SQL server提示安装不上,挂起之类
    如何在SQL Server中快速删除重复记录
    SQL Server数据导入导出工具BCP详解
    深入浅出SQL教程之嵌套SELECT语句
    使用osql执行sql脚本
    sql server 分组统计
    php常用几种设计模式的应用场景
  • 原文地址:https://www.cnblogs.com/dawangk-3366/p/14286563.html
Copyright © 2020-2023  润新知