我不知道发生了什么,但每次我输入以下命令:
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
确实是有效参数。
我哪里出错了?
答案 0 :(得分:2)
发出的每个IP数据包都有一个TTL字段,该字段设置为相对较高的数字(在LAN中ping的情况下为128)。当数据包遍历网络时,每个路由器经过的TTL字段减少一个;当TTL下降到0时,路由器丢弃该数据包。 IP规范说TTL应设置为60(尽管ping数据包为255)。这样做的主要目的是使数据包不会永远存在于网络中,并且当它被认为“丢失”时最终会死亡。
在您的局域网中,可能无法使用TTL为6来到达目的地。
在我的环境中,在两跳子网上只有1次ping的TTL会返回错误,而且是正确的,我只有一个核心路由器/交换机用于多个vlan,本地路由器每个不同的子网/域。
答案 1 :(得分:1)
这个答案是基于我自己的实验。如果我错了,请告诉我 这个答案依据CB.'s helpful answer。
<强> TL;博士强>
-TimeToLive
,尽管Test-Connection
documentation说的是什么(仍然是PSv5.1和also in the source-code repository on GitHub [1]
),秒中的超时,但数据包在被视为过期之前可以进行最大跳数 。
ping.exe
&n; -i <TTL>
参数。Test-Connection
-TimeToLive
的默认值 - 80
- 提供 超时秒< / em>,因为那会过高。Test-Connection
不等同于ping.exe
真正基于时间的-w <ms>
超时参数。在这种情况下,模糊错误消息(problem with some part of the filterspec or providerspecific buffer in general
)很可能源于传输过期的数据包,因为TTL较低 (跳数限制)值。
ping.exe
会在该事件中报告更有帮助的TTL expired in transit
。TTL(时间 -to-Live)在实践中是一个用词不当 ,这是一个已在IPv6中得到纠正的问题,如Wikipedia告诉我们(强调我的):
理论上,在IPv4下,生存时间是在秒 中测量的,尽管每个传递数据报的主机必须减少TTL至少一个单位。 在实践中,TTL字段每一跳减少一个。为了反映这种做法,字段重命名为 IPv6中的跃点限制 。
虽然可以理解的是,围绕TTL真正代表的问题引起了混淆,但遗憾的是,Test-Connection
文档中的错误信息多年来一直没有得到纠正。
[1]我已经打开an issue there来跟踪问题。
答案 2 :(得分:-1)
好的,经过几个星期的不间断工作,我在回家之前的昨晚重启了我的笔记本电脑。
今天早上,令人惊讶的是-TimeToLive
再次发挥作用!!
所以,我的主要“无法使用-TimeToLive
”的问题已经解决了......
...但我仍然想知道,-TimeToLive
导致错误之前发生了什么......