• TCP/IP详解卷一06


    1.ICMP(Internet控制报文协议):用来传送差错报文以及其他需要注意的信息,ICMP报文通常被IP层或者更高层协议(TCP或者UDP)使用,一些ICMP报文把差错报文返回给用户进程。同时,ICMP报文是在IP数据报内部被传送的。

    2.ICMP报文的格式:(所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同)

      类型字段(15个不同的值):以描述特定类型的ICMP报文。

      检验和字段(覆盖整个ICMP报文),检验和是必须存在的?????(理解检验和算法,不会)

    3.ICMP报文的类型(由类型字段和代码字段共同决定): 

      ICMP报文是查询报文还是差错报文。(当类型为17,代码为0时表示地址掩码请求;当地址为18,代码为0,表示地址掩码应答)

      那些情况不会导致ICMP差错报文:(1)ICMP差错报文(2)目的地址时广播地址或者多播地址(3)作为链路层广播的数据报(4)不是IP分片的第一片(5)源地址不是单个主机的数据报。

    4.ICMP地址掩码请求与应答:

      ICMP地址掩码请求(用于无盘系统在引导过程中获取自己的子网掩码)

      BOOTP协议(无盘系统获取子网掩码)

      ICMP报文中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回,这样,发送端就可以把应答与请求进行匹配。(广播的特性:发送主机也能通过某种内部环回机制收到一份广播报文拷贝,必须包括发送主机在内)

      ICMP地址掩码应答必须是收到请求接口的子网掩码(这是因为多接口有不同的子网掩码),地址掩码来自环回接口。

    5.ICMP时间戳请求与应答

      ICMP时间戳请求允许系统向另一个系统查询当前的时间。(这种ICMP报文的好处是它提供了毫秒级的分辨率而rdate只能提供秒级的分辨率),但是,调用者必须通过其他方法获知当时的日期(缺陷)。

      请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。

      ICMP报文中:发起时间戳(orig),接收时间戳(recv)以及发送时间戳(xmit),往返时间(rtt)(往返时间的值时收到应答时间值减去发送请求时的时间值),difference的值是接收时间戳值减去发起时间戳值。

      gateway(路由器)(当系统返回一个非标准时间戳值时,就用32bit时间戳中的高位来表示。)(不能计算发起时间戳和接收时间戳之间的时间差,单位不统一)

      NTP(网络时间协议)

      获取时间和日期的另一种方法:

        (1)以可读的格式返回当前的时间和日期(telnet来验证)

        (2)时间服务程序返回一个32bit的二进制数值,以秒为单位提供的日期和时间。

        (3)NTP(网络时间协议)可以保证LAN或者WAN上的一组系统的时钟误差在毫秒级以内。

        (4)分布式时间服务(DTS)

        (5)Unix系统提供守护程序timed(8),来同步局域网上的系统时钟。

    6.ICMP端口不可达差错(ICMP查询报文-地址掩码和时间戳查询及应答)

      端口不可达报文(ICMP差错报文):

      在UDP中,如果收到一份UDP数据报而目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文。

            eg:

        在get命令后,一份UDP数据报就发送到主机svr4的8888端口。

        在UDP数据报送到主机之前,要先发送一份ARP请求来确定它的硬件地址。接着返回ARP应答,然后才发送UDP数据报。

        一个ICMP端口不可达差错是立刻返回的。但是,TFTP似乎忽略了这个ICMP报文,然后继续发送另一份UDP数据报。在客户放弃之前重发了三次。

        注意:ICMP报文是在主机之间交换的,而不用目的端口号,而每个20字节的UDP数据报则是从一个特定端口(2924)发送到另一个特定端口(8888)。

      ICMP的一个规则是:ICMP差错报文必须包含生成该差错报文的数据报IP收不,还必须至少跟该IP首部后面的8个字节。

        UDP首部中的内容是源端口号和目的端口号。在此时(由于将目的端口号发生了改变才会导致产生了ICMP端口不可达的差错报文),接收ICMP的系统可以根据源端口号(2924)来将差错报文与某个特定的用户进程相关联。

        TFTP客户程序所采用不太好的超时重传算法。(没有TCP的超时重传好用)

    7.ICMP报文的4.4BSD处理

      在各个系统中,ICMP处理的方式是不相同的。

      类型17,代码0,描述:地址掩码请求,处理方法:内核产生应答(此时由内核进行处理)

      类型18,代码0,描述:地址掩码应答,处理方法:用户进程(此时报文就被传送到所有在内核中登记的用户进程,以读取接收到的ICMP报文;当不存在任何这样的用户进程,那么报文就会被悄悄丢弃)

      

        

      

      

          

  • 相关阅读:
    转char varchar nvarchar区别
    NHibernate和Spring.Net框架介绍(一)
    ASP.NET面试题(一)
    存储过程编写经验和优化措施
    软件工程师不可不知的10个概念
    优化数据库前问自己的10个问题
    ZOJ 1610 Count the Colors (线段树)
    POJ 3667 Hotel (线段树)
    HDU Best Reward (扩展KMP)
    POJ 3277 City Horizon (线段树)
  • 原文地址:https://www.cnblogs.com/any000yna/p/7467113.html
Copyright © 2020-2023  润新知