Socket、TCP/IP、HTTP、FTP及網路程式設計

twc829發表於2016-04-29

1 TCP/IP協議族

1.1 TCP/IP協議(傳輸控制協議)由網路層的IP協議和傳輸層的TCP協議組成;

IP層負責網路主機的定位,資料傳輸的路由,由IP地址可唯一確定Internet上的一臺主機;

TCP層負責面向應用的可靠的或非可靠的資料傳輸機制,這是網路程式設計的主要物件。

1.2 TCP/IP是個協議族,分為三個層次:

網路層:IP協議、ICMP協議、ARP協議、RARP協議、BOOTP協議

傳輸層:TCP協議、UDP協議

應用層:FTP、HTTP、TELNET、SMTP、DNS等協議


HTTP是應用層協議,其傳輸都是被包裝成TCP協議傳輸。可以用SOCKET實現HTTP。SOCKET是實現傳輸層協議的一種程式設計API,可以是TCP,也可以使UDP。

2 TCP

TCP(傳輸控制協議),提供面向連線、可靠的位元組流服務。當客戶和伺服器彼此交換資料前,必須先在雙方之間建立以TCP連線才可傳輸資料。TCP提供超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。理想狀態下,TCP連線一旦建立,在通訊雙方中的任何一方主動關閉連線前,TCP連線都將被一直保持下去。斷開連線時伺服器和客戶端均可以主動發起斷開TCP連線的請求。

TCP市一中面積相連線的保證可靠傳輸的協議。通過TCP協議傳輸,得到一個順序的無差錯的資料流。傳送方和接收方的成對的兩個socket之間必須建立連線,以便在TCP協議的基礎上進行通訊,當一個socket等待建立連線時,另一個socket可以要求進行連線,一旦這兩個socket連線起來,它們就可以進行雙向資料傳輸,雙方都可進行傳送或接收操作。

TCP特點:

TCP是面向連線的協議,通過三次握手建立連線,通訊完成時要拆除連線,由於TCP是面向連線協議,所以只能用於點對點的通訊,並建立連線也消耗時間和開銷;

TCP傳輸資料無大小限制,進行大資料傳輸;

TCP是一個可靠的協議,它能保證接收方能完整正確地接收到傳送方傳送的全部資料;

要了解TCP,一定要知道“三次握手、四次拜拜”。”三次握手“是傳送資料前必須建立的連線,握完手才開始傳送。

第一次握手:客戶端傳送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;

第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時傳送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;

第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=k+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手;

適用情況:

TCP傳送的包有序號,對方收到包後要給一個反饋,若超過一定時間還沒收到反饋就自動執行超時重發,因此TCP最大優點是可靠。一般網頁HTTP、郵件SMTP、遠端連線TELNET、檔案FTP傳送就用TCP。

TCP在網路通訊商有極強的生命力,如遠端連線TELNET和檔案傳輸FTP都需要不定長度的資料被可靠傳輸。但可靠傳輸是要付出代價的,對資料內容正確性的檢驗必然佔用計算機的處理時間和網路的頻寬,因此TCP傳輸的效率不如UDP高。

3 UDP

UDP(使用者資料包協議),是一個無連線的簡單的面向資料包的運輸層協議。UDP不提供可靠性,它只是把應用程式傳給IP層的資料包傳送出去,但是並不能保證它們能到達目的地。由於UDP在傳輸資料包前不用在客戶和伺服器之間建立一個連線,且沒有超時重發等機制,因此傳輸速度很快。

UDP是一種面向無連線的協議,每個資料包都是一個獨立的資訊,包括完整的源地址或目的地址,它在網路上以任何可能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內容的正確性都是不能保證的。

UDP特點:

UDP是面向無連線的通訊協議,UDP資料包括目的埠號、源埠號資訊,由於通訊不需要連線,所以可實現廣播傳送;

UDP傳輸資料時有大小限制,每個被傳輸的資料包必須限定在64KB內;

UDP是一個不可靠的協議,傳送方所傳送的資料包並不一定以相同次序到達接收方;

適用情況:

UDP是面向訊息的協議,通訊時不需要建立連線,資料的傳輸自然是不可靠的,UDP一般用於多點通訊和實時的資料業務,如語音廣播、視訊、QQ、TFTP(簡單檔案傳送)、SNMP(簡單網路管理協議)、RTP(實時傳送協議)、RIP(路由資訊協議,如報告股票市場、航空資訊)、DNS(域名解釋)。注重速度流暢。

UDP操作簡單,且僅需要較少的監護,因此通常用於區域網高可靠性的分散系統中客戶端/伺服器應用程式。如視訊會議系統,並不需要音訊視訊資料絕對的正確,只要保證連貫性。

4 Socket

Socket也稱套接字,用於描述IP地址和埠,是一個通訊鏈的控制程式碼。網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個雙向鏈路的一段是一個socket,一個socket由一個IP地址和一個埠號唯一確定。應用程式通常通過套接字向網路發出請求或者應答網路請求。socket是TCP/IP協議的一個程式設計介面,但socket所支援的協議種類也不光TCP/IP一種,因此兩者之間沒有必然聯絡。在Java環境下,socket程式設計主要是基於TCP/IP協議的網路程式設計。













相關文章