zoukankan      html  css  js  c++  java
  • <再看TCP/IP第一卷>关于网络层及协议细节---ICMP协议几个要注意的地方

    在TCP/IP协议族中,ICMP协议是一个介于网络层和传输层中间的一个协议,许多材料都会认为ICMP是网络层的一个部分,但是ICMP协议的报头是被包裹在IP协议之中的,而UDP协议又可以被ICMP协议包装,所以不妨认为它是在一个所谓的“中间层”。

    一.首先看一下ICMP报文的类型来概括了解一下ICMP的主要功能:

    当类型代码为0的时候,ICMP用于返回“不可达”差错;而当类型代码为5的时候,表示该ICMP报文表达“重定向”的操作。其余的类型代码皆可以和图中描述一一对应。

    下列图是ICMP不同类型的报文的具体格式:

    (1)ICMP时间戳请求和应答报文

     (2)ICMP不可达报文

    (3)路由器答报文

    (4)ICMP超时报文

    二.有几种情况不会导致产生ICMP差错报文:

    (1)ICMP差错报文(不然有可能会一直循环)

    (2)目的地址是广播地址或者多播地址的IP数据报

    (3)作为链路层广播的数据报(ARP,RARP)

    (4)不是IP分片的第一片

    (5)源地址不是单个主机的数据报。源地址不能为零地址,loopback或者广播,多播地址。

    三.ICMP报文是在主机之间交换的,不需要端口号

    四.traceroute工具的实质:

    首先发送一份TTL字段为1的IP数据给目的主机,处理这份数据的第一个路由器将TTL值减1,丢弃该份数据报,并发回一份超时ICMP报文,这样就得到了该路径中的第一个路由器的地址,然后traceroute程序发送一份TTL值为2的数据报(这里因为IP协议的connectionless特性,有可能是前后两个ICMP报文来自不同的路径),这样我们就得到了第二个路由器的地址,继续这个过程直到该份数据报到达目的主机,但是目的主机哪怕接收到TTL值为1的IP数据报,也不会丢弃该数据并产生一ICMP报文,traceroute程序发送一份UDP数据报给目的主机,并选择一个不能的端口作为UDP端口,使目的主机的任何一个应用程序都不可能使用该端口,从而返回一份“不可达”ICMP报文。

  • 相关阅读:
    JQuery POST请求乱码...
    open source e-business software
    about tomcat ssl
    使用汉文博士检索汉字
    使用汉文博士检索词条
    安装并运行汉文博士
    汉文博士正式版发布
    汉文博士新测试版0.5.3.2081发布
    汉文博士新测试版0.5.3.2020发布
    汉文博士新测试版0.5.3.2010发布
  • 原文地址:https://www.cnblogs.com/guguli/p/4482427.html
Copyright © 2011-2022 走看看