邵陽學(xué)院信息工程系 嚴(yán) 謙 陽 泳
?
網(wǎng)絡(luò)編程tcp/ip協(xié)議與socket論述
邵陽學(xué)院信息工程系 嚴(yán) 謙 陽 泳
【摘要】隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)通信成為當(dāng)前互聯(lián)網(wǎng)技術(shù)的重要技術(shù),所以當(dāng)前網(wǎng)絡(luò)編程技術(shù)成為當(dāng)前互聯(lián)網(wǎng)通信發(fā)展的核心技術(shù)。網(wǎng)絡(luò)編程主要是的通過使用套接字來實(shí)現(xiàn)進(jìn)程間的編程,在Windows系統(tǒng)中的網(wǎng)絡(luò)編程的套接字winscok,而在linux系統(tǒng)中最常見的套接字就是socket,本文就linux網(wǎng)絡(luò)編程中的tcp、ip協(xié)議以及socket套接字問題進(jìn)行詳細(xì)的論述。
【關(guān)鍵詞】網(wǎng)絡(luò)編程;tcp/ip協(xié)議;socket套接字
網(wǎng)絡(luò)編程最主要的工作就是在發(fā)送端把信息通過規(guī)定好的協(xié)議進(jìn)行組裝包,在接收端按照規(guī)定好的協(xié)議把包進(jìn)行解析,從而提取出對應(yīng)的信息,達(dá)到通信的目的,而中間則是通過對數(shù)據(jù)包的組裝、過濾、捕獲以及分析等處理工作。作為一個(gè)網(wǎng)絡(luò)編程者,為做好網(wǎng)絡(luò)編程設(shè)計(jì),需要接觸代碼,開發(fā)工具,數(shù)據(jù)庫,服務(wù)器架設(shè)和網(wǎng)頁設(shè)計(jì)等幾方面的工作,同時(shí)對于網(wǎng)絡(luò)編程,需要重視理解TCP/IP協(xié)議構(gòu)架,本文就TCP/IP協(xié)議構(gòu)架以及socket套接字問題進(jìn)行詳細(xì)的論述。
網(wǎng)絡(luò)編程代碼主要分為靜態(tài)代碼與動(dòng)態(tài)代碼兩種,靜態(tài)代碼主要是服務(wù)器不解析直接發(fā)送給客戶端的部分,用做布局效果,一般不用于數(shù)據(jù)庫操作;而動(dòng)態(tài)代碼主要服務(wù)器需要解析的部分,用作數(shù)據(jù)庫連接操作等。常見的編程語言有php,jsp,asp這幾種語言,其中個(gè)人認(rèn)為如果想快速入門的話,可以學(xué)JSP、但是為了能夠以后就業(yè)的話則需要學(xué)php或jsp。
網(wǎng)絡(luò)模型主要是用與描述網(wǎng)絡(luò)的結(jié)構(gòu)原理和工作原理,網(wǎng)絡(luò)模型則分為OSI參考的模型與Internet網(wǎng)絡(luò)模型兩種,OSI網(wǎng)絡(luò)模型與Internet模型最大區(qū)別就是OSI模型為七層網(wǎng)絡(luò)結(jié)構(gòu),而Internet模型為四層結(jié)構(gòu),而網(wǎng)絡(luò)協(xié)議用于指定層上進(jìn)行的數(shù)據(jù)交換的規(guī)則,Internet的網(wǎng)絡(luò)層協(xié)議的主要是以IP協(xié)議為主、DNS協(xié)議為輔,而Internet傳輸層協(xié)議則是TCP協(xié)議和UDP協(xié)議。
套接字主要的用于程序編碼中操作,而套接字則是的應(yīng)用程序與網(wǎng)絡(luò)協(xié)議的接口,不同類型的程序的套接字是不同的,例如java socket主要是用于java應(yīng)用程序與網(wǎng)絡(luò)協(xié)議的接口,提供若干個(gè)類定義,java應(yīng)用的利用繼承網(wǎng)絡(luò)協(xié)議的方式實(shí)現(xiàn)java程序的網(wǎng)絡(luò)通信。
數(shù)據(jù)包也稱為組裝包,指在應(yīng)用層數(shù)據(jù)或報(bào)文按照一定事先規(guī)定好的規(guī)則整合的數(shù)據(jù)集合,實(shí)際操作包括組包(打包),數(shù)據(jù)包傳送,解包。數(shù)據(jù)包通過協(xié)議將數(shù)據(jù)進(jìn)行組合起來,但是在實(shí)際的應(yīng)用中,例如在C++編程中,通過定義一種新的數(shù)據(jù)類型的用于存儲(chǔ)新的數(shù)據(jù)包結(jié)構(gòu),之后通過的電氣物理傳輸將數(shù)據(jù)包傳輸出去,而接收端則需要對接收到的數(shù)據(jù)包進(jìn)行的解析,以獲取需要的信息以及數(shù)據(jù)。
TCP/IP協(xié)議作為Internet的最基本的協(xié)議,主要有網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議構(gòu)成,TCP/IP協(xié)議為4層構(gòu)架結(jié)構(gòu),協(xié)議負(fù)責(zé)定義電子設(shè)備如何介入互聯(lián)網(wǎng):TCP協(xié)議負(fù)責(zé)信息的傳輸問題,而IP則是負(fù)責(zé)給聯(lián)網(wǎng)設(shè)備定義一個(gè)地址;IP層接收來自于更底層的數(shù)據(jù)包,(例如網(wǎng)絡(luò)接口層驅(qū)動(dòng)程序反饋的數(shù)據(jù)),并且將數(shù)據(jù)包發(fā)往更高層(TCP層或者UDP層);此外由于IP沒對對數(shù)據(jù)包的進(jìn)行處理、所以IP層的數(shù)據(jù)包不可靠。IP數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的地址(目的地址)。
TCP是面向連接的通信協(xié)議,通過三次握手建立連接,通訊完成時(shí)要拆除連接,由于TCP是面向連接的所以只能用于端到端的通訊;如果IP數(shù)據(jù)包中有已經(jīng)封好的TCP數(shù)據(jù)包,那么IP將把它們向‘上’傳送到TCP層。TCP將包排序并進(jìn)行錯(cuò)誤檢查,同時(shí)實(shí)現(xiàn)虛電路間的連接。TCP數(shù)據(jù)包中包括序號(hào)和確認(rèn),所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。
Socket套接字主要是用于描述IP地址與端口,作為一個(gè)通信鏈的句柄,其目的在于實(shí)現(xiàn)不同計(jì)算機(jī)設(shè)備直接的網(wǎng)絡(luò)通信。在主機(jī)上一般都是運(yùn)行了多個(gè)軟件,可以同時(shí)提供多種服務(wù),所以每一種服務(wù)都會(huì)打開一個(gè)socket并綁定到端口上,使得不同的端口能夠?qū)?yīng)不同的服務(wù)內(nèi)容。Socket連接過程中主要可以分為服務(wù)期監(jiān)聽、客戶端請求以及連接確定等三個(gè)步驟:
(1)服務(wù)器監(jiān)聽:用于監(jiān)聽服務(wù)器是否處于等待連接狀態(tài)進(jìn)行監(jiān)控的網(wǎng)絡(luò)狀態(tài);
(2)客戶端請求,向客戶端的套接字發(fā)送連接請求;所以客戶端套接字必須要描述它所要連接的服務(wù)器套接字,指出相應(yīng)的服務(wù)器套接字地址與端口號(hào)后,向服務(wù)器端發(fā)送連接請求;
(3)連接確定:當(dāng)服務(wù)器端收到了客戶端套接字所發(fā)送的連接請求,為響應(yīng)客戶端套接字,需要建立一個(gè)新的線程并把服務(wù)器端套接字的地址與端口號(hào)發(fā)送給客戶端,當(dāng)客戶端確定之后,便建立的連接。
Socket套接字分為流式Socket(SOCK_STREAM)和數(shù)據(jù)報(bào)式Socket(SOCK_DGRAM),而這二者主要是針對TCP服務(wù)應(yīng)用以
及UDP服務(wù)應(yīng)用。用于操作socket套接字,設(shè)計(jì)者通過下面幾個(gè)函數(shù)來實(shí)現(xiàn):
(1)創(chuàng)建套接字函數(shù):int socket(int domain, int type, int protocol);
(2)綁定地址的套接字函數(shù):int bind(SOCKET socket, const struct sockaddr* address, socklen_t address_len);
(3)接受套接字函數(shù):int recv(SOCKET socket, char FAR* buf, int len, int flags);
(4)發(fā)送套接字函數(shù):int sendto( SOCKET s, const char FAR* buf, int size, int flags, const struct sockaddr FAR* to, int tolen);
(5)接受連接請求函數(shù):int accept( int fd, struct socketaddr* addr, socklen_t* len)。同上述的5個(gè)函數(shù)便可以實(shí)現(xiàn)網(wǎng)絡(luò)編程控制。
綜合上述,通過上述對網(wǎng)絡(luò)編程分析,重點(diǎn)針對TCP/IP協(xié)議以及socket套接字進(jìn)行詳細(xì)的論述,可見對于網(wǎng)絡(luò)編程,主要要理解網(wǎng)絡(luò)協(xié)議構(gòu)架,并且掌握好套接字各種函數(shù)的使用,這樣才能做好網(wǎng)絡(luò)通信工作。
參考文獻(xiàn)
[1]張洪波,陳紅彬.Linux命令應(yīng)用大全[M].北京:清華大學(xué)出版社,2009:25-26.
[2]趙善松.Linux常見問題解答[M].北京:人民郵電社,2001:63-68.
[3]梁如軍.Redhat Linux 5網(wǎng)絡(luò)服務(wù)[M].北京:機(jī)械工業(yè)社,2004: 100-200.
嚴(yán)謙(1990—),男,大學(xué)本科,現(xiàn)就讀于邵陽學(xué)院信息系通信工程12級(jí),研究方向:通信工程。
Network Programming tcp / ip protocol and socket discussion
Abstract:With the continuous development of Internet technology, network communications become an important technology of Internet technology, so the current network programming technology as the core technology of the current development of Internet communications. Network programming primarily achieved through the use of socket programming between processes in Windows system network programming socket winscok, while in linux system is the most common socket socket, paper linux Network Programming the tcp, ip protocol and socket socket issues are discussed in detail.
Keywords:network programming;tcp / ip protocol;socket socket
作者簡介: