参考:
https://download.csdn.net/download/qq_31567335/10213200
这章内容不算难,没有产生啥自己的笔记,记一遍只是为了加深印象。ICMP经常被认为是 IP层的一个组成部分,用来传递差错报文以及其他需要注意的信息。ICMP报文通常被 IP层或更高层协议(TCP或UDP)使用 。
ICMP报文被封装在IP报文中,格式如下:
ICMP报文的格式如下:
ICMP报文类型:
ICMP地址请求掩码与应答:
用于无本地存储介质的系统在启动的时候查询子网掩码。
报文格式:
ICMP时间戳请求和应该报文
I C M P时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,协调的统一时间。这种ICMP报文的好处是它提供毫秒级别的精度,但是这也依赖于它请求的主机。缺陷是必须通过其他方法获得日期。
报文格式:
时间差值计算公式:
receivedTime-RTT/2-orginateTime
节末提到有一种更精确的实现方式,ntp(netword time protocol) RFC1305.
ICMP端口不可到达差错报文
UDP有一个规则是,如果接收到一个UDP报文,但是并没有任何程序在使用这个报文的目标端口,那么UDP就会回发一个ICMP端口不可达差错报文。
UDP包产生的差错报文格式如下:
在这个例子中,ICMP数据报中的内容:产生差错报文的IP头(20字节)+IP数据报文的前8个字节(udp首部),收到差错报文的主机就可以从ip头中知道用什么协议来解析后面的报文。解析报文可以得知是哪个程序发送的报文出错了,从而上报给相应的程序。
ICMP端口不可达报文格式: