tcp、http和socket的區別

一:tcp協議

tcp協議屬于傳輸層協議(UDP也屬于傳輸層協議,但是UDP協議是無狀態的)。建立一個TCP連接需要三次握手,斷開一個TCP連接需要四次揮手。手機能夠使用聯網功能,是因為手機底層實現了TCP/IP協議,使用手機終端通過無線網就可以與服務端建立一個tcp連接。TCP協議可以對上層網絡提供接口,使上層網絡數據的傳輸建立在“無差別”的網絡之上。

tcp建立連接需要三次握手:


圖1:tcp連接三次握手示意圖

如圖所示:客戶端要與服務端建立tcp連接,首先向服務端發送一個syn J信號,服務端收到此信號后向客戶端回答一個ACK J+1信號,并額外加了一個syn K信號,客戶端收到ACK J+1信號后就知道,服務端能收到我的信號,后面我客戶端就可以放心的發送數據給你服務端而不用擔心你服務端接收不到我發送的數據了。客戶端收到服務端發送的SYN K信號后,還需要向服務端回一個 ACK K+1信號,這樣服務端收到此信號就知道,我服務端給你客戶端發送的信號,你客戶端能夠收到,這樣我服務端就可以放心的給你客戶端發送數據而不用擔心你客戶端收不到自己發送的數據了。其實從上面的描述可以看到:建立連接完全可以跟斷開TCP連接一樣分四步走,只不過是把服務端的應答信號ACK和客戶端的認證請求信號SYNC這兩步做成一步走了。

tcp連接關閉時需要四次揮手:

圖2:tcp連接斷開時四次揮手示意圖

客戶端收到服務端的應答信號ACK M+1后,客戶端就知道:服務端知道我客戶端不會再發送數據包給你服務端了,你可以停止對我的監聽了。但是此時只是客戶端->服務端的單向流動停止了,另一個方向的流動:服務端->客戶端的數據發送還可以正常進行,直到服務端向客戶端發送FIN N揮手信號,客戶端向服務端回應ACK N+1信號,服務端才知道:客戶端知道我服務端不會再發送數據包給你客戶端了,你可以停止對我的監聽了。至此,客戶端->服務端的單向流動和服務端->客戶端的單向流動兩個方向都停止,可以關閉連接了。

二:http協議

http協議,簡稱超文本傳輸協議(Hypertext Transfer Protocol),是web應用程序的基礎,也是手機聯網常用的協議之一。http協議在tcp協議上面,屬于應用層協議。

http協議最顯著的特點就是:客戶端發送的每次請求,都需要服務端返回響應。客戶端收到服務端的響應后,主動關閉連接。一次TCP連接過程完成。

1)在HTTP1.0中,客戶端每發送一次請求都需要新建一個單獨的連接,得到服務端響應后,主動斷開本次連接。

1)在HTTP1.1中,可以在一次連接中處理多次請求(keep Alive,默認開啟),盡管有 Keep-Alive 機制可以復用,但在每個連接上同時只能有一個請求 / 響應,這意味著完成響應之前,這個連接不能用于其他請求。比如某個tcp連接的keep Alive的參數設置為:max=5,time_out=10s(本次連接最長存活時間為10s,最多請求次數為5次),則請求情況像下面這樣:

圖3:http1.1一次keep alive連接示意圖

而不是像這樣:

圖4:http1.1一次keep alive連接錯誤示意圖

從圖3中可以看到,如果瀏覽器需要向同一個域名發送多個請求,需要在本地維護一個 FIFO 隊列,完成一個再發送下一個。這樣,從服務端完成請求開始回傳,到收到下一個請求之間的這段時間,服務端處于空閑狀態。

后來,人們提出了 HTTP 管道(HTTP Pipelining)的概念,試圖把本地的 FIFO 隊列挪到服務端。它的原理是這樣的:瀏覽器一股腦把請求都發給服務端,然后等著就可以了。這樣服務端就可以在處理完一個請求后,馬上處理下一個,不會有空閑了。甚至服務端還可以利用多線程并行處理多個請求。但是由于一些原因,http1的管道技術使用得并不完美和普及。

http連接下,客戶端保持在線狀態的方法:客戶端每次建立http連接,得到服務端響應后,都會主動斷開連接,所以說http連接是短連接。那怎么保持客戶端的在線狀態呢?答案就是:客戶端需要不斷的向服務端發送連接請求。通常的做法是,客戶端也保持每隔一段固定的時間向服務器發送一次“保持連接”的請求,服務器在收到該請求后對客戶端進行回復,表明知道客戶端“在線”。若服務器長時間無法收到客戶端的請求,則認為客戶端“下線”,若客戶端長時間無法收到服務器的回復,則認為網絡已經斷開。

為什么說http連接是無狀態的?

【無狀態】能在其他資料中查到的說法有:

(1)協議對于事務處理沒有記憶能力,(2)對同一個url請求沒有上下文關系,(3)每次的請求都是獨立的,它的執行情況和結果與前面的請求和之后的請求是無直接關系的,它不會受前面的請求應答情況直接影響,也不會直接影響后面的請求應答情況,(4)服務器中沒有保存客戶端的狀態,客戶端必須每次帶上自己的狀態去請求服務器,(5)人生若只如初見,可以參考:http協議無狀態中的 狀態 到底指的是什么?!,文中經過分析理清了很多概念,以及之間的關系,推測出【狀態】的含義就是:客戶端和服務器在某次會話中產生的數據,從而【無狀態】就意味著,這些數據不會被保留。

三:socket

我們知道兩個進程如果需要進行通訊最基本的一個前提能能夠唯一的標示一個進程,在本地進程通訊中我們可以使用PID來唯一標示一個進程,但PID只在本地唯一,網絡中的兩個進程PID沖突幾率很大,這時候我們需要另辟它徑了,我們知道IP層的ip地址可以唯一標示主機,而TCP層協議和端口號可以唯一標示主機的一個進程,這樣我們可以利用ip地址+協議+端口號唯一標示網絡中的一個進程。

能夠唯一標示網絡中的進程后,它們就可以利用socket進行通信了,什么是socket呢?我們經常把socket翻譯為套接字,socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用已實現進程在網絡中通信。

圖5:socket通信系統模塊示意圖

tcp服務端和tcp客戶端使用socket通信的過程如下。從圖中可以看到,socket連接可以保持長連接。


圖6:基本socket客戶/服務端通信流程示意圖

注意的是,socket連接可以由客戶端主動關閉,也可以由服務端主動關閉。

關于在http之后為什么又出現了socket,請看我的另一片文章:C10k問題

參考借鑒:

《Unix網絡編程 卷I 套接字聯網API》

http://www.cnblogs.com/jiangshiyong/archive/2012/08/26/2657811.html

https://imququ.com/post/http2-and-wpo-2.html

http://blog.csdn.net/jenminzhang/article/details/47017741

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容