Traceroute


Linux系統上的traceroute命令

traceroute,Linux系統稱為tracepath,Windows系統稱為tracert,是一種電腦網絡工具。它可顯示封包在IP網絡經過的路由器IP位址

原理

程式是利用增加存活時間(TTL)值來實現其功能的。每當封包經過一個路由器,其存活時間就會減1。當其存活時間是0時,主機便取消封包,並傳送一個ICMP TTL封包給原封包的發出者。

程式發出的首3個封包TTL值是1,之後3個是2,如此類推,它便得到一連串封包路徑。注意IP不保證每個封包走的路徑都一樣。

實現

主叫方首先發出 TTL=1 的數據包,第一個路由器將 TTL 減1得0后就不再繼續轉發此數據包,而是返回一個 ICMP 逾時報文,主叫方從逾時報文中即可提取出數據包所經過的第一個閘道器位址。然後又發出一個 TTL=2 的 ICMP 數據包,可獲得第二個閘道器位址,依次遞增 TTL 便獲取了沿途所有閘道器位址。

需要注意的是,並不是所有閘道器都會如實返回 ICMP 超時報文。出於安全性考慮,大多數防火墻以及啓用了防火墻功能的路由器缺省配置為不返回各種 ICMP 報文,其餘路由器或交換機也可被管理員主動修改配置變為不返回 ICMP 報文。因此 Traceroute 程式不一定能拿全所有的沿途閘道器位址。所以,當某個 TTL 值的數據包得不到響應時,並不能停止這一追蹤過程,程式仍然會把 TTL 遞增而發出下一個數據包。一直達到預設或用參數指定的追蹤限制(maximum_hops)才结束追蹤。

依據上述原理,利用了 UDP 數據包的 Traceroute 程式在數據包到達真正的目的主機時,就可能因為該主機沒有提供 UDP 服務而簡單將數據包抛棄,並不返回任何信息。爲了解決這個問題,Traceroute 故意使用了一個大於 30000 的端口號,因 UDP 協定規定端口號必須小於 30000[來源請求] ,所以目標主機收到數據包后唯一能做的事就是返回一個“端口不可達”的 ICMP 報文,於是主叫方就將端口不可達報文當作跟蹤結束的標誌。

除了使用 UDP 外,也有使用TCP代替的实现方法。

歷史

根據traceroute的man page:1987年,Steve Deering建議Van Jacobson寫一個這樣的程式。C. Philip Wood、Tim Seaver和Ken Adelman為這個程式提供一些意見或改動。

Windows NT系統有結合ping和traceroute的pathping工具。

外部連結

  • 線上traceroute工具(页面存档备份,存于互联网档案馆
  • TRACEROUTE6.net(页面存档备份,存于互联网档案馆): 在亚洲区含IPv4 和 IPv6 的線上traceroute工具
  • (英文) Traceroute test
  • 在线Traceroute路由器追踪工具[永久失效連結]
文件系統
  • cat
  • cd
  • chmod
  • chown
  • chgrp
  • cksum
  • cmp
  • cp
  • dd
  • du
  • df
  • file
  • fsck
  • fuser
  • ln
  • ls
  • mkdir
  • mount
  • mv
  • pax英语pax (Unix)
  • pwd
  • rm
  • rmdir
  • size
  • split
  • stat
  • tee
  • touch
  • type英语type (Unix)
  • umask英语umask
程序
  • at
  • bg
  • chroot
  • cron
  • fg
  • kill
  • killall英语killall
  • nice
  • pgrep
  • pkill英语pkill
  • ps
  • pstree英语pstree
  • time
  • top
用户环境
  • clear
  • env
  • exit
  • history英语history (Unix)
  • id
  • logname
  • mesg英语mesg
  • passwd
  • su
  • sudo
  • uptime
  • talk英语talk (software)
  • tput英语tput
  • uname
  • w
  • wall英语wall (Unix)
  • who
  • whoami
  • write英语write (Unix)
文本编辑
  • awk
  • banner英语banner (Unix)
  • basename
  • comm英语comm
  • csplit英语csplit
  • cut
  • diff
  • dirname
  • ed
  • ex
  • fmt英语fmt
  • fold英语fold (Unix)
  • head英语head (Unix)
  • iconv
  • join英语join (Unix)
  • less
  • more
  • nl英语nl (Unix)
  • paste英语paste (Unix)
  • sed
  • sort英语sort (Unix)
  • spell英语spell (Unix)
  • strings英语strings (Unix)
  • tail
  • tr
  • uniq英语uniq
  • vi
  • wc
  • xargs
壳层内建
网络
查找
文档
  • apropos英语apropos (Unix)
  • help英语help (command)
  • man
软件开发
杂项
  • bc
  • cal
  • dc
  • expr
  • lp英语lp (Unix)
  • lpr
  • sleep
  • true和false
  • yes
文件管理导航
文件管理操作
  • attrib英语ATTRIB
  • cacls
  • cipher
  • compact
  • copy
  • del英语del (command) (erase)
  • deltree英语deltree
  • expand
  • icacls
  • makecab
  • md (mkdir)
  • move英语move (command)
  • rd (rmdir)
  • recover英语recover (command)
  • ren英语ren (command) (rename)
  • replace英语replace (command)
  • Rmdir
  • robocopy英语robocopy
  • xcopy英语XCOPY
磁盘管理
  • chkdsk
  • convert英语convert (command)
  • defrag
  • diskcomp英语diskcomp
  • diskcopy英语diskcopy
  • diskpart英语diskpart
  • fdisk英语fdisk
  • format英语Format (command)
  • label英语label (command)
  • subst英语SUBST
  • scandisk
  • sys英语SYS (command)
  • vol英语vol (command)
  • vssadmin
进程
  • exit
  • kill
  • powercfg英语powercfg
  • runas
  • sc
  • shutdown
  • start英语start (command)
  • taskkill
  • tasklist英语tasklist
注册表
用户环境
  • date
  • mode
  • path
  • set
  • setx
  • time英语TIME (command)
  • title
  • ver英语ver (command)
  • Whoami
文件内容
  • comp英语comp (command)
  • edit英语MS-DOS Editor
  • edlin英语edlin
  • fc英语Microsoft File Compare
  • find英语find (command)
  • findstr
  • print英语PRINT (command)
  • type英语TYPE (DOS command)
脚本
  • choice英语choice (command)
  • clip
  • cscript
  • doskey英语DOSKEY
  • echo
  • for
  • Goto
  • if
  • more
  • pause
  • prompt英语Command-line_interface#Command_prompt
  • rem
网络
维护
启动管理
软件开发
杂项
  • cls
  • help英语help (command)