TCPIP协议详解卷一:Chapter6 笔记

    技术2026-02-12  1

    TCP/IP协议详解卷一:Chapter3 笔记

    Chapter 6 ICMP:Internet控制报文协议6.2节 ICMP报文的类型6.3节 ICMP地址掩码请求与应答6.4节 ICMP时间戳请求与应答6.5节 ICMP端口不可达差错

    Chapter 6 ICMP:Internet控制报文协议

    ICMP = Internet Control Message Protocol = 因特网控制报文协议 ICMP经常被认为是IP层的一个组成部分,用于传递差错报文和其他需要注意的信息。 ICMP报文是被封装在IP数据报内部进行传输的。 ICMP报文都包括8位类型字段、8位代码字段、16位检验和字段。不同的类型和代码对应不同的报文内容。

    6.2节 ICMP报文的类型

    ICMP报文可以分为差错报文和查询报文。 类型字段有15个不同的值,每个类型还可以用代码字段进一步描述不同的条件。 在对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文(避免无穷循环)。 ICMP差错报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节。根据IP数据报首部中的协议字段和IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号,接收ICMP差错报文的模块可以将其与某个协议和用户进程联系起来。

    下面各种情况都不会导致产生ICMP差错报文:

    ICMP差错报文(但是ICMP查询报文可能会产生差错报文);目的地址是广播地址或多播地址的IP数据报;作为链路层广播的数据报;不是IP分片的第一片;源地址不是单个主机的数据报(因此,源地址不要设为零地址、环回地址、广播地址、多播地址)。

    6.3节 ICMP地址掩码请求与应答

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

    ICMP地址掩码请求/应答报文 = 8位类型(请求=17,应答=18) + 8位代码(=0) + 16位检验和 + 16位标识符 + 16位序列号 + 32位子网掩码

    其中,标识符和序列号由发送端任意选定,应答报文将返回这两个字段的值,发送端就可以把请求与应答进行匹配。

    6.4节 ICMP时间戳请求与应答

    ICMP时间戳请求允许系统向另一个系统查询当前时间。返回的值是从午夜开始计算的毫秒数,协调的统一时间(Coordinated Universal Time, UTC)。

    ICMP时间戳请求/应答 = 8位类型(请求=13,应答=14)+ 8位代码(=0)+ 16位检验和 + 16位标识符 + 16位序列号 + 32位发起时间戳 + 32位接收时间戳 + 32位传送时间戳

    其中,接收时间戳和传送时间戳通常被设置成相同的值。

    一个例子 其中,orig表示发起时间戳,recv表示接收时间戳,xmit表示发送时间戳。rtt表示往返时延(round-trip time = RTT),其值等于发送端收到应答的时间值减去发送请求的时间值。difference的值是接受时间戳减去发起时间戳。 如果发送端的本地时间与查询到的时间一致,则有 d i f f e r e n c e = r e c v − o r i g = 0.5 ∗ R T T difference = recv - orig = 0.5*RTT difference=recvorig=0.5RTT如果 d i f f e r e n c e − 0.5 ∗ R T T < 0 difference - 0.5*RTT < 0 difference0.5RTT<0,则说明本地时钟比查询主机的时钟快(orig值过大),需要对本地时钟进行调整 。

    上面的两行例子中接收端bsdi分别要比发送端sun慢7ms和8ms。即 − 6 m s − 0.5 ∗ 2 m s = − 7 m s -6ms - 0.5*2ms=-7ms 6ms0.52ms=7ms − 7 m s − 0.5 ∗ 2 m s = − 8 m s -7ms - 0.5*2ms = -8ms 7ms0.52ms=8ms

    其他或的时间和日期的方法还包括daytime时间服务程序、 网络时间协议(NTP = Network Time Protocol)、分布式时间服务(DTS)等。

    6.5节 ICMP端口不可达差错

    ICMP不可达报文格式: ICMP不可达报文 = 1字节类型(=3)+1字节代码(0-15)+2字节检验和 + 4字节未用(必须为0)+ 产生差错的IP数据报首部(包含任何选项)+ 原始IP数据报中数据部分的前8字节

    以UDP端口不可达返回的ICMP差错报文为例: ICMP差错报文 = 8字节ICMP首部 + 20字节产生差错的IP数据报首部(包含任何选项)+ 8字节UDP首部

    其中:UDP首部 = 16位源端口号 + 16位目的端口号 + 16位UDP长度 + 16位UDP检验和

    Processed: 0.036, SQL: 12