1

我不知道发生了什么,但每次我输入以下命令:

Test-Connection -ComputerName TARGET -TimeToLive 6

我收到以下错误:

Test-Connection : Testing connection to computer 'TARGET' failed: Problem with some part of the filterspec or providerspecific buffer in general
At line:1 char:16
+ Test-Connection <<<<  -ComputerName TARGET -TimeToLive 6
    + CategoryInfo          : ResourceUnavailable: (TARGET:String) [Test-Connection], PingException
    + FullyQualifiedErrorId : TestConnectionException,Microsoft.PowerShell.Commands.TestConnectionCommand

有趣的是,如果我没有-TimeToLive参数,例如:

Test-Connection -ComputerName TARGET
Test-Connection -ComputerName TARGET -Count 2

命令按预期工作!并且Get-Help Test-Connection诱人地表明这-TimeToLive确实一个有效的参数。

我哪里做错了?

4

3 回答 3

2

每个发出的 IP 数据包都有一个 TTL 字段,该字段设置为相对较高的数字(在 LAN 中 ping 的情况下为 128)。当数据包穿越网络时,TTL 字段会随着它经过的每个路由器而减一;当 TTL 降为 0 时,该数据包被路由器丢弃。IP 规范说 TTL 应该设置为 60(虽然它是 255 用于 ping 数据包)。这样做的主要目的是使数据包不会在网络上永远存在,并且最终会在被视为“丢失”时死亡。

在您的 LAN 中,6 的 TTL 可能不足以到达目的地。

在我的环境中,两跳子网上只有 1 个 ping 的 TTL 会返回您的错误,这是正确的,我只有一个用于多个 vlan 的核心路由器/交换机和一个本地路由器,每个不同的子网/域。

于 2012-06-25T09:09:19.140 回答
1

这个答案是基于我自己的实验。如果我错了,请告诉我。
这个答案借鉴了CB.'s有用的答案

tl;博士

  • -TimeToLive,尽管Test-Connection文档说了什么(仍然是 PSv5.1 以及GitHub [1]上的源代码存储库 ),但不是以秒为单位的超时,而是数据包在被视为过期之前可以进行的最大跳数.

    • 因此,它类似于ping.exe's-i <TTL>参数。
    • Test-Connection-TimeToLive- -的默认值80提供了一个线索,表明它不是以为单位的超时,因为它会过高。
    • Test-Connection没有等效于ping.exe的真正基于时间的-w <ms>超时参数。
  • 在这种情况下 ( )中的模糊错误消息很可能源于传输中已过期的数据包,因为 TTL(跳数限制)值较低。problem with some part of the filterspec or providerspecific buffer in general

    • ping.exeTTL expired in transit会报告在该事件中更有帮助。

TTL(生存时间)在实践中是用词不当,正如Wikipedia告诉我们的那样(强调我的),IPv6 中已经纠正了这个问题:

理论上,在 IPv4 下,生存时间以为单位,尽管每个传递数据报的主机都必须将 TTL 至少减少一个单位。在实践中,TTL 字段在每一跳都减少一个为了反映这种做法,该字段在 IPv6中被重命名为hop limit

因此,可以理解围绕 TTL 真正代表的含义出现混淆,但不幸的是,Test-Connection文档中的错误信息多年来一直没有得到纠正。


[1] 我在那里打开了一个问题来跟踪问题。

于 2016-07-16T05:25:02.903 回答
-1

好的,经过几个星期的不间断工作,我昨晚在回家前重新启动了我的笔记本电脑。

今天早上,-TimeToLive再次惊人地工作!

所以,我“无法使用”的主要-TimeToLive问题已经解决了......

...但我仍然想知道,以前发生了什么-TimeToLive导致错误...

于 2012-06-26T05:20:43.617 回答