2009年7月7日 星期二

Linux 下的網路連線整合

Standard
比較有聯絡的朋友們,大概都知道我最近正在忙著開發 LXNM(Lightweight Network Manager),這也是為什麼現在一直研究行動通訊的東西,前些日子發表的『GSM/GPRS/HSDPA Modem 總是告訴我你在哪裡』就大致記錄了個研究開頭。

原則上,LXNM 的設計是可以輕易 cross-platform,但因為開發環境上仍然使用 Linux ,所以還是以『 Linux 上可以動』做為第一階段的主要開發目標。而過程中發現,Linux 下所有的網路連線都是統一透過 Network Interface 去做管理,如常見到的 eth0、wlan0 等等。這對一般的網路卡(Enternet)和無線網路裝置(Wireless)來說,我們可以認定 Interface 所直接對應的就是硬體裝置,但是,數據機(Modem)卻是一種例外,並不算是一個 Network Interface。這令人胡塗,就硬體角度來看,他們應該都算是一種通訊用的裝置,但在 Linux 下是是如此不一致被處理。

若要使用 Modem 連上TCP/IP網路,則需要有撥號的階段,透過 PPP(Point-to-Point Protocol),然後建立一個 Virtual Network Interface,因為最終的可用網路連線(Connection)還是必需為 Network Interface 型態。可是這種虛擬的介面,並非直接對應到 Modem ,必需透過其對應的 PPP kernel driver 才能循線得知 interface 與 Modem 的關聯性,在這部份的實作有些困難。

然而,我們便可以將所有 Network Interface 視為可用的網路連線(Connection)了嗎?並不是這樣的,一個常見於家庭中的應用就可以打破了這定義 - ADSL。目前廣為一般家庭用的 ADSL 網路,多半都使用 PPPoE(Point-to-Point Protocol over Ethernet)做為連線的方法,這意味著我們還是得像 Modem 一樣撥號連線,只是一般 Modem 可能是透過 Serial port(如:/dev/modem、/dev/ttyUSB0),而 ADSL Modem 是透過 Ethernet Device(也就是某個 Network Interface,如:eth0)。

所以,照這樣來看,PPP 可駕馭在所有的 Device 之上,囊括了 Modem、Ethernet、Wireless 等等,甚至有可能在 PPP 所建立的 Virtual Network Interface 之上有另一個新的 PPP 連線。如何去追蹤和判斷最終的可用網路連線,才是 Linux 網路連線整合的困難之處。不過有了這樣的架構觀念後,重新設計一個網路連線整合的機制似乎就容易多了。

之前單純將所有 Network Interface 視為可用的網路連線,實在是個錯誤的決定,看來又要費一番功夫改寫了。