什麼是linux網路編程
網路編程即編寫通過電腦網路與其它程式進行通訊的這類程式。網路程式和普通的程式有一個最大的區別是網路程式是由兩個部分組成的---用戶端和伺服器端。網路程式是先有伺服器程式啟動,等待用戶端的程式運行並建立串連.一般的來說是服務端的程式在一個連接埠上監聽,直到有一個用戶端的程式發來了請求。網路通訊需要網路通訊協定持。Linux系統是通過提供通訊端(socket)來進行網路編程的.網路程式通過socket和其它幾個函數的調用, 會返回一個用於通訊的檔案描述符,我們可以將這個描述符看成普通的檔案的描述符來操作,這就是linux的裝置無關性的好處.我們可以通過向描述符讀寫操作實現網路之間的資料交流。
什麼tcp/ip協議
TCP/IP 是供已串連網際網路的電腦進行通訊的通訊協定。TCP/IP通訊協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的網路來完成自己的需求。 這4層分別為:
應用程式層:應用程式間溝通的層,如簡單電子郵件傳輸(SMTP)、檔案傳輸通訊協定(FTP)、網路遠端存取協議(Telnet)等。
傳輸層:在此層中,它提供了節點間的資料傳送,應用程式之間的通訊服務,主要功能是資料格式化、資料確認和丟失重傳燈。如傳輸控制通訊協定(TCP)、使用者資料包通訊協定(UDP)等,TCP和UDP給資料包加入傳輸資料並把它傳輸到下一層中,這一層負責傳送資料,並且確定資料已被送達並接收。
互連網路層:負責提供基本的資料封包傳送功能,讓每一塊資料包都能夠到達目的主機(但不檢查是否被正確接收),如網際協議(IP)。
網路介面層(主機-網路層):接收IP資料報並進行傳輸,從網路上接收物理幀,抽取IP資料報轉交給下一層,對實際的網路媒體的管理,定義如何使用實際網路(如Ethernet、Serial Line等)來傳送資料。
在 TCP/IP 中包含一系列用於處理資料通訊的協議:
TCP (傳輸控制通訊協定) - 應用程式之間通訊 UDP (使用者資料包協議) - 應用程式之間的簡單通訊 IP (網際協議) - 電腦之間的通訊 ICMP (網際網路訊息控制協議) - 針對錯誤和狀態 DHCP (動態主機設定通訊協定) - 針對動態定址
協議採用分層結構,因此,資料報文也採用分層封裝的方法。下面以應用最廣泛的乙太網路為例說明其資料報文分層封裝,如下所示:
┏━━━━━━━━━━┓
┃TCP前序 │ TCP資料區┃TCP
┗━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━┓
┃ IP前序┃.........IP資料區.............┃IP
┗━━━━━━━━━━━━━━━┛ ┏━━━━━━━━━━━━━━━━━━━┓
┃ 幀頭┃................幀資料區......................┃ETH
┗━━━━━━━━━━━━━━━━━━━┛
任何通訊協議都有獨特的報文格式,TCP/IP協議也不例外。對於通訊協議編程,我們首先要清楚其報文格式。由於TCP/IP協議採用分層模型,各層都有專用的前序,以下就簡單介紹乙太網路下TCP/IP各層報文格式。
什麼是TCP協議
TCP是TCP/IP的傳輸層協議。TCP嚮應用層提供了一種可靠的連線導向的資料流傳輸服務。TCP將使用者資料打包構成報文段;它發送資料後啟動一個定時器;另一端對收到的資料進行確認,對失序的資料重新排序,丟棄重複資料; TCP提供端到端的流量控制,並計算和驗證一個強制性的端到端檢驗和。TCP通過三向交握來初始化的。
TCP報文格式如下:
0 7 8 15 16 23 24 31
┣┳┳┳┳┳┳┳╋┳┳┳┳┳┳┳╋┳┳┳┳┳┳╋┳┳┳┳┳┳┳┫
┃ 源連接埠 ┃ 目的連接埠 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫
┃ 順 序 號 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫ ┃ 確 認 號 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫
┃頭長度┃ U A P R S F│ 視窗大小 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫
┃ 校 驗 和 ┃ 緊 急 指 針 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫
┃ 可選項(0或多個32bit) ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫
┃ 數 據 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫
1.源連接埠、目的連接埠:16bit,標識出遠端和本地的連接埠號碼。
2.順序號:32bit,標識發送的資料包順序。
3.確認號:32bit,希望收到的下一個資料包的序號。
4.TCP頭長:4bit,表明TCP頭包含多少個32bit。
5.6bit保留未用。
6.URG:緊急指標,表明發送端向另一端使用緊急方式發送資料。(6-11都只佔1bit)
7.ACK:ACK位置1表明確認號合法的;如果ACK為0,那麼資料包不包含確認資訊,確認欄位被省略。
8.PSH:表示帶有PUSH標誌的資料。因此請求資料包一到接收可送往應用程式而不必等到緩衝區裝滿時才傳送。
9.RST:用於複位由於主機崩潰或其它原因而出現的錯誤串連,還可以用於拒絕非法的資料包或拒絕請求。
10.SYN:用於建立串連用。
11.FIN:用於釋放串連。
12.視窗大小:16bit,視窗大小欄位表示在確認了位元組之後還可以發多少位元組。
13.校正和:16bit,是為了確保高可靠性而設計的。
14.可選項:0或多個32bit,包括最大TCP載荷、視窗比例、選擇重發資料包等選項。
什麼是UDP協議
UDP是一個簡單的面向資料報的運輸層協議,是一種面向不需連線的不可靠傳輸協議,不需要通過3次握手來建立串連。UDP有不提供資料包分組、組裝和不能對資料包進行排序的缺點,也就是說,當報文發送之後,是無法得知其是否安全完整到達的。
UDP報文格式如下:
0 7 8 15 16 23 24 31
┣┳┳┳┳┳┳┳╋┳┳┳┳┳┳┳╋┳┳┳┳┳┳╋┳┳┳┳┳┳┳┫
┃ 源連接埠 ┃ 目的連接埠 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫
┃ UDP長度 ┃ UDP校正和 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫ ┃ ┃
┃ 數 據 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫
什麼是IP協議
IP協議位於網路層,它提供了不可靠的、不需連線的資料報傳輸機制。TCP/IP是為了適應物理網路的多樣性而設計的,而這種適應性主要是通過IP層來體現的。由於物理網路的多樣性,各種物理網路的資料框架格式、地址格式之間的差異很大。為了將這些底層的細節屏蔽起來,使得採用不同物理網路的網路之間進行通訊, TCP/IP分別採用了IP資料報和IP地址作為物理資料幀與物理地址的統一描述形式。這樣IP向上層提供統一的IP資料報和統一的IP地址,使得各種物理幀及物理地址的差異性對上層協議不複存在。
IP資料前序格式如下: