linux核心協議棧 鄰居協議概述

2021-10-10 13:55:26 字數 1041 閱讀 2788

1 什麼是鄰居協議?

ndp(neighbor discovery protocol,鄰居發現協議)是ipv6的乙個關鍵協議,它組合了ipv4中的arpicmp路由器發現icmp重定向等協議,並對它們作了改進。作為ipv6的基礎性協議,ndp還提供了字首發現、鄰居不可達檢測、重複位址監測、位址自動配置等功能。

這裡先以arp探測來剖析鄰居協議。如果一台主機和你的計算機連線在同乙個lan上(也就是說,你和這台主機通過乙個共享介質相連或點對點直接相連),那麼它就是你的鄰居,而且他們有相同的l3網路配置。定義鄰居的另一種方式是,一台主機到其鄰居必須有且僅有乙個l3跳躍點,並且它的l3路由表必須提供可以直接和其鄰居通訊的一條路勁。不是鄰居的主機間通訊必須通過閘道器或路由器。

2 neighbour項是在什麼時候建立的呢?

這需要從兩個方向來分析,傳送與接收:

1、對於傳送方向來說,當路由器需要**或者需要自己傳送乙個資料報時,會去查詢路由表當查詢到的路由沒有在路由快取中時,則需要為該路由建立乙個路由快取並加入到路由快取鍊錶中,同時會呼叫arp_bind_neighbour實現路由快取與neighbour的繫結(如果沒有相應的neighbour項,則建立neighbour項)。然後再判斷neighbour項是否可用,若不可用,則將資料報存入佇列中,並傳送arp 請求,在接收到請求後,則將neighbour項設定為可用,並將資料從佇列中取出並傳送出去其鄰居項的狀態轉換為nud_none -> nud_incomplete -> nud_reachable。

2、對於接收方向來說,當主機接收到arp request報文,則認為主機與傳送請求報文之間的鏈路為通的,則為該傳送主機建立乙個鄰居表項,並將其狀態設定為nud_state,其鄰居項的狀態轉換為nud_none -> nud_stale -> nud_delay -> nud_probe -> nud_reachable

3 arp報文格式

參見《arp協議報文格式及arp表簡述》

《探尋linux協議棧》之一 linux協議棧概述

linux協議棧分層設計思想 linux分層究竟對報文做了什麼總結 本人所從事開發以來,一直在做資料面相關。資料面是乙個通訊裝置最終好不好用最直接的體現。因為乙個網路裝置,好不好用,資料 快不快,資料 穩定不穩定,全部都是使用者最直接體 現。所以工作八年以來,對linux核心協議棧業也積累了自己的一...

OSPF協議鄰居狀態

ospf鄰居狀態 down 這是鄰居的初始狀態,表示沒有從鄰居收到任何資訊。在nbma網路上,此狀態下仍然可以向靜態配置的鄰居傳送hello報文,傳送間隔為pollinterval,通常和router deadinterval間隔相同。attempt 此狀態只在nbma網路上存在,表示沒有收到鄰居的...

LINUX協議棧詳解 ARP協議

arp協議負責從ip位址到物理mac位址的轉換。arp格式 this structure defines an ethernet arpheader.struct arphdr 接收arp的函式是arp rcv,在跑完nfproto arp鉤子後,呼叫arp process處理arp請求,簡單考慮,...