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