欢迎来到天天文库
浏览记录
ID:46613665
大小:74.00 KB
页数:4页
时间:2019-11-26
《TCPIP详解-卷一-协议-64ICMP时间戳请求与应答》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、TCPIP详解-卷一-协议-6・4ICMP时间戳请求与应答6.4ICMP时间戳请求与应答ICMP时间戳请求允许系统向另一个系统杳询当前的时间。返冋的建议值是自午夜开始计算的毫秒数,协调的统一时间(CoordinatedUniversalTime,UTC)(早期的参考手册认为UTC是格林尼治时间)。这种TCMP报文的好处是它提供了毫秒级的分辨率,而利用具他方法从别的主机获取的时间(如某些Unix系统捉供的rdate命令)只能提供秒级的分辨率。由于返回的时间是从午夜开始计算的,因此调用者必须通过其他方法获知当时的口期,这是它的一个缺陷。ICMP时间戳请求和应答报文格式如图6-6所示。(13类
2、型或14)标识符发起时间戳接收时间戳传送时间戳(0)代码检验和序列号20字节图6-6ICMP时间戳请求和应答报文请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。但是,实际上,大多数的实现把后面两个字段都设成相同的值(提供三个字段的原因是可以让发送方分别计算发送请求的吋间和发送应答的时间)。6.4.1举例我们可以写一个简单程序(取名为icmptime),给某个主机发送ICMP时间戳请求,并打卬出返回的应答。它在我们的小互联网上运行结果如下:程序打印出ICMP报文中的三个时间戳:发起时间戳(orig)、接收时间戳(recv)以及发送时间戳
3、(xmit)o正如我们在这个例子以及下面的例子中所看到的那样,所冇的主机把接收时间戳和发送时间戳都设成相同的值。我们还能计算出往返时间(rtt),它的值是收到应答时的时间值减去发送请求时的时间值。difference的值是接收时间戳值减去发起时间戳值。这些值Z间的关系如图6-7所示。传送接收发起请求应答图6-7icmptime程序输出的值之.间的关系如果我们相信RTT的值,并月•相信RTT的一半用于请求报文的传输,另一半用于应答报文的传输,那么为了使本机时钟-与查询主机的时钟一致,木机时钟需耍进行调整,调整值是difference减去RTT的一半。在前面的例子中,bsdi的时钟比sun的
4、时钟要慢7ms和8mso由于时间戳的值是口午夜开始计算的毫秒数,即UTC,因此它们的值始终小于86400000(24X60X60X1000)o这些例子都是在下午4:00以前运行的,并且在一个比UTC慢7个小时的时区,因此它们的值比82800000(2300小时)要大是有道理的。如果对主机bsdi重复运行该程序数次,我们发现接收时间戳和发送时间戳的最后一位数总是0。这是因为该版本的软件(0.9.4版)只能提供10ms的时间分辨率(说明参见附录B)。如果对主机svr4运行该程序两次,我们发现SVR4时间戳的最后三位数始终为0:wq%lcwclMbodl■835733)0,xalt■rtCw2
5、cadifference«w0un令laaptdLftQteU<«Lg■e3577M7,rec*・刑gsuit=rtt■2mdlffaroieA=>7bh由于某种原因,SVR4在ICMP时间戳中不提供毫秒级的分辨率。这样,対秒以下的时间差调整将不起任何作用。如果我们对子网140.252.1上的其他主机运行该程序,结果表明其中一台主机的时钟与sun相差3.7秒,而另一个主机时钟相差近75秒:另一个令人感兴趣的例子是路由gateway(—个Cisco路由器)。它表明,当系统返回一个非标准时间戳值时(不是自午夜开始计算的毫秒数,UTC),它就用32bit时间戳中的高位來农示。我们的程序证明了一
6、点,在尖括号中打印出了接收和发送的时间戳值(在关闭高位Z后)。另外,不能计算发起时间戳和接收时间戳Z间的时间差,因为它们的单位不一致。如果我们在这台主机上运行该程序数次,会发现时间戳值显然具有毫秒级的分辨率,而月•是从某个起始点开始计算的毫秒数,但是起始点并不是T夜UTC(例如,可能是从路由器引导时开始计数的毫秒数)。作为最后一个例子,我们來比较sun主机和另一个已知是准确的系统时钟一-•个NTPstratuml服务器(下面我们会更多地讨论NTP,网络时间协议)。如果我们把difference的值减去RTT的一半,结果表明sun主机上的时钟要快3&5~51.5mso6.4.2另一种方法还
7、可以用另一种方法来获得时间和H期。1)在1.12节中描述了日期服务程序和时间服务程序。前者是以人们可读的格式返冋当前的时间和日期,是一行ASCII字符。可以用telnet命令来验证这个服务:另一方面,时间服务程序返回的是一个32bit的二制进数值,表示口UTC,1900年1月1日午夜起算的秒数。这个程序是以秒为单位提供的日期和吋间(前而我们提过的rdato命令使用的是TCP时间服务程序)。2)严格的计时器使用网络时间协议(NTP),
此文档下载收益归作者所有