雏鹰部落

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2876|回复: 6

[讨论/求助] 关于TTL问题的求助

[复制链接]
发表于 2010-3-3 21:52:19 | 显示全部楼层 |阅读模式
有人说TTL代表数据的生存周期,每经一跳TTL值减一
WINDOWS系统默认TTL值为128
问题:主机PING 自己的IP地址 TTL值为128
       可是当我PING 我的默认网关时TTL值为64
       按理说下一跳为网关 减一  应该为127 ~~~~~~求解~
发表于 2010-3-4 08:58:49 | 显示全部楼层
已经向我们的TS团队传递信息,相信很快能给您个答复!
发表于 2010-3-4 14:26:45 | 显示全部楼层
本帖最后由 kkingkill 于 2010-3-4 14:40 编辑

这个问题确定很有意思
按正常理解:每经一跳TTL值减一
那为什么ping自己是TTL=128,而ping 网关却是TTL=64.
首先,先引用一段资料:
TTL通常表示包在被丢弃前最多能经过的路由器个数。当记数到0时,路由器决定丢弃该包,并发送一个ICMP报文给最初的发送者。
  TTL:(Time To Live ) 生存时间
  指定数据包被路由器丢弃之前允许通过的网段数量。
  TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。
  使用PING时涉及到的 ICMP 报文类型
  一个为ICMP请求回显(ICMP Echo Request)
  一个为ICMP回显应答(ICMP Echo Reply)
  TTL 字段值可以帮助我们识别操作系统类型。
  UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255
  Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64
  微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128
  微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32
  当然,返回的TTL值是相同的
  但有些情况下有所特殊
  LINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64
  FreeBSD 4.1, 4.0, 3.4;  Sun Solaris 2.5.1, 2.6, 2.7, 2.8;
  OpenBSD 2.6, 2.7,
  NetBSD
  HP UX 10.20
  ICMP 回显应答的 TTL 字段值为 255
  Windows 95/98/98SE
  Windows ME
  ICMP 回显应答的 TTL 字段值为 32
  Windows NT4 WRKS
  Windows NT4 Server
  Windows 2000
  Windows XP
  ICMP 回显应答的 TTL 字段值为 128
  这样,我们就可以通过这种方法来辨别操作系统
  TTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的255。
      请注意以上红字部分:
     windows NT/2K/XP使用的TTL=128
     freesBSD使用的TTL=255
     linux使用的TTL=64
     而市场上使用的宽带路由器基本上都是使用uClinux,uclinux是嵌入式Linux的一个分支,所以,TTL也应该是64。
     (关于uClinux,有兴趣可以http://user.qzone.qq.com/309169119?ptlang=2052)
     第二点,ICMP包分为两种:request和reply.  request是你ping别人,而reply是别人响应你。
     以PC ping 网关为例。你发的request包里面的TTL=128(这个可以用wireshark抓包看到),但网关回复的reply包却是TTL=64.从这里我们可以隐约可以发现一个规则:跨平台时request和reply处理机制是不太一样的,并不是简单的把request中的TTL-1就是reply中的TTL。reply包是根据目标本身的默认TTL减去经过的跳数。
     故,如果你ping 目标是XP系统,则reply包中的TTL是128-跳数.如果你ping的目标是linux系统,则reply包中的TTL是64-跳数。
     这也就解释了为什么你ping LAN内部是返回的TTL=128.(XP系统),而ping 网关TTL=64.(宽带路由器是uclinux系统)。
     你可以进一步研究router的TTL。可以把PC与router桥接(模拟器)。PC上ping router,会发现request中的TTL=128,而reply中TTL=255。
     所以,我们可以利用这点规则来基本判断你ping的目标使用的操作系统(当然,如果目标默认TTL改了就无法判断了)。

     在我的电脑上我ping www.google.cn,返回的TTL=246,所以,我猜使用的可能是router或freebsd。
     然后再ping www.qq.com,返回的TTL=58,所以可能是linux。
     当然,以上只是我的个人见解,没有严格的理论依据。
发表于 2010-3-4 14:49:29 | 显示全部楼层
本帖最后由 graysky 于 2010-3-4 14:53 编辑


我们看到,图上是和你描述不同的结果

首先,有一个关键点就是不同系统的ICMP协议的默认初始TTL值是不同的(所以,有通过ping来测试操作系统的方法)
以下是XP中修改TTL值的注册表项

假设默认TTL设为64
那么如果两台同样配置的PC直连
PC1————PC2
互ping的时候,反馈TTL值是什么呢?
是默认值,还是默认值-1呢?

如果两台能过路由器连接的PC互ping
PC1————R————PC2
反馈的TTL值又是多少呢?

PC机ping网关所得的TTL值应该是网关设备的默认TTL默认值,而ping自己的得到的是自己的TTL默认值(因为中间没有经过其他设备)。
这也就是你问的问题(PC的默认TTL为128,而网关为64)

另外上面两个情况的答案分别是64,63

以上是我的理解

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 楼主| 发表于 2010-3-4 22:17:04 | 显示全部楼层
明白了~谢谢~~~~~~`
发表于 2010-3-4 23:06:12 | 显示全部楼层
如果两台能过路由器连接的PC互ping
PC1————R————PC2
反馈的TTL值又是多少呢?

PC机ping网关所得的TTL值应该是网关设备的默认TTL默认值,而ping自己的得到的是自己的TTL默认值(因为中间没有经过其他设备)。
这也就是你问的问题(PC的默认TTL为128,而网关为64)
另外上面两个情况的答案分别是64,63

以上是我的理解
________________
更正一下
答案应该是64,127

另外这个如果是在家里用路由器模拟,那得到的结果一定是64,128
?
家用路由器几个口一般都是同一网段的,虽然中间串了一个路由器,但并没有跨过路由器,到达下一跳
发表于 2010-3-6 00:34:22 | 显示全部楼层
如果两台能过路由器连接的PC互ping
PC1————R————PC2
反馈的TTL值又是多少呢?

PC ...
keybird 发表于 2010-3-4 23:06



如果可以稍微注意一下我上面所描述的条件细节可以发现

后面一个答案是63 还是127关键在于默认TTL倒底是64还是128

由具体系统和相关设置决定....

请根据具体情况判定,不可随意套用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|熊猫同学技术论坛|小黑屋| 网络工程师论坛 ( 沪ICP备09076391 )

GMT+8, 2024-9-29 03:30 , Processed in 0.078951 second(s), 19 queries , Gzip On.

快速回复 返回顶部 返回列表