tcp、udp、http、socket

網絡結構:

網絡由下往上分爲物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。

TCP/IP協議組:

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

在網絡層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。
在傳輸層中有TCP協議與UDP協議。
在應用層有FTP、HTTP、TELNET、SMTP、DNS等協議。

 

Http協議:

HTTP屬於應用層的協議,底層傳輸層仍然是tcp協議,http這個協議,是從Web服務器傳輸超文本到本地瀏覽器的傳送協議。

 

TCP/UDP

TCP和UDP屬於傳輸層的協議,一個是基於穩定確定的連接(類似打電話,對方接聽之後纔開始通話),一個是不基於穩定確定的連接(類似於留言,我反正發給你了,不確定你收不收得到).

 

TCP(Transmission Control Protocol,傳輸控制協議)。

TCP是基於連接的協議,“面向連接”就是在正式通信前必須要與對方建立起連接。比如你給別人打電話,必須等線路接通了、對方拿起話筒才能相互通話。也就是說,在正式收發數據前,必須和對方建立可靠的連接。一個TCP連接必須要經過三次“對話”才能建立起來,其中的過程非常複雜,我們這裏只做簡單、形象的介紹,你只要做到能夠理解這個過程即可。

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

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

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

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

三次“對話”的目的是使數據包的發送和接收同步,經過三次“對話”之後,主機A才向主機B正式發送數據。TCP協議能爲應用程序提供可靠的通信連接,使一臺計算機發出的字節流無差錯地發往網絡上的其他計算機,對可靠性要求高的數據通信系統往往使用TCP協議傳輸數據。

一個tcp連接要經過四次對話才能確認斷開,四次對話的過程如下:

 

UDP(User Data Protocol,用戶數據報協議)

UDP是與TCP相對應的協議。它是面向非連接的協議,它不與對方建立連接,而是直接就把數據包發送過去!

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

下表列出tcp與udp的對比情況:

 

 

tcp

udp

是否連接

面向連接

面向非連接

傳輸可靠性

可靠的

不可靠的

應用場合

傳輸大量的數據

少量數據

速度


socket 編程

我們平時說的最多的socket是什麼呢,實際上socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用接口(API)。通過Socket,我們才能使用TCP/IP協議。

  實際上,Socket跟TCP/IP協議沒有必然的聯繫。

  Socket編程接口在設計的時候,就希望也能適應其他的網絡協議。

  所以說,Socket的出現只是使得程序員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,

  從而形成了我們知道的一些最基本的函數接口,比如create、listen、connect、accept、send、read和write等等。

  CSDN上有個比較形象的描述:HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通信的能力。

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

 

 

 


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