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报文;当不存在任何这样的用户进程,那么报文就会被悄悄丢弃)

  

    

  

  

      

原文地址:https://www.cnblogs.com/any000yna/p/7467113.html