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