懵逼的HTTP Socket與TCP

2021-09-19 22:17:13 字數 1444 閱讀 8495

http、socket、tcp這三個概念在網路開發中經常被提及,也是比較容易被混淆的概念,這三者在tcp/ip協議族中的位置關係:

三者的位置關係.png

其中,http是應用層的協議,也是開發中最常用的乙個網路協議;tcp是傳輸層的協議,大學學過計算機網路的都知道,該層還有乙個udp協議;而socket是從傳輸層上抽象出來的,採用ip位址加埠號的形式來標識,並不是傳統意義上的網路協議,所以從協議簇來說,三者還是很好區分的。那麼http連線、tcp連線、socket連線有什麼區別?

1、tcp連線與http連線

在網路分層中,http協議是基於tcp協議的,客戶端向服務端傳送乙個http請求時,需要先與服務端建立tcp連線,也就是經典的三次握手(通常對使用者來說是很難察覺的),握手成功以後才能進行資料互動。http是基於請求響應模式且無狀態的協議,1.1之前只支援短連線,也就是請求響應一次以後連線中斷,下次請求需要重新進行tcp連線,而1.1之後支援持長連線,即進行一次tcp連線以後,客戶端可以傳送多次的http請求給伺服器端。

小結:http基於tcp

2、tcp連線與socket連線

socket是應用層與傳輸層之間的同乙個抽象層,它是一套介面,所以socket連線可以基於tcp連線,也有可能基於udp。我們知道,tcp協議是可靠的,udp協議是不可靠的,那麼基於tcp協議的socket連線同樣是可靠的;基於udp協議的socket連線是不可靠的,大多數的即時通訊工具都是基於後者實現的。

小結:socket可基於tcp,亦可udp

3、http連線與socket連線

http 1.1之前是短連線,基於tcp協議的socket連線是長連線,雖然http1.1開始支援長連線,但不像socket連線一旦建立,除非一方主動斷開,否則連線狀態一直保持。(網友ttdevs向我補充:基於tcp的socket可能是短連線,也可能是長連線,長連線可能需要通過心跳等一些手段來維持,各自有不同的應用場景。而不是簡單的"基於tcp協議的socket連線是長連線"。後在網上查詢了相關資料,有這麼一句:"在tcp連線保持期間,如果沒有資料報傳送,定時傳送資料報(心跳),以維持連線狀態。"因為我自己沒做過這塊的具體工作,如果有大神可以詳解,歡迎指正!)

http連線中,只有客戶端發起請求後服務端才會響應,服務端是無法主動向客戶端發訊息的。而socket連線中,通訊雙方傳送訊息並沒有先後的限制,通訊雙方中的任何一方可以隨時向另一方傳送訊息。

用socket:大部分即時通訊應用(知乎上說qq有部分功能是基於tcp,因為tcp每次都需要三次握手,雖然可靠但是網路不好的時候就慘了)、聊天室(基於udp+訊息廣播的方式)、大檔案傳輸等。

一臉懵逼的Socket http對比

標籤 空格分隔 http tcp 今天整理一下已經懵逼好久的socket,http。想要弄清出他們的區別,首先要弄清一下tcp ip協議。每一抽象層建立在低一層提供的服務上,並且為高一層提供服務,看起來大概是這樣子的每一抽象層建立在低一層提供的服務上,並且為高一層提供服務,看起來大概是這樣子的 這樣...

一臉懵逼的演算法系列之漢諾塔

法國數學家愛德華 盧卡斯曾編寫過乙個印度的古老傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金片 一次只移動一片,...

研究生的苦逼與安逸

明天打算回家,在回家之前對我已經過去的生活做個總結。12年考入本985高校的時候,是高調的,自豪的,對這即將的三年學習時間充滿了憧憬和嚮往,qq空間裡面轉的全是怎樣有效地度過研究生,如何寫高質量 之類的文章,每天的說說動態也是矯情造作的,想引人注目的,自以為很有個性的。第一學期屬於適應期,經歷9個月...