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报文。

  • 相关阅读:
    面试准备专题——JVM,类编译,类加载,内存错误
    面试准备-基础知识总结
    J2EE异常问题总结
    Java工具类使用注意事项
    高性能大型网站性能优化基础
    Spring Boot 2 (三):Spring Boot 开源软件都有哪些?
    Spring Boot 2(一):【重磅】Spring Boot 2.0权威发布
    Spring Boot 2 (二):Spring Boot 2 尝鲜-动态 Banner
    MFC对话框使用CPrintDialog实现打印,指定打印机、后台打印
    stm32实现iap远程固件更新
  • 原文地址:https://www.cnblogs.com/guguli/p/4482427.html
Copyright © 2011-2022 走看看