栗建中 胡雯雯
摘 要:在現代科學技術迅速發展的推動下,人們的日常生活中對于網絡通信功能的使用已經可以說成為一種依賴,我們對于網絡通信的需求則出現在了生活中的方方面面。因為我們對于網絡通信的強烈的需求,所以關于高性能的網絡通信也越來越被人們所關注。Linux網絡是一種操作系統,在這個開放的網絡平臺上,我們可以進行高性能的網絡通信的開發。在現在的網絡發展中,Linux環境下基于Socket的網絡通信技術的開發和研究已經成為主流,為大多數人所關注。而Socket是一種套接字規范作為程序通信的方式,是可以作為與網絡設備和應用程序之間的編程接口。更為重要的是,Socket接口是在Linux網絡環境下的用于應用程序與下層協議的唯一途徑。因Socket接口對于Linux環境的重要性,所以我們要對Linux環境下基于Socket的網絡通信技術進行研究,提高網絡通信效率。
關鍵詞:Linux環境;Socket;網絡通信技術
中圖分類號:TP316 文獻標識碼:A
隨著網絡通信日益為人們的日常生活所依賴,我們對于高性能的網絡通信的要求也是越來越高。網絡的工作狀況對于一個操作系統來說就是最需要的基礎性的支持,因此網絡的支持程度就顯得尤為重要。在現行眾多的操作系統中,Linux操作系統有著較好的優勢。Linux操作系統是一種可以進行多任務的操作系統,內核小、效率高。Linux操作系統本身還具有較高的安全性,這在網絡通信方面是非常引人關注的一點,Linux操作系統還具有良好的兼容性,可以兼容大多數的網絡協定,保障運行的效率。因為這些優勢,Linux操作系統的應用度非常廣泛,對于Linux操作系統的網絡通信的研究也成為當下的一股熱潮。Socket則作為Linux操作系統的唯一連接接口,對于高性能的網絡通信程序開發有著很大的奠基作用。Socket即套接字,是一種連接應用層和傳輸層之間的編程接口,具有訪問下層通信協議的功能,并且可以調用相應的數據。在這種情況之下,我們就要進行Linux環境下基于Socket的網絡通信技術研究,希望可以設計出性能更高的網絡通信技術。
1.基于SOCKET下的網絡通信原理
現在的網絡通信大多數都是由客戶機和服務器構成的,即C/S架構,此外還有一種是由瀏覽器和服務端構成的,即B/S架構。這兩種網絡通信方式即是現在的網絡通信的主流通信方式。這都是先通過了解客戶需求,由子程序進行溝通和處理,而子程序則由主程序進行統一控制,以主程序為代表控制多個子程序來和客戶進行通信。在網絡通信中,Socket即套接字是非常重要的。在一個個網絡進程運作的時候,我們都是通過對不同的進程進行標注,才可以加以區別。Socket就是一個個的網絡進程的ID,只有我們明確了這些ID,我們才可以進行網絡間的進程通信,把一個一個進程連接起來完成,從而完成我們需要的網絡通信。我們的計算機現在已經越來越復雜,我們的計算機在進行運作的時候,一般都開啟的不只是一個進程,對于這些進程的區分,我們就可以用Socket來完成。Socket除了可以擔當ID的作用,還可以再進行細分,這樣就會含有別的信息,即端口號。在計算機運行時,進程與端口號呈現一一對應的關系,這樣能夠避免出現運行誤差,極大的提高網絡通信的運行效率。Socket的網絡協議還具有非常多的類型,工作方式也不盡相同,地址格式也不相同,相同的網絡協議地址就可以用組成協議地址族,見表1。
對于這些套接字地址族,我們都是可以將其作為統一的套接字接口,可以被專有各地址族的軟件所使用。有了這些前提,Socket下的ID和端口號的相互配合之下,我們的網絡通信才可以得到實現。
2. LINUX網絡通信設計
了解了Socket下的網絡通信原理之后,我們就可以進行對Linux的網絡通信設計了。對于Linux的網絡通信設計,我們主要從工作流程、數據發送模塊和數據接受模塊3個方面來進行入手。
2.1 工作流程
對于Linux的網絡通信進行設計,我們要先熟悉Linux的網絡通信的通信流程。因此,我們要先從Socket開始。我們首先要做的就是建立起套接口,int socket=socket(intdomain,int type,int protocol);然后對建立的套接口進行綁定,給與建立的套接口一個地址,這個地址里包含有計算機的IP地址和端口號等一些基礎信息,可以為套接口進行進程間的連接做好準備;客戶端就可以請求連接網絡,客戶端會通過未被占用的端口來進行進程;在程序運行的時候,Socket會與相應的端口進行一對一的連接,并且會對連接的端口進行監聽,以便在收到請求的時候及時地給予相應的處理;請求的隊列過大會導致服務不會回應或是回應過慢,在隊列減少則會盡快處理;處理完就可以將結果傳輸出去了,send和recv這兩個函數可以完成對Socket進行數據傳輸;發送數據和接收數據,傳輸完畢之后,就可以關閉連接了。這樣就可以完成整個客戶訪問的進程間的通信了。
2.2 數據發送模塊
我們對于Linux操作系統中對于進程間的數據發送,是采用Socket函數來進行的。Int send和int recv這兩個函數可以應用于套接字在進程間的通信。Send函數是用于發送數據的,如果出現了小于len的情況,就代表著數據有部分沒有發送,只是發送了一部分,我們就需要再次發送來完成我們的數據發送。我們進程間的數據發送都是通過調用函數來進行的,通過函數來進行網絡的連接,連接好了網絡,我們才可以進行發送數據了。我們將數據順利地發送出去之后,進程間才可以順利地通信。
2.3 數據接收模塊
我們有數據發送,當然也要有數據接收。當網絡上的數據被計算機接收到了計算機,會產生一些控制器的中斷,導致計算機運行出現故障。這個時候計算機的中斷調控處理程序開始工作,對接收到的數據進行處理,相應地處理程序,寄存器開始工作,對接收的新數據進行記錄及存儲。我們在函數中要正確的設定寄存器的內容,不然我們的計算機將無法對新接收的數據進行處理。出現不同的函數時,代表的意義也是不一樣的。我們就可以進行一些舉例:當CPR二BNRY時,代表著緩沖區全部被存滿,新接收的數據無法被使用;這時網卡將停止往內存寫數據,新接收的數據將被拋棄,而無法存到我們的計算機里面;當CPR二BNR卜1時,表示網卡的接收緩沖區里沒有數據,我們可以通過這個數據來判斷是否有數據可以使用。
只有顯示CPR!二BNRY十1時,才代表接收到了新的數據,并處于正常的存儲狀態,可以為我們所使用。
3. Socket網絡通信模型
網絡通信模型,最基礎的是C/S的網絡通信模型。對于這種網絡通信模型,我們可以在這個網絡通信模型中發現兩個部分:客戶程序和服務程序。我們的客戶程序是由客戶來進行提出請求,然后我們的服務程序開始工作,接收請求并建立連接,連接建立以后我們就可以讓客戶對于我們的網絡通信中的數據建立起連接,客戶就可以自行讀取數據,進行使用。但是應用程序在使用Socket接口來讀取數據之前,我們要先進行Socket函數的調用,有了Socket函數的支持,我們才可以完成通信間的連接,以此來完成整個客戶程序的使用進程和服務進程的網絡通信。網絡通信的模型如圖1所示。
結語
在這個網絡發展迅速的時代,人們對于網絡的要求也是越來越高,同時也帶動了人們對高性能網絡的開發和研究。Linux網絡可以可以進行網絡資源的共享,完成網絡通信,而且具有較高的安全性。Linux網絡還具有內核小,包含著很多的網絡協議,還有開放的源代碼,我們可以利用Linux網絡進行基于Socket的網絡通信技術的開發。Socket作為其中的接口起著舉足輕重的作用,連接起了網絡設備和應用程序與下層協定,從而完成設備和網絡之間的網絡通信。我們對于Linux環境下基于Socket的網絡通信技術進行研究,希冀于提高網絡通信效率,建立起更好的,性能更高的網絡通信技術。
參考文獻
[1]莫足琴,歐陽艷階,馬康.基于 Java Socket 多客戶端并發通信聊天程序的設計與實現[J].電腦知識與技術,2008(20):63-65.
[2] Douglas. Comer, David L.Stevens. TCP/IP客戶-服務器編程與應用[M].北京:清華大學出版社,2004.
[3]農孫博,范正剛. Linux平臺下的Web編程[M].北京:人民郵電出版社,2000.
[4]劉春風,張代遠.μC/OS-II下協議棧uIP的移植與應用[J].計算機技術與發展,2012,22(9):143-145.
[5]高栩宇,馬林華,南秦博.基于L州ux操作系統下的cT即IP網絡通信研究與應用[J].現代電子技術,2006,29(18):74-76.