Linux 下的網路連線整合

比較有聯絡的朋友們,大概都知道我最近正在忙著開發 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 視為可用的網路連線,實在是個錯誤的決定,看來又要費一番功夫改寫了。

這個網誌中的熱門文章

Web 技術中的 Session 是什麼?

淺談 USB 通訊架構之定義(一)

淺談 USB 通訊架構之定義(二)

NodeJS 與 MongoDB 的邂逅

Koa 2 起手式!