1. 程式人生 > >TCP、UDP和HTTP詳解

TCP、UDP和HTTP詳解

http:是用於www瀏覽的一個協議。 tcp:是機器之間建立連線用的到的一個協議。

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協議。

具體介紹

IP (網際協議)

在網路通訊中,網路元件的定址對資訊的路由選擇和傳輸來說是相當關鍵的。相同網路中的兩臺機器間的訊息傳輸有各自的技術協定。LAN 是通過提供6位元組的唯一識別符號(“MAC”地址)在機器間傳送訊息的。SNA 網路中的每臺機器都有一個邏輯單元及與其相應的網路地址。DECNET、AppleTalk 和 Novell IPX 均有一個用來分配編號到各個本地網和工作站的配置。

HTTP是超文字傳輸協議,是客戶端瀏覽器或其他程式與Web伺服器之間的應用層通訊協議。在Internet上的Web伺服器上存放的都是超文字資訊, 客戶機需要通過HTTP協議傳輸所要訪問的超文字資訊。HTTP包含命令和傳輸資訊,不僅可用於Web訪問,也可以用於其他因特網/內聯網應用系統之間的通訊,從而實現各類應用資源超媒體訪問的整合

TCP (傳輸控制協議)

通過序列化應答和必要時重發資料包,TCP 為應用程式提供了可靠的傳輸流和虛擬連線服務。TCP 主要提供資料流轉送,可靠傳輸,有效流控制,全雙工操作和多路傳輸技術。可查閱 TCP 部分獲取更多詳細資料。

至於HTTP協議,它是TCP協議族中的一種。使用TCP80埠

HTTP是應用層協議,TCP是傳輸層協議!

資料包在網路傳輸過程中,HTTP被封裝在TCP包內!!

1. TCP/UDP

面向連線的TCP

“面向連線”就是在正式通訊前必須要與對方建立起連線。比如你給別人打電話,必須等線路接通了、對方拿起話筒才能相互通話。

TCP(Transmission Control Protocol,傳輸控制協議)是基於連線的協議,也就是說,在正式收發資料前,必須和對方建立可靠的連線。一個TCP連線必須要經過三次“對話”才能建立起來,其中的過程非常複雜,我們這裡只做簡單、形象的介紹,你只要做到能夠理解這個過程即可。

我們來看看這三次對話的簡單過程:

1. 主機A向主機B發出連線請求資料包:“我想給你發資料,可以嗎?”,這是第一次對話;

2. 主機B向主機A傳送同意連線和要求同步(同步就是兩臺主機一個在傳送,一個在接收,協調工作)的資料包:“可以,你什麼時候發?”,這是第二次對話;

3. 主機A再發出一個數據包確認主機B的要求同步:“我現在就發,你接著吧!”,這是第三次對話。

三次“對話”的目的是使資料包的傳送和接收同步,經過三次“對話”之後,主機A才向主機B正式傳送資料。

TCP協議能為應用程式提供可靠的通訊連線,使一臺計算機發出的位元組流無差錯地發往網路上的其他計算機,對可靠性要求高的資料通訊系統往往使用TCP協議傳輸資料。

我們來做一個實驗,用計算機A(安裝Windows 2000 Server作業系統)從“網路上的芳鄰”上的一臺計算機B拷貝大小為8,644,608位元組的檔案,通過狀態列右下角網絡卡的傳送和接收指標就會發現:雖然是 資料流是由計算機B流向計算機A,但是計算機A仍傳送了3,456個數據包,如圖2所示。這些資料包是怎樣產生的呢?因為檔案傳輸時使用了TCP/IP協 議,更確切地說是使用了面向連線的TCP協議,計算機A接收資料包的時候,要向計算機B回發資料包,所以也產生了一些通訊量。

如果事先用網路監視器監視網路流量,就會發現由此產生的資料流量是9,478,819位元組,比檔案大小多出10.96%(如圖3所示),原因不僅在於資料包和幀本身佔用了一些空間,而且也在於TCP協議面向連線的特性導致了一些額外的通訊量的產生。

面向非連線的UDP協議

“面向非連線”就是在正式通訊前不必與對方先建立連線,不管對方狀態就直接傳送。這與現在風行的手機簡訊非常相似:你在發簡訊的時候,只需要輸入對方手機號就OK了。

UDP(User Data Protocol,使用者資料報協議)是與TCP相對應的協議。它是面向非連線的協議,它不與對方建立連線,而是直接就把資料包傳送過去!

UDP 適用於一次只傳送少量資料、對可靠性要求不高的應用環境。比如,我們經常使用“ping”命令來測試兩臺主機之間TCP/IP通訊是否正常,其實 “ping”命令的原理就是向對方主機發送UDP資料包,然後對方主機確認收到資料包,如果資料包是否到達的訊息及時反饋回來,那麼網路就是通的。例如, 在預設狀態下,一次“ping”操作傳送4個數據包。大家可以看到,傳送的資料包數量是4包,收到的也是4包(因為對方主機收到後會發回一 個確認收到的資料包)。這充分說明了UDP協議是面向非連線的協議,沒有建立連線的過程。正因為UDP協議沒有連線的過程,所以它的通訊效果高;但也正因為如此,它的可靠性不如TCP協議高。QQ就使用UDP發訊息,因此有時會出現收不到訊息的情況。

                              附表:tcp協議和udp協議的差別

TCP UDP
是否連線 面向連線 面向非連線
傳輸可靠性 可靠 不可靠
應用場合 傳輸大量的資料,對可靠性要求較高的場合 傳送少量資料、對可靠性要求不高的場景
速度

TCP協議和UDP協議各有所長、各有所短,適用於不同要求的通訊環境。