tlv格式數據解析案例「tlv協議格式應用」

說明

之前介紹過EIGRP建立鄰居的過程,並且介紹了一些特性,這次主要看的是EIGRP的數據包格式,包括TLV,和EIGRP的三張表的內容。

EIGRP的包頭欄位

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

1、版本:從EIGRP發布以來,一直為版本2
2、操作碼:指出EIGRP數據包的類型,1為更新 3為查詢 4為答覆 5為hello和ACK
3、標記:包括兩個標記,一個為init位,表示新的鄰居開始,第二位為接收位,使用一個私有可靠組播演算法
4、序列號:RTP中使用的32位序列號
5、確認序列號(ACK):本地路由器從鄰居路由器那收到最新的序列號,單播傳送的
6、自主系統號(AS):指定EIGRP協議所處的標示號,所以,兩端都必須一致
7、TLV:(1)一般TLV:攜帶K值和hold time時間,包括序列、軟體版本和下一個組播序列(一般用Hello包進行發送)

TLV的類型

在EIGRP中引用TLV的欄位,TLV稱為 Type/Length/Value ,這個TLV在路由選擇協議中有非常好的擴展性,特別是ISIS中,它就是利用TLV欄位來擴展支持更多的特性,當一個新的協議或者特性出現,路由協議需要去支持它,像OSPF的話,IPV6的支持就必須開發新的版本了,而ISIS對IPV6的支持,直接用TLV欄位就能實現,EIGRP也是如此。

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

(1)一般TLV:攜帶K值和hold time時間,包括序列、軟體版本和下一個組播序列(一般用Hello包進行發送)

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

(2)IP內部路由TLV:從同一個AS內學習到的路由參數

1、下一跳:包括這個路由的更新源,如果為0.0.0.0,那麼表示自身
2、延遲(delay):以10us為單位,沿途更新入向介面延遲總和
3、帶寬(bandwidth):2560 000 000/沿途更新入向介面的最小帶寬
4、MTU:指路由器沿途抵達目的地路由器上所有鏈路中最小的MTU,一般不作為metric的參數計算
5、跳數:表示到達目的地路由的跳數,最大為255。
6、可靠性:用於反映到達目的的路由上介面的出站誤碼率的總和,取值0x01~0xFF
7、負載:用於反映到達目的的路由上介面的出站負載的總和,取值0x01~0xFF
8、保留欄位:未使用的欄位
9、前綴長度:攜帶子網掩碼
10、目的地址:一個路由的目的地址

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

(3)IP外部路由TLV:從不同AS或不同路由協議重分布進本AS內的路由參數

1、下一跳:路由的下一跳地址。
2、原路由器:一個IP地址,或者重分布外部路由到EIGRP的RID
3、原自主系統號:始發路由的路由器所在的AS
4、Arbitrary Tag:路由映射 Tag
5、外部協議度量:標註外部路由的度量值
6、保留欄位:不被使用
7、外部協議ID:用來標示外部路由從哪個協議學習到。
8、標記:定義了兩個值,如果為0x01的話,那麼表示外部路由,如果是0x02表示預設路由

EIGRP的五種類型數據包

1、hello :目標地址為224.0.0.10,用於發現和維持鄰居關係。鄰居收到後不需要確認,Hello間隔由介面類型決定,低速鏈路–90s,高速鏈路–5s。(hello包中包含版本號、Opcode=5、seq、ACK、AS、EIGRP K值,seq和ACK永遠為0,AS和EIGRP包括IP包的源地址是檢查能否成為鄰居的關鍵)

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

在Hello包中攜帶了K值、hold time時間,還包括軟體的版本號,Opcode為5,如果兩邊鄰居處於同一網段的話,鄰居檢查Hello包,還會看K值是否一致,如果不一致,則鄰居建立不起來。

K值和軟體版本是攜帶在TLV中傳遞的,也就是一般TLV欄位

2、Update:發送給鄰居路由表,通過單播或組播發送update數據包,鄰居收到以後必須回復確認信息,如果沒有收到來自鄰居的確認信息,那麼就會單播發送這個跟新包16次,在16次後還沒有關於這個鄰居的ACK信息,則認為鄰居失效。會標明這路由信息屬於外部還是內部的,內部的只攜帶了K值的參數,而外部標明了起源著是誰,還有tag信息。

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

在update包中,攜帶了路由信息,可以看到我ip interal route,它就是內部TLV欄位,內部TLV的每個路由條目中包含的內容,在TLV欄位中介紹了,可以查看數據包看看

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

可以看到Opcode為1,攜帶了子網掩碼,和5個K值的參數,next hop為0.0.0.0,怎麼是自己發送的。

3、Query:當路由信息丟失並沒有備用路由時,使用Query數據包向鄰居查詢,鄰居必須回復確認ACK和等待鄰居的reply。

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

可以看到Opcode為3,當一條路由失效,並且沒有FS的時候,就會對鄰居進行插敘,可以看到192.168.4.0/24標記為目的不可達,這裡序列號為46,看下回應的ACK內容

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

回應了ACK 46,並且是單播回應給10.0.0.2的

4、Reply:是對鄰居Query數據包的回復,也需要鄰居回復確認。

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

Opcode為4,reply,它回應的是關於192.168.4.0/24的不可達信息,另外,看下啊 Sequece:57,Acnowledge為48,這個48回應就是之前query,它的序列號為48,這是一種可靠性的表現
查看關於回應ACK的信息,因為在收到一個reply後,也需要回應ACK

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

5、Ack:是對收到的數據包的確認,告訴鄰居我已經收到數據包了,收到ACK,不需要對ACK做回復,這樣導致死循環 (因為在IP中沒有可靠的傳輸機制,必須依靠EIGRP來完成)

其中hello包中還攜帶了hold time時間,這個時間是給鄰居使用的 ,告訴鄰居如果在這個時間內還沒收到關於我的任何hello信息的話,
那麼就認為鄰居不存在了。

EIGRP的三張表探討

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

地址信息如圖,從R1上觀看EIGRP的三張表情況,與在A與B之間還有個網段10.1.1.0/24

R1(config)#router eigrp 1
R1(config-router)#network 10.1.1.1 0.0.0.0
R1(config-router)#network 12.1.1.0 0.0.0.255

R2(config)#router eigrp 1
R2(config-router)#network 12.1.1.2 0.0.0.0
R2(config-router)#network 23.0.0.0
R2(config-router)#network 10.1.1.2 0.0.0.0

R3(config)#router eigrp 1
R3(config-router)#network 23.1.1.2 0.0.0.0

這裡一定要注意IGP也就是內部協議network的含義匹配上network範圍的網段都參路由協議,並且把這個網段宣告出去,也就是說12.1.1.2 0.0.0.0代表精確匹配,這裡掩碼為反掩碼,0代表精確匹配,1代表忽略,就像12.1.1.0 0.0.0.255,它匹配的範圍就是,12.1.1不變,因為0代表精確匹配,而255,則為忽略,也就是1~254, 另外不攜帶反掩碼信息的話,那麼就是以主類網路宣告

一、鄰居表

通過 show ip eigrp neighbos查看鄰居狀態,包括可以加 detail參數,可以看到更加詳細的內容

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

1、H:代表序列號,鄰居的先後建立的順序

2、address:顯示鄰居建立的地址信息,EIGRP對於同一個直連路由器建立的鄰居,在有多條鏈路的情況下,會認為是多個鄰居存在,就像B一樣,同一台路由器,有多條鏈路,在A看來是不同的鄰居存放的

3、interface:自己哪個介面參與建立的鄰居關係

4、hold:在對方Hello包中攜帶的參數,在高速鏈路上,默認為15,也就是Hello包的3倍,當15s沒有收到來自鄰居的Hello包後,就認為對方失效 ,當然在正常情況下,每5s收到一個對方的Hello包,也就是hlod不低於10

5、uptime:與鄰居建立的時間計時器。

6、SRTT(Smooth Round-Trip Timer):平均往返時間,用來計算當一個路由器發送EIGRP數據包到鄰居,從鄰居接收到該數據包並且確認的平均時間。

7、multicast flow tmer:在說RTO之前,介紹個組播流計時器,當一個更新發送出去以後,鄰居沒有回應,那麼這個等待的時間就由組播計時器決定,當計時器超時以後,就切換成單播來再次發送更新給鄰居,等待鄰居回應的ACK

8、RTO:決定單播傳送之間的間隔時間

9、Q:當組播發送了更新後,而對方沒有回應ACK的時候,會緩存在本地 ,那麼會以單播的形式重新發送這個數據包給鄰居,如果16次還沒收到ACK,重置鄰居

10、 Seq : 收到了鄰居更新的次數,每次增加1

這裡說下,關於SRTT和RTP是思科私有的演算法,所以,沒有公開的計算方法,在正常情況下,RTO是ST的6倍,但是,當鄰居出現了故障以後,這個參數就會改變,RTO最大值為5000, 另外 在Cisco IOS中,沒有可以定義這兩個值的命令,卷一也沒有提及過。

二、拓撲表

對於EIGRP來說,拓撲表中存在的內容是整個網路收斂的關鍵,對於EIGRP在網路中部署的關鍵,就是讓每條路由都有可用的FS,關於FS和其他概念在DUAL演算法總總結,這裡拓撲表只做一個小小的介紹。

show ip eigrp topology來查看參數

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

可以看到,拓撲表中存放著去往每個目的地的路由信息,這裡有FD和AD的概念,這個是DUAL的核心演算法,在後面會再次介紹,當有多條路徑去往同一個目的地的,當滿足了特定的條件後,它也會出現在拓撲表中,這個條件就是FC,這個在DUAL演算法的時候進行詳細說明。

三、路由表

路由表是存放最優的下一跳的信息,可以看到在拓撲表中去往23.0.0.0/8,經過不同的下一跳到達,在路由表中出現的則只會是最優的,在拓撲表中為FD is 3087200,也就是最優的,下一跳為12.1.1.2。

TCPIP卷一(9)EIGRP的數據包格式、TLV、 三張表

總結:這次詳細講解了EIGRP的數據包格式,包括TLV中的作用,另外關於拓撲表的詳細內容必須到DUAL演算法中才好講解,拓撲表的內容都是通過DUAL演算法得來的。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/201937.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-06 14:01
下一篇 2024-12-06 14:01

相關推薦

發表回復

登錄後才能評論