socket、tcp、udp、http 的認識及區別

一、先來一個講TCP、UDP和HTTP關係的

1、TCP/IP是個協議組,可分爲三個層次:網絡層、傳輸層和應用層。

在網絡層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。 在傳輸層中有TCP協議與UDP協議。

在應用層有FTP、HTTP、TELNET、SMTP、DNS等協議。

因此,HTTP本身就是一個協議,是從Web服務器傳輸超文本到本地瀏覽器的傳送協議。

 

2、HTTP協議是建立在請求/響應模型上的。

首先由客戶建立一條與服務器的TCP鏈接,併發送一個請求到服務器,

請求中包含請求方法、URI、協議版本以及相關的MIME樣式的消息。

服務器響應一個狀態行,包含消息的協議版本、一個成功和失敗碼以及相關的MIME式樣的消息。

HTTP/1.0爲每一次HTTP的請求/響應建立一條新的TCP鏈接,

因此一個包含HTML內容和圖片的頁面將需要建立多次的短期的TCP鏈接。

一次TCP鏈接的建立將需要3次握手。

另外,爲了獲得適當的傳輸速度,則需要TCP花費額外的迴路鏈接時間(RTT)。

每一次鏈接的建立需要這種經常性的開銷,而其並不帶有實際有用的數據,只是保證鏈接的可靠性,因此HTTP/1.1提出了可持續鏈接的實現方法。

HTTP/1.1將只建立一次TCP的鏈接而重複地使用它傳輸一系列的請求/響應消息,因此減少了鏈接建立的次數和經常性的鏈接開銷。

 

3、結論:

雖然HTTP本身是一個協議,但其最終還是基於TCP的。不過,目前,有人正在研究基於TCP+UDP混合的HTTP協議。

Socket是什麼呢?Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,

Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket接口後面,

對用戶來說,一組簡單的接口就是全部,讓Socket去組織數據,以符合指定的協議。

HTTP、TCP、UDP、Socket <wbr> <wbr> <wbr>(轉)

 

二、TCP、UDP、HTTP、SOCKET之間的區別

TCP和UDP:傳輸層協議;

HTTP:應用層協議;

SOCKET:TCP/IP網絡的API。

TCP/IP代表傳輸控制協議/網際協議,指的是一系列協議。

TCP和UDP使用IP協議從一個網絡傳送數據包到另一個網絡。把IP想像成一種高速公路,它允許其它協議在上面行駛並找到到其它電腦的出口。

TCP和UDP是高速公路上的“卡車”,它們攜帶的貨物就是像HTTP,文件傳輸協議FTP這樣的協議等。

TCP和UDP是FTP、HTTP和SMTP之類使用的傳輸層協議。

雖然TCP和UDP都是用來傳輸其他協議的,它們卻有一個顯著的不同:TCP提供有保證的數據傳輸,而UDP不提供。

這意味着TCP有一個特殊的機制來確保數據安全的不出錯的從一個端點傳到另一個端點,而UDP不提供任何這樣的保證。

HTTP(超文本傳輸協議)是利用TCP在兩臺電腦(通常是Web服務器和客戶端)之間傳輸信息的協議。

客戶端使用Web瀏覽器發起HTTP請求給Web服務器,Web服務器發送被請求的信息給客戶端。

記住,需要IP協議來連接網絡;TCP是一種允許我們安全傳輸數據的機制,使用TCP協議來傳輸數據的HTTP是Web服務器和客戶端使用的特殊協議。

Socket 接口是TCP/IP網絡的API,Socket接口定義了許多函數或例程,用以開發TCP/IP網絡上的應用程序。

 

三、socket、tcp、udp、http 的認識及區別

網絡由下往上分爲物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。
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所無法達到的傳輸效率。  

原文地址:https://www.cnblogs.com/chengzhengfu/p/4584510.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章