2011-10-03 101 views
1

我有疑問,請澄清一下。假設我有連接像下方的系統,Linux內核:skbuff結構 - 路由信息..

A - >乙 - 「ç - > d

我需要從A發送一個數據包到d,因此,當一個分組移出A的,它應該更新數據包或skbuff某處的路由信息​​,以便數據包通過B正確路由,以便到達目的地。

請讓我知道它在包更新是指頭部或參數中的skbuff ..

日Thnx提前..

+0

確定標題正確嗎? – B4NZ41

回答

1

從你的觀點,你只需要在目標地址d和第一個網關(或路由器)B.您不對數據包進行任何修改,這是在路由器中完成的。 C或任何其他路由器通往D對您而言都是透明的。

0

通常情況下,這是通過更新數據包的源和目標MAC地址來實現的。這可以在數據包的以太網報頭中找到(假設它是通過以太網傳輸的)。在正常的UDP或TCP路由中,您可以通過修改路由表在用戶空間中完成此操作。

您是否正在實施自定義Internet協議?否則,自定義內核模塊/補丁不太可能是適合這個的地方。

0

當這個網絡中的數據包從A發送到D時,A→B→C→D,A上的應用程序在D上有一個到應用程序的套接字.A上的IP需要找到下一跳通過路由,在這種情況下將是B。這些信息也可以緩存在套接字中(例如,在某些版本的Linux中,在套接字 - > sock-> dst_cache字段中)。 IP數據報始終將目標IP作爲IP的IP地址D.因此,B會根據路由表將其轉發給C,並且類似地C到D.

這是回答您的問題嗎?