Ipv6

為什麼需要 IPv6 鄰居請求來獲取 MAC 地址?

  • December 19, 2018

我是一名軟體開發人員,剛剛在 Techdays 上獲得了一本關於 IPv6 的免費書籍,我正在閱讀這本書以獲得樂趣。他們放棄了它,因為它有點舊書(W2008),所以對於其他/較新的作業系統來說情況可能有所不同,但我不明白鄰居發現獲取 MAC 地址的必要性。

書上說,每個節點都會自動得到一個 Link-local IP 地址,它是由 MAC 地址通過FF-FE在第 3 和第 4 個字節之間插入並翻轉 U/L 位來構造的,因此 Link-local IP 為一個MAC 地址為的節點00-AA-00-3F-2A-1C變為FE80::2AA:FF:FE:3F:2A1C

為了確定鏈路層 MAC 地址,鄰居請求消息被發送到鏈路本地 IP 地址,該地址回复包含其 MAC 地址的消息……但是發送者已經知道,因為 MAC 被編碼在鏈路中 -本地 IP 地址。所以這聽起來像是寄明信片給詢問地址的人。

每個節點都會自動生成一個本地連結地址,但是:

  • 該地址可能不會使用RFC 2464中指定的 EUI-64 格式生成。IPv6 地址也可以是加密生成的地址 ( RFC 3972 )、臨時隱私地址 ( RFC 4941 ),或者在現代作業系統中,穩定的隱私地址 ( RFC 7217 )。
  • 由於管理員的明確配置,看起來具有 EUI-64 介面 ID 的地址實際上可能與指示的 MAC 地址不對應。

因為您不能只是將地址“轉換回”為 MAC 地址,所以您必鬚髮送鄰居請求來確定 MAC 地址。

有必要進行鄰居請求還有其他原因。其中一些是:

  • 重複地址檢測 ( RFC 4862 )。其他一些主機可能(正確或錯誤地)聲明了主機想要使用的地址。
  • 鄰居不可達檢測。對鄰居請求缺乏響應是鄰居無法訪問的一個指標。

書都很好,但非常過時的書可能沒那麼有用。在過去的十年中,甚至 IPv6 也進行了重大修訂。最好的事實來源是相關的 RFC,包括原始的和任何被標記為已更新或廢棄的 RFC。RFC 被詳細指定以允許編寫符合要求的實現。您可以通過閱讀RFC 4861了解鄰居發現的所有細節。

引用自:https://serverfault.com/questions/810672