TTL:(Time To Live ) 生存时间,是指定数据包被路由器丢弃之前允许通过的网段数量,也就是说这个ping的数据包能在网络上存在多少时间。
当我们对网络上的主机进行ping操作的时候,我们本地机器会发出一个数据包,数据包经过一定数量的路由器传送到目的主机,但是由于很多的原因,一些数据包不能正常传送到目的主机,那如果不给这些数据包一个生存时间的话,这些数据包会一直在网络上传送,导致网络开销的增大。当数据包传送到一个路由器之后,TTL就自动减1,如果减到0了还是没有传送到目的主机,那么就自动丢失。
被自动丢弃的包,也就像我们ping的时候出现Request timed out的情况了,这时就是采用增加TTL的方法来减少数据包无目的的游荡而增加网络资源的消耗。
默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的TTL值为128,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。(这个是从网络上找到的),曙光博客的目的主机是采用FreeBSD系统的,在这里可能TTL值是64,而不是UNIX主机的255,所以在从我这里到目的主机经过了64-51=13个路由。当我们不知道目的主机的操作系统的时候我们可以根据TTL来猜测,但是不一定100%准确,如果目的主机是windows,但是经过了比如75个路由器,那么TTL的返回值是128-75=53,那么你可能认为这个目的主机是Linux系统,但是一般不会经过那么多的路由器,所以通过TTL来判断目的主机的操作系统还是有一定的依据的。
使用PING时涉及到的 ICMP 报文类型
一个为ICMR请求回显(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