無需實驗拓撲,直接抓取OSPF Hello包分析:
篩選OSPF包
先看IP包頭中一些需要注意的地方:
IP包頭
Differentiated Services Field: 0xc0 (DSCP: CS6, ECN: Not-ECT):DSCP:CS6,該級別已經非常優先,因此在網絡發生擁塞時,OSPF協議本身會被優先轉發,不易丟棄。
Protocol: OSPF IGP (89):OSPF協議號是89
Source: 12.12.12.1:數據包的源地址(接口地址,不是Router-ID)。
Destination: 224.0.0.5:數據包的目的地址。這裡需要注意,在MA類型網絡中OSPF接口之間會選舉DR和BDR,其餘為DRother。DR和BDR偵聽224.0.0.5和224.0.0.6,DRother偵聽224.0.0.5。(所有OSPF路由器都能夠接收和傳遞目標地址為224.0.0.5的數據包,但只有DR和BDR能夠接收目標地址是224.0.0.6的數據包)
下面抓一個接口是DRother所發的包:(目標地址是224.0.0.6,只能被DR、BDR接收)
DRother
組播地址224.0.0.6
接下來看OSPF包頭部分:
Header
Version: 2:目前普遍用的還是OSPF版本2(v3用在IPv6)。
Message Type: Hello Packet (1):表明是Hello包。
Packet Length: 44:包長度。
Source OSPF Router: 1.1.1.1:該Hello包是由Router-ID是1.1.1.1的路由器發出的。【特別注意】相鄰路由器如果Router-ID相同無法建立鄰居。
Area ID: 0.0.0.0 (Backbone):區域ID。【特別注意】區域ID不同無法建立鄰居。
Checksum: 0xd28f [correct]:校驗和。
Auth Type: Null (0):認證類型。【特別注意】認證類型不同無法建立鄰居。
Auth Data (none): 0000000000000000
補充說明,認證類型分為:
0:不認證、1:明文認證、2:MD5認證
抓個明文認證、密碼為ljds的Hello包:
開啟明文認證的Hello包
上面還只是OSPF包頭中的信息,接下來才是真正的Hello包:
Hello Packet
Network Mask: 255.255.255.0:接口掩碼。【特別注意】MA網絡中掩碼一致才能建立鄰居。P2P網絡可不一致。
Hello Interval [sec]: 10:Hello包間隔時間。【特別注意】Hello時間一致才能建立鄰居。
.... 0... = (N) NSSA: Not supported:支持NSSA外部LSA時為1。
NSSA配置
NSSA抓包
.... ..1. = (E) External Routing: Capable:具備接受外部LSA時為1。stub區域該值為0。
STUB配置
STUB抓包
【特別注意】以上2個bit位【N位、E位】如果不同,也無法建立鄰居。會報類似以下錯誤:
OSPF: Hello from 23.23.23.2 with mismatched NSSA option bit
OSPF: Hello from 23.23.23.2 with mismatched Stub/Transit area option bit
Router Priority: 1:用於選舉DR、BDR。為0時無法成為DR、BDR。
Router Dead Interval [sec]: 40:路由器失效時間。【特別注意】Dead時間一致才能建立鄰居。
Designated Router: 12.12.12.1:DR地址(接口地址)。
Backup Designated Router: 12.12.12.2:BDR地址(接口地址)。
Active Neighbor: 2.2.2.2:鄰居的Router-ID。
以上是對OSPF Hello包的複習。
做運維多年導致這些技術細節忘光了...