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

      

        

      

      

          

  • 相关阅读:
    姐姐的vue(1)
    LeetCode 64. Minimum Path Sum 20170515
    LeetCode 56. 56. Merge Intervals 20170508
    LeetCode 26. Remove Duplicates from Sorted Array
    LeetCode 24. Swap Nodes in Pairs 20170424
    LeetCode 19. Remove Nth Node From End of List 20170417
    LeetCode No.9 Palindrome Number 20170410
    LeetCode No.8. String to Integer (atoi) 2017/4/10(补上一周)
    LeetCode No.7 Reverse Integer 2017/3/27
    LeetCode No.4 Median of Two Sorted Arrays 20170319
  • 原文地址:https://www.cnblogs.com/any000yna/p/7467113.html
Copyright © 2011-2022 走看看