⚡ 本文重點
- 文章屬性:科技冷知識 / 網路原理
- 核心結論:128 與 64 各有官方出處,但 Microsoft 文件之間說法不一(128 與 32),也沒交代選 128 的理由;預設值又能修改,用 TTL 猜對方系統只能粗估
- 適用對象:在 ping 結果裡看到 TTL=128、TTL=64,好奇這個數字代表什麼的人
📌 快速答案
一句話答案:Ping TTL 欄位是 IP 封包的存活上限,每經過一台路由器減 1、歸零就被丟棄;Windows 預設初始值 128、Linux 預設 64,ping 顯示的是封包抵達時剩下的數字。
– TTL 是 IPv4 標頭裡的 8 位元欄位,上限 255;RFC 791 原本以秒計,但規定每經手一次至少減 1,實務上成了跳數上限
– 回覆封包的初始 TTL 由對方主機決定,所以能拿來粗估對方系統,但預設值可以修改,不能當成證據
– Windows 的 128 出自 Microsoft 的 Set-NetIPv4Protocol 文件,另一份 WMI 方法文件卻寫 32,自己的電腦可用 Get-NetIPv4Protocol 確認
🔍 故事的起點
在命令提示字元打 ping,每一列回覆最後都會跟著一個 TTL=數字。這個 Ping TTL 欄位很少有人特別去查,Microsoft 自家的 ping 說明文件,範例輸出就是「time=101ms TTL=124」這種格式。網路上常見的說法是「TTL 128 是 Windows、64 是 Linux」,但這兩個數字從哪裡來、那句說法準不準,很少有人追到原始文件。
TTL 的規則寫在 RFC 裡。RFC 是網際網路技術規格文件系列,現由 IETF 等單位透過 RFC Editor 發布,IPv4 的規格就是 RFC 791。各家作業系統再依這些規格,自己決定送出封包時 TTL 要從多少開始算。
本文依 RFC 原文、IANA 登記表,以及 Microsoft 與 Linux 核心的官方文件,拆解三件事:TTL 為什麼會一路遞減、Windows 128 與 Linux 64 各寫在哪份文件,以及用 TTL 猜對方系統時最容易誤判的地方。Linux 的 ping 說明文件就寫明,遠端主機回覆時不一定照常規填 TTL。
🧪 原理拆解
一個封包的 TTL 會經過三個階段:發送端填入初始值、沿途每台路由器減 1、歸零時被丟棄。

TTL 原本以秒計,實務上變成跳數上限
TTL(Time to Live,存活時間)是 IPv4 標頭裡的 8 位元欄位,由發送端填入,用來限制封包能在網路上存在多久。 RFC 791 規定它以秒為單位,值為 0 時封包必須銷毀,上限是 255 秒;同一份規格也要求每個處理封包的節點至少把 TTL 減 1,就算處理時間不到一秒也一樣。
所以封包每經過一台路由器,TTL 就少 1,很少真的照秒數扣。Microsoft 的 tracert 文件也寫明,每台路由器轉送前至少要把 TTL 減 1,並直接把 TTL 形容為最大鏈路計數器(maximum link counter)。RFC 791 說明這個設計的目的,是讓送不到的封包最後會被丟掉,也為封包能存在多久設下上限。
歸零之後:丟棄並回報 Time Exceeded
路由器發現 TTL 歸零就丟棄封包,並可以回傳一則 ICMP Time Exceeded 訊息給發送端。 RFC 792 定義這類訊息的 Type 是 11,Code 0 代表 time to live exceeded in transit,也就是傳送途中 TTL 用完。
tracert 就是靠這個機制畫出路徑。依 Microsoft 文件,tracert 先送 TTL 為 1 的封包,之後每次加 1,直到目的地回應或達到最大跳數(預設 30);沿途路由器回傳的 Time Exceeded 訊息,就是每一跳的位址。有些路由器不回這類訊息,那一跳就會顯示一列星號。
Windows ping 的 /i 參數可以指定送出封包的 TTL,文件寫明預設採用主機的預設 TTL,最大 255;Linux 的 ping 則用 -t 參數設定。ping 還有其他查問題用的參數,例如 /f 會在 IPv4 標頭設定不分割旗標,Microsoft 文件說它適合排查路徑 MTU 問題,實際做法可以看 有些網站開得了、有些死都打不開?MTU 與封包碎片的隱形問題。
IPv6 把它改名叫 Hop Limit
IPv6 沒有 TTL 欄位,對應的是 Hop Limit。 RFC 8200 定義 Hop Limit 是 8 位元的無號整數,每個轉送封包的節點減 1,收到時已是 0 或減到 0 就丟棄。規格也交代了改名的原因:IPv6 節點不需要強制執行封包的最長存活時間,所以 IPv4 的 Time-to-Live 欄位在 IPv6 改名為 Hop Limit。
為什麼 Windows 是 128、Linux 是 64
64 是 IANA 登記的建議預設值,Linux 採用這個值;Microsoft 文件寫的 Windows 預設是 128,但沒有說明為什麼選 128。 IANA 的 IP 參數登記表寫明,IP 目前建議的預設 TTL 是 64,並引用 RFC 791 與 RFC 1122。Linux 核心文件的 ip_default_ttl 條目寫明預設 64,註明這是依 RFC 1700 的建議;IPv6 的 hop_limit 預設同樣是 64。
Windows 這邊,Microsoft Learn 的 Set-NetIPv4Protocol 文件說明,DefaultHopLimit 決定 IP 介面寫進所有外送 IPv4 流量的 hop limit 值,預設 128;Windows XP 的 TCP/IP 參數文件,也把登錄值 DefaultTTL 的預設寫成 128。本文查到的 Microsoft 文件都沒有交代選 128 的理由,網路上流傳的說法對不到官方出處,這裡不採用。
| 系統或文件 | 預設初始值 | 出處 |
|---|---|---|
| IANA 建議值 | 64 | IANA IP 參數登記表 |
| Linux IPv4 TTL | 64 | 核心文件 ip_default_ttl |
| Linux IPv6 Hop Limit | 64 | 核心文件 hop_limit |
| Windows IPv4 TTL | 128 | Set-NetIPv4Protocol 文件 |
- 兩個預設值都在 RFC 791 定的上限 255 以內,Linux 核心文件寫明可設定的範圍是 1 到 255
- Microsoft 另一份 WMI 方法文件(SetDefaultTTL)把預設值寫成 32,與上表的 128 不一致,想知道自己電腦實際用多少,直接查最準
- Windows 可在 PowerShell 執行
Get-NetIPv4Protocol | Format-List -Property *,找輸出裡的 DefaultHopLimit;Linux 可讀取 /proc/sys/net/ipv4/ip_default_ttl 這個核心參數
用 TTL 猜對方系統:可以粗估,不能當證據
對方回覆封包的 TTL,大致等於對方的初始值減去回程經過的路由器數。 依 RFC 791 每經手一次減 1 的規則推算,看到 124 可以推測對方從 128 起跳、回程經過 4 個轉送點,看到 57 則可能是從 64 起跳;前提是對方用的是預設值。
Linux 的 ping 說明文件(TTL DETAILS 一節)提醒,遠端主機回覆時處理 TTL 的方式不只一種:有的沿用收到的值不改,有的一律設成 255,也有的設成其他數值,文件形容有些機器的數值相當隨意。再加上 Windows 與 Linux 的預設值都能由管理者修改,TTL 只能當線索,要確認對方是什麼系統,還得靠其他資訊。
💡 總結:冷知識延伸
ping 結果裡的 TTL 是回覆封包抵達時剩下的轉送額度,跟同一列的 time 值是兩回事。 Microsoft 的 ping 文件說明,ping 顯示的 time 是來回時間;TTL 只反映封包經過幾次轉送,數字大小不代表連線快慢。
想看封包實際走過哪些路由器,用 tracert 比從 TTL 反推直接;如果在意的是 ping 延遲忽高忽低,可以從排隊延遲這個方向查,做法見 Bufferbloat 緩衝膨脹造成 ping 延遲飆高的解法。
下次再看到 TTL=128 或 TTL=64,可以先想到它是對方的起跳值扣掉沿途轉送次數,再提醒自己這個起跳值可以被改。本文提到的預設值,都是 2026-10-04 依 RFC、IANA 與各家官方文件查證的結果。
❓ 常見問題
Q:Ping TTL 數字代表什麼?
代表回覆封包抵達你電腦時,還剩下多少轉送額度。封包從對方主機出發時帶著初始 TTL,每經過一台路由器減 1,ping 顯示的是扣完之後的數字。
Q:為什麼 Windows 是 128、Linux 是 64?
Linux 核心文件寫明預設 64,依據是 RFC 1700 的建議,IANA 目前登記的建議值也是 64。Microsoft 的 Set-NetIPv4Protocol 文件寫明 Windows 預設 128,但官方文件沒有說明選 128 的理由;Microsoft 另一份 WMI 方法文件寫的是 32,實際值可在 PowerShell 用 Get-NetIPv4Protocol 查。
Q:可以用 TTL 猜對方系統嗎?
可以粗估,不能當證據。回覆的 TTL 大致是對方初始值減去回程跳數,但 Linux 的 ping 說明文件提醒,遠端主機可能沿用收到的值、一律設成 255 或設成其他數值,而且 Windows 與 Linux 的預設值都能修改。
Q:TTL 歸零會發生什麼?
封包會被丟棄。依 RFC 792,處理封包的路由器發現 TTL 為 0 時必須丟棄,並可以回傳 Type 11 的 ICMP Time Exceeded 訊息給發送端,tracert 就是靠這些訊息找出每一跳的位址。
Q:IPv6 也有 TTL 嗎?
IPv6 的對應欄位叫 Hop Limit,同樣是 8 位元,每個轉送節點減 1、歸零就丟棄。Linux 核心文件寫明 IPv6 的 hop_limit 預設也是 64。
🔗 延伸閱讀
- 全家十台裝置為什麼只需要一個公開 IP?NAT 原理白話解說
- 127.0.0.1 為什麼代表自己?localhost 背後的 Loopback 原理
- 0.0.0.0 跟 127.0.0.1 有什麼不同?架 Server 最常搞錯的兩個位址
- Wi-Fi 顯示「無網際網路,安全」怎麼辦?從 DHCP 到 DNS 完整排查
📎 參考資料來源
📖 第一級|標準組織與廠商官方:
- RFC 791 Internet Protocol(RFC Editor) — 2026-10-04 查證
- RFC 792 Internet Control Message Protocol(RFC Editor) — 2026-10-04 查證
- RFC 8200 IPv6 Specification(RFC Editor) — 2026-10-04 查證
- Internet Protocol Version 4 (IPv4) Parameters(IANA) — 2026-10-04 查證
- IP Sysctl(Linux 核心文件) — 2026-10-04 查證
- ping(Microsoft Learn) — 2026-10-04 查證
- tracert(Microsoft Learn) — 2026-10-04 查證
- Set-NetIPv4Protocol(Microsoft Learn) — 2026-10-04 查證
- Get-NetIPv4Protocol(Microsoft Learn) — 2026-10-04 查證
- TCP/IP and NBT configuration parameters for Windows XP(Microsoft Learn) — 2026-10-04 查證
- SetDefaultTTL method of the Win32_NetworkAdapterConfiguration class(Microsoft Learn) — 2026-10-04 查證
📖 第二級|說明文件鏡像:
- ping(8),iputils 說明文件(man7.org) — 2026-10-04 查證
⚠️ 本文核心事實以第一級為準。
📅 本文查證戳記:2026-10-04 依據 RFC、IANA、Linux 核心文件與 Microsoft Learn 查證撰寫,內容整理自官方說明,未在實機上操作測試。
若你查到的預設值和本文不同,歡迎透過聯絡頁面回報。
