資源描述:
《Linux網(wǎng)絡(luò)編程_參考》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、第5章Linux套接字網(wǎng)絡(luò)編程接口第5章Linux套接字網(wǎng)絡(luò)編程接口網(wǎng)絡(luò)編程接口的產(chǎn)生與發(fā)展套接字基礎(chǔ)面向連接的傳輸層套接字編程無(wú)連接的套接字編程高級(jí)套接字函數(shù)服務(wù)器的I/O模型網(wǎng)絡(luò)層的原始套接字面向數(shù)據(jù)鏈路層的套接字網(wǎng)絡(luò)編程接口產(chǎn)生與發(fā)展網(wǎng)絡(luò)編程接口的產(chǎn)生與發(fā)展問(wèn)題的提出站在應(yīng)用程序?qū)崿F(xiàn)的角度,應(yīng)用程序如何方便地使用協(xié)議棧軟件進(jìn)行通信呢?如果能在應(yīng)用程序與協(xié)議棧軟件之間提供一個(gè)軟件接口,就可以方便客戶與服務(wù)器軟件的編程。網(wǎng)絡(luò)編程接口的產(chǎn)生與發(fā)展套接字編程接口套接字應(yīng)用程序編程接口是網(wǎng)絡(luò)應(yīng)用程序通過(guò)網(wǎng)絡(luò)協(xié)議棧進(jìn)行通信時(shí)所使用的接口,即應(yīng)用程
2、序與協(xié)議棧軟件之間的接口,簡(jiǎn)稱套接字編程接口(SocketAPI)。它定義了應(yīng)用程序與協(xié)議棧軟件進(jìn)行交互時(shí)可以使用的一組操作,決定了應(yīng)用程序使用協(xié)議棧的方式、應(yīng)用程序所能實(shí)現(xiàn)的功能、以及開(kāi)發(fā)具有這些功能的程序的難度。網(wǎng)絡(luò)編程接口的產(chǎn)生與發(fā)展Socket的歷史在80年代早期,遠(yuǎn)景研究規(guī)劃局(AdvancedResearchProjectsAgency,ARPA)資助了佳利福尼亞大學(xué)伯克利分校的一個(gè)研究組,讓他們將TCP/IP軟件移植到UNIX操作系統(tǒng)中,并將結(jié)果提供給其他網(wǎng)點(diǎn)。作為項(xiàng)目的一部分,設(shè)計(jì)者們創(chuàng)建了一個(gè)接口,應(yīng)用進(jìn)程使用這個(gè)接口可以方
3、便的進(jìn)行通信。他們決定,只要有可能就使用以有的系統(tǒng)調(diào)用,對(duì)那些不能方便的容入已有的函數(shù)集的情況,就再增加新的系統(tǒng)調(diào)用以支持TCP/IP功能。這樣做的結(jié)果就出現(xiàn)了插口接口(BerkeleySocket),這個(gè)系統(tǒng)被稱為BerkeleyUNIX或BSDUNIX。(TCP/IP首次出現(xiàn)在BSD4.1版本release4.1ofBerkeleySoftwareDistribution)。由許多計(jì)算機(jī)廠商,都采用了BerkeleyUNIX,于是許多機(jī)器上都可以使用Socket了。這樣,Socket接口就被廣泛使用,到現(xiàn)在已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn)。網(wǎng)絡(luò)編程接
4、口的產(chǎn)生與發(fā)展要想實(shí)現(xiàn)套接字編程接口,可以采用兩種實(shí)現(xiàn)方式:一種是在操作系統(tǒng)的內(nèi)核中增加相應(yīng)的軟件來(lái)實(shí)現(xiàn),一種是通過(guò)開(kāi)發(fā)操作系統(tǒng)之外的函數(shù)庫(kù)來(lái)實(shí)現(xiàn)。網(wǎng)絡(luò)編程接口的產(chǎn)生與發(fā)展Linux系統(tǒng)是通過(guò)提供套接字(socket)來(lái)進(jìn)行網(wǎng)絡(luò)編程的.Socket技術(shù)提供了在TCP/IP模型各個(gè)層上的編程支持。該技術(shù)是在內(nèi)核處理收到的各層協(xié)議數(shù)據(jù),然后應(yīng)用程序以文件的方式接受內(nèi)核傳來(lái)的數(shù)據(jù)。應(yīng)用程序的文件處理是通過(guò)一個(gè)文件句柄來(lái)進(jìn)行的。網(wǎng)絡(luò)編程接口的產(chǎn)生與發(fā)展網(wǎng)絡(luò)程序通過(guò)socket和其它幾個(gè)函數(shù)的調(diào)用,會(huì)返回一個(gè)通訊的文件描述符,我們可以將這個(gè)描述符看成普
5、通的文件的描述符來(lái)操作,這就是linux的設(shè)備無(wú)關(guān)性的好處.我們可以通過(guò)向描述符讀寫操作實(shí)現(xiàn)網(wǎng)絡(luò)之間的數(shù)據(jù)交流.套接字基礎(chǔ)套接字基礎(chǔ)什么是套接字(SOCKET)套接口是對(duì)網(wǎng)絡(luò)中不同主機(jī)上應(yīng)用進(jìn)程之間進(jìn)行雙向通信的端點(diǎn)的抽象,一個(gè)套接口就是網(wǎng)絡(luò)上進(jìn)程通信的一端,提供了應(yīng)用層進(jìn)程利用網(wǎng)絡(luò)協(xié)議棧交換數(shù)據(jù)的機(jī)制。套接字基礎(chǔ)Socket的功能Socket的英文原意就是“孔”或“插座”,將電話系統(tǒng)與面向連接的Socket機(jī)制相比,有著驚人相似的地方。以一個(gè)國(guó)家級(jí)的電話網(wǎng)為例。電話的通話雙方相當(dāng)于相互通信的兩個(gè)進(jìn)程;通話雙方所在的地區(qū)(享有一個(gè)全局唯一的區(qū)
6、號(hào))相當(dāng)于一個(gè)網(wǎng)絡(luò),區(qū)號(hào)是它的網(wǎng)絡(luò)地址;區(qū)內(nèi)的一個(gè)單位的交換機(jī)相當(dāng)于一臺(tái)主機(jī),主機(jī)分配給每個(gè)用戶的局內(nèi)號(hào)碼相當(dāng)于Socket號(hào).任何用戶在通話之前,首先要占有一部電話機(jī),相當(dāng)于申請(qǐng)一個(gè)Socket號(hào);同時(shí)要知道對(duì)方的電話號(hào)碼,相當(dāng)于對(duì)方有一個(gè)Socket。然后向?qū)Ψ綋芴?hào)呼叫,相當(dāng)于發(fā)出連接請(qǐng)求(假如對(duì)方不在同一區(qū)內(nèi),還要撥對(duì)方區(qū)號(hào),相當(dāng)于給出網(wǎng)絡(luò)地址)。對(duì)方假如在場(chǎng)并空閑(相當(dāng)于通信的另一主機(jī)開(kāi)機(jī)且可以接受連接請(qǐng)求),拿起電話話筒,雙方就可以正式通話,相當(dāng)于連接成功。雙方通話的過(guò)程,是向電話機(jī)發(fā)出信號(hào)和從電話機(jī)接受信號(hào)的過(guò)程,相當(dāng)于向Sock
7、et發(fā)送數(shù)據(jù)和從Socket接受數(shù)據(jù)。通話結(jié)束后,一方掛起電話機(jī),相當(dāng)于關(guān)閉Socket,撤消連接。套接字基礎(chǔ)我們應(yīng)當(dāng)從多個(gè)層面來(lái)理解套接字這個(gè)概念的內(nèi)涵。從套接字所處的地位來(lái)講,套接字上聯(lián)應(yīng)用進(jìn)程,下聯(lián)網(wǎng)絡(luò)協(xié)議棧,是應(yīng)用程序通過(guò)網(wǎng)絡(luò)協(xié)議棧進(jìn)行通信的接口,是應(yīng)用程序與網(wǎng)絡(luò)協(xié)議棧進(jìn)行交互的接口。套接字基礎(chǔ)從實(shí)現(xiàn)的角度來(lái)講,非常復(fù)雜。套接字是一個(gè)復(fù)雜的軟件機(jī)構(gòu),包含了一定的數(shù)據(jù)結(jié)構(gòu),包含許多選項(xiàng),由操作系統(tǒng)內(nèi)核管理。從使用的角度來(lái)講,非常簡(jiǎn)單。對(duì)于套接字的操作形成了一種網(wǎng)絡(luò)應(yīng)用程序的編程接口(API)。本書把這一套操作套接字的編程接口函數(shù)稱作套接
8、字編程接口,套接字是它的操作對(duì)象??傊捉幼质蔷W(wǎng)絡(luò)通信的基石。套接字基礎(chǔ)常用的socket:流式套接字:它提供基于TCP協(xié)議的雙向、可靠、有序且不重復(fù)的無(wú)記錄邊界