什么时候在ICMP协议中使用'Timestamp'和'Timestamp Reply'?

网络工程 ipv4 第3层 国际会议
2021-07-22 03:26:00

我通过 Wireshark 应用程序在我的笔记本电脑中启动了数据包捕获。现在通过 cmd,我 ping 了一些服务器(比如 www.google.com)。我停止了数据包捕获并分析了与 ping 操作相对应的捕获数据包。

数据包捕获看起来像-

在此处输入图片说明

我只看到“回声请求”和“回声响应”对!

我期待 ping 实用程序也将使用“Timestamp”和“Timestamp Reply”类型来测量 RTT 值。我猜想 ping 实用程序将以全状态方式计算 RTT,通过记住哪个数据包是在什么时间发送的,并考虑该数据包被接收回来的时间。

那么,在那种情况下,我们在什么情况下使用 - 'Timestamp' 和 'Timestamp Reply' 类型的 ICMP 数据包?或者,我们如何生成一个?

3个回答

ping如您所见,通常的命令使用 ECHO REQUEST 和 ECHO REPLY。它确实在本地跟踪发送时间并与传入回复匹配以确定往返时间。

TIMESTAMP 和 TIMESTAMP REPLY 非常罕见,许多站点根本不回答,因为许多系统管理员认为这是一个安全问题,尽管很小。数据包的目的是将出程时间、远端处理时间和回程时间分开。 ICMP一般情况下,它会受到干预路由器的各种操作和阻塞,因此如果您在无法控制的网络上使用它,则很难读取结果。

送他们,你可以使用一个工具,如npingnmap的工具集。它可用于各种奇特的类 ping 测试。

nping --icmp --icmp-type 13 www.google.com

www.google.com 不会回复这些,但您的数据包捕获将显示它们正在发送。

ICMP 时间戳的使用是可选的,可以实现,也可以不实现。您可能会发现许多主机或网络设备没有实现此选项。RFC 1812 解释说 NTP 是同步时钟的更好选择。

RFC 1122,互联网主机要求——通信层

(e) 时间戳选项

生成和处理时间戳选项的实现是可选的。如果实施,则适用以下规则:

  • 始发主机必须在 Timestamp 选项中记录时间戳,其 Internet 地址字段未预先指定或其第一个
    预先指定的地址是主机的接口地址。
  • 在将选项传递给传输层或 ICMP 进行处理之前,目标主机必须(如果可能)将当前时间戳添加到时间戳选项。
  • 时间戳值必须遵循第 3.2.2.8 节中为 ICMP 时间戳消息给出的规则。
  • 和 -

3.2.2.8 时间戳和时间戳回复:RFC-792

主机可以实现时间戳和时间戳回复。如果它们被实施,则必须遵循以下规则。

ICMP 时间戳服务器函数向收到的每个时间戳消息返回时间戳回复。如果这个函数被实现,它应该被设计为延迟的最小可变性(例如,在内核中实现以避免调度用户进程的延迟)。

Timestamp的以下情况按照ICMP Echo对应的规则处理:

  • 发往 IP 广播或 IP 多播地址的 ICMP 时间戳请求消息可能会被静默丢弃。

ICMP 时间戳回复中的 IP 源地址必须与相应时间戳请求消息的特定目标地址相同。

  • 如果在 ICMP Echo Request 中接收到 Source-route 选项,则必须反转返回路由并用作
    Timestamp Reply 消息的 Source Route 选项
  • 如果在时间戳请求中接收到记录路由和/或时间戳选项,则该(这些)选项应该更新以包含当前主机并包含在时间戳回复消息的 IP 标头中。
  • 传入的时间戳回复消息必须向上传递到 ICMP 用户界面。

时间戳值(“标准值”)的首选形式是自世界时间午夜起以毫秒为单位。但是,可能难以以毫秒级分辨率提供此值。例如,许多系统使用仅以线路频率(每秒 50 或 60 次)更新的时钟。因此,在“标准值”中允许有一定的纬度:

(a) “标准值”必须每秒至少更新 15 次(即,值的最多 6 个低位可能未定义)。

(b) “标准值”的准确度必须接近操作员设置的 CPU 时钟的准确度,即在几分钟内修正。

RFC 1812,IP 版本 4 路由器的要求

(e) 时间戳选项

路由器可以支持由路由器产生的数据报中的时间戳选项。以下规则适用:

o 当发起包含时间戳选项的数据报时,路由器必须在选项中记录时间戳,如果

  • 其 Internet 地址字段未预先指定或
  • 它的第一个预先指定的地址是发送数据报的逻辑接口的 IP 地址(如果数据报通过未编号的接口发送,则是路由器的路由器 ID)。

o 如果路由器本身接收到包含时间戳选项的数据报,则路由器必须在将选项传递给传输层或 ICMP 进行处理之前,将当前时间插入时间戳选项(如果选项中有空间可以这样做)。如果空间不存在,路由器必须在选项中增加溢出计数。

o 时间戳值必须遵循 [INTRO:2] 中定义的规则。

执行

为了最大化时间戳选项中包含的时间戳的效用,插入的时间戳应该尽可能接近于数据包到达路由器的时间。对于由路由器发起的数据报,插入的时间戳应该尽可能接近实际,数据报被传递到链路层进行传输的时间。

时间戳选项允许使用非标准时钟,但使用非同步时钟会限制时间戳的效用。因此,建议路由器实施网络时间协议以同步其时钟。

您可以编写自己的应用程序来使用时间戳(假设您的设备支持此选项)。否则,产品或资源推荐在这里是题外话。

根据 RFC:https : //www.ietf.org/rfc/rfc0792.txt

**消息中收到的数据(时间戳)在回复中与附加时间戳一起返回。时间戳是从 UT 午夜开始的 32 位毫秒。**

所以我不知道它有什么用处,但它不是必需的,也不是用于回声。

由于回声请求和回声回复数据包包含一个序列号,因此不需要状态识别来跟踪回复。