2009-05-05 67 views
3

有沒有現有的Linux/POSIX C/C++庫或示例代碼來說明如何將套接字從一個物理接口重新綁定到另一個接口?將套接字重新綁定到不同的接口

例如,我在一個與物理連接A相關聯的套接字上ping傳輸,並且我想將該套接字重新綁定到物理連接B,並使ping數據包繼續在連接B上發送和接收(在短暫切換期間的延遲)。

我只需要這個用於無會話協議。

謝謝

更新:

我試圖提供與PPP和以太網設備使用故障轉移解決方案。

我有一個基本的腳本,可以通過使用iptables,NAT和路由表完成90%的功能。

問題是當故障轉移發生時,ping繼續在輔助連接上發送,但是,它們的源IP來自舊連接。

我已經和一些在商用路由器上工作的人講過話了,他們的建議是將套接字重新綁定到輔助接口。

更新2:

我很抱歉沒有指定此更早。該解決方案將在路由器上運行。我無法更改ping程序,因爲它會在客戶端計算機上運行。我僅以ping爲例,任何不基於會話的連接都應該能夠切換。我在幾臺商用路由器上測試了這個功能,它確實有效。不幸的是,他們的軟件是專有的,但是,從各種對話和測試中,我發現它們在故障轉移時重新綁定套接字。

+1

我可能在這裏錯過了一些東西,但你試過只關閉套接字,然後綁定到其他接口? – Duck 2009-05-06 02:51:51

+0

謝謝鴨, 我會嘗試一下,看看會發生什麼。 – 2009-05-06 21:06:49

回答

3

從更新後的帖子來看,問題是更改路由信息不會改變ping的源地址,只會強制將其發送到第二個接口。 This answer包含一些相關信息。

您需要更改ping程序。您可以使用每個接口的套接字方法,並以某種方式通知程序何時進行故障切換。或者你將不得不關閉套接字,然後綁定到第二個接口。

您可以通過幾種方法獲得所需的接口信息,包括使用SIOCGIFCONF選項調用ioctl(),並循環返回的結構以獲取接口地址信息。

0

我不認爲這是一個相當明確的操作。物理接口有不同的MAC地址,所以除非你有一個映射他們的路由層(NAT或類似的),否則他們將有不同的IP地址。

端口由<IP addr, Port number, protocol>三元組標識,因此如果您的IP地址發生更改,端口將發生更改。

你真的想在這裏做什麼?

0

我完全不知道你在做什麼,但我有一個猜測......你正在嘗試做某種故障轉移嗎?如果是這樣,那麼確實有辦法做到這一點,但爲什麼不在操作系統而不是應用程序中做到這一點?

在一端可以使用CARP,另一端可以在故障切換模式下使用接口中繼/綁定(術語各不相同)。

+0

我看到了CARP和綁定,但是由於CARP和Linux 2.6的空間限制,我無法使用,但是2.6內核不幸與以太網和PPP設備綁定。 – 2009-05-05 20:48:37

相關問題