1. 程式人生 > >TCP、UDP、HTTP、Socket之間的關係和相關知識

TCP、UDP、HTTP、Socket之間的關係和相關知識

一、計算機網路中的七層模型

網路由下往上分為物理層、資料鏈路層、網路層、傳輸層、會話層、表示層和應用層。

其中,TCP和UDP:傳輸層協議;HTTP:應用層協議;SOCKET:TCP/IP網路的API。

      TCP/IP代表傳輸控制協議/網際協議,指的是一系列協議。       IP協議對應於網路層,TCP協議對應於傳輸層,HTTP協議對應於應用層,三者從本質上來說沒有可比性,socket則是對TCP/IP協議的封裝和應用。       可以說,TPC/IP協議是傳輸層協議,主要解決資料如何在網路中傳輸,而HTTP是應用層協議,主要解決如何包裝資料。          Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個呼叫介面(API),通過Socket,我們才能使用TCP/IP協議。實際上,Socket跟TCP/IP協議沒有必然的聯絡。Socket程式設計介面在設計的時候,就希望也能適應其他的網路協議。所以說,Socket的出現只是使得程式設計師更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而形成了我們知道的一些最基本的函式介面,比如create、 listen、connect、accept、send、read和write等等。

       實際上,傳輸層的TCP是基於網路層的IP協議的,而應用層的HTTP協議又是基於傳輸層的TCP協議的,而Socket本身不算是協議,就像上面所說,它只是提供了一個針對TCP或者UDP程式設計的介面。

二、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是面向連結的,雖然說網路的不安全不穩定特性決定了多少次握手都不能保證連線的可靠性,但TCP的三次握手在最低限度上(實際上也很大程度上保證了)保證了連線的可靠性;而UDP不是面向連線的,UDP傳送資料前並不與對方建立連線,對接收到的資料也不傳送確認訊號,傳送端不知道資料是否會正確接收,當然也不用重發,所以說UDP是無連線的、不可靠的一種資料傳輸協議。

      也正由於上面的特點,使得UDP的開銷更小資料傳輸速率更高,因為不必進行收發資料的確認,所以UDP的實時性更好。所以採用TCP傳輸協議的MSN比採用UDP的QQ傳輸檔案慢,但並不能說QQ的通訊是不安全的,因為程式設計師可以手動對UDP的資料收發進行驗證,比如傳送方對每個資料包進行編號然後由接收方進行驗證啊什麼的,即使是這樣,UDP因為在底層協議的封裝上沒有采用類似 TCP的“三次握手”而實現了TCP所無法達到的傳輸效率。

三、TCP和UDP的優缺點及區別

     TCP的優點:可靠,穩定。TCP的可靠體現在TCP在傳遞資料之前,會有三次握手來建立連線,而且在資料傳遞時,有確認、視窗、重傳、擁塞控制機制,在資料傳完後,還會斷開連線用來節約系統資源。       TCP的缺點:慢,效率低,佔用系統資源高,易被攻擊。TCP在傳遞資料之前,要先建連線,這會消耗時間,而且在資料傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每臺裝置上維護所有的傳輸連線,事實上,每個連線都會佔用系統的CPU、記憶體等硬體資源。 而且,因為        TCP有確認機制、三次握手機制,這些也導致TCP容易被人利用,實現DOS、DDOS、CC等攻擊。

      UDP的優點: 快,比TCP稍安全。 UDP沒有TCP的握手、確認、視窗、重傳、擁塞控制等機制,UDP是一個無狀態的傳輸協議,所以它在傳遞資料時非常快。沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。但UDP也是無法避免攻擊的,比如:UDP Flood攻擊等等。

      UDP的缺點: 不可靠,不穩定。因為UDP沒有TCP那些可靠的機制,在資料傳遞時,如果網路質量不好,就會很容易丟包。 

      基於上面的優缺點,那麼: 什麼時候應該使用TCP? 當對網路通訊質量有要求的時候,比如:整個資料要準確無誤的傳遞給對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸檔案的協議,POP、SMTP等郵件傳輸的協議。  在日常生活中,常見使用TCP協議的應用如下:  瀏覽器用的HTTP, FlashFXP用的FTP,Outlook用的POP、SMTP,Putty用的Telnet、SSH。 什麼時候應該使用UDP?當對網路通訊質量要求不高的時候,要求網路通訊速度能儘量的快,這時就可以使用UDP。 比如,日常生活中,常見使用UDP協議的應用如下: QQ語音、QQ視訊、TFTP 。