zoukankan      html  css  js  c++  java
  • ICMP协议

    ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族一个IP层子协议,用于在IP主机路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

    ICMP位于TCP/IP协议族中IP层。

    ICMP的主要功能包括:确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。同时ICMP的这种通知消息会使用IP进行发送,收到ICMP包的主机会分解ICMP的首部和数据与以后得知具体发生的原因。

    ICMP报文在IP数据报内部被传输,正式规范参考RFC792.

    ICMP报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。

    类型字段可以有15个不同的值,以描述特定类型的ICMP报文。某些ICMP报文还使用代码字段的值来进一步描述不同的条件。校验和字段覆盖整个ICMP报文,算法与IP首部校验和相同。

    ICMP消息分类

    ICMP消息大致分成两类:一类是通知出错原因的错误消息(差错报文),另一类是用于诊断的查询消息(查询报文)。

    常用ICMP消息类型

    不同类型由报文中的类型字段和代码字段来共同决定。

    类型3:ICMP目标不可达消息

     IP路由器无法将IP数据包发送给目标地址时,会给发送端主机返回一个目标不可达的ICMP消息。并在这个消息中显示不可达的具体原因。而在实际通信过程中常遇到错误代码为1,表示主机不可达,它是指路由表中没有改主机信息或者该主机没有联网的意思。

    ICMP不可达消息.png

    类型5:ICMP重定向消息

    如果路由器发送端主机使用了次优的路径发送数据,那么它会返回一个ICMP重定向消息给这个主机,在这个消息中包含了最合适的路由消息和源数据。这主要发生在路由器持有更好的路由器信息的情况下,路由器会通知这样的ICMP消息给发送端主机一个更适合的发送路由。

    ICMP重定向消息.png

    类型11:ICMP超时消息

    IP包中有有一个字段叫做TTL,它的值就是每经过一次路由器就会被减1,直到0时该IP包会被丢弃,此时IP路由器将会发送一个ICMP超时的消息给发送端主机,并通过该包已被丢弃。

    设置IP包生存周期的主要目的,是为了在路由控制遇到问题发生循环状态时,避免IP包无休止地在网络上被转发。

     

    类型0、8:ICMP回送消息

    用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息。可以向对端主机发送回送请求的消息(类型8),也可以接受对端主机发回来的回送应答消息(类型0)。网络上最常用的ping命令,就是利用这个消息实现的。

     

    参考:

    ICMP百度百科

    跟我学TCP/IP系列4--IP协议

    图解TCP/IP

    TCP/IP详解卷一

  • 相关阅读:
    leetcode Super Ugly Number
    leetcode Find Median from Data Stream
    leetcode Remove Invalid Parentheses
    leetcode Range Sum Query
    leetcode Range Sum Query
    leetcode Minimum Height Trees
    hdu 3836 Equivalent Sets
    hdu 1269 迷宫城堡
    hud 2586 How far away ?
    poj 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/7068130.html
Copyright © 2011-2022 走看看