『TCP/IP详解——卷一:协议』读书笔记——16
2013-08-26 22:50:54
- 6.4 ICMP时间戳请求与应答
ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数(协调的统一时间,Coordinated Universal Time, UTC——早期手册上说这是格林尼治)。这种ICMP报文的好处是提供毫秒级的分辨率,而利用其他方法从别的主机获取的时间(如Unix的rdate命令)只能提供秒级的分辨率。同样这也有意个缺陷,就是不知道日期。
ICMP时间戳请求和应答报文格式如上图,请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。但是,实际上,大多数的实现把后面两个字段都设成相同的值(提供三个字段的原因是可以让发送方分别计算发送请求的时间和发送应答时间)。
- 6.4.1 举例
由于书上的例子有主机系统的干扰因素存在,我们只用最后一个和NTP stratum 1服务器(提供准确系统时钟)通信的传输来说明:
程序的输出结果中:orig表示发起时间戳、recv表示接受时间戳、xmit表示传送时间戳、rtt表示往返时间(主机发送ICMP时间戳请求报文的时间-收到应答报文的时间,见上图。我们可以理想的认为传送时间为rtt/2)、difference等于接受时间戳减去发起时间戳。根据程序的输出结果,我们可以利用公式:本机系统时间调整值 = difference - rtt / 2。
- 6.4.2 其他方法
1. telnet host daytime
2. 网络时间协议(NTP)
3. 分布式时间服务(DTS)
4. Unix的系统函数timed(8),来同步局域网内的系统时钟。(我的Ubuntu木有怎么办。。)