1. 程式人生 > >HTTP/TCP/UDP/Socket理解

HTTP/TCP/UDP/Socket理解

HTTP

中文名:超文字傳輸協議(HyperText Transfer Protocol)是網際網路上應用最為廣泛的一種網路協議,是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的連線方式。HTTP 是一種請求/響應式的協議,讓客戶端和伺服器進行有效的溝通。一個客戶端與伺服器建立連線後,傳送一個請求給伺服器;伺服器接到請求後,給予相應的響應資訊。

 

HTTP 協議的特點

 

  • 簡單方便快速

 

   因為HTTP協議比較簡單,所以HTTP伺服器的程式規模相對比較小,從而使得通訊的速度非常快。

 

  • 靈活

 

   Http協議允許客戶端和伺服器端傳輸任意型別任意格式的資料物件。

 

  • HTTP 0.91.0使用非持續連線

 

   非持續連線的含義是每次建立的連線只處理一個客戶端請求。

   當伺服器處理完客戶端的請求之後,並且收到客戶的反饋應答後,伺服器端立即斷開連線。採用這種通訊方式可以大大的節省傳輸時間。

 

  • HTTP 1.1使用持續連線

 

   不必為每個web物件建立一個新的連線,一個連線可以傳送多個物件

 

  •  面向無狀態

 

   Http是無狀態的協議。所謂的無狀態是指協議對於請求的處理沒有記憶功能。無狀態意味著如果要再次處理先前的資訊,則這些先前的資訊必須要重傳,這就導致了資料量傳輸的增加。

 

TCP

 

 

TCP(傳輸控制協議)是基於連線的協議,也就是說,在正式收發資料前,必須和對方建立可靠的連線。一個TCP連線必須要經過三次“對話”才能建立起來,我們來看看這三次對話的簡單過程:1.客戶端向伺服器發出連線請求資料包;2.伺服器傳送同意連線和要求同步(同步就是兩臺主機一個在傳送,一個在接收,協調工作)的資料包;3.

客戶端再發出一個數據包確認與伺服器的要求同步。三次“對話”的目的是使資料包的傳送和接收同步,經過三次“對話”之後,客戶端才向伺服器正式傳送資料。

 

UDP

UDP(使用者資料報協議)是與TCP相對應的協議。它是面向非連線的協議,它不與對方建立連線,而是直接就把資料包傳送過去!UDP適用於一次只傳送少量資料、對可靠性要求不高的應用環境。

 

Socket

 

>  Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個呼叫介面(API),通過Socket,我們才能使用TCP/IP協議。Socket的出現只是使得程式設計師更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而形成了我們知道的一些最基本的函式介面。

 

>  Socket是一個針對TCP和UDP程式設計的介面,你可以藉助它建立TCP連線等等。而TCP和UDP協議屬於傳輸層 。

而http是個應用層的協議,它實際上也建立在TCP協議之上。你可以這樣理解,HTTP是轎車,提供了封裝或者顯示資料的具體形式;Socket是發動機,提供了網路通訊的能力。

 

 

>  利用Socket建立網路連線的步驟

建立Socket連線至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket ,另一個運行於伺服器端,稱為ServerSocket 。

套接字之間的連線過程分為三個步驟:伺服器監聽,客戶端請求,連線確認。

1伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態,等待客戶端的連線請求。

2客戶端請求:指客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連線請求。

3連線確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求時,就響應客戶端套接字的請求,建立一個新的執行緒,把伺服器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連線。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。