理解HTTP,TCP,UDP,Socket,WebSocket

從分層上來區分,HTTP,WebSocket是應用層協議,TCP,UDP是傳輸層協議,IP是網絡層協議。
1.TCP和UDP瀏覽器

TCP是面向鏈接的一種傳輸控制協議。TCP鏈接以後,客戶端和服務器能夠互相發送和接收消息,在客戶端或者服務器沒有主動斷開以前,鏈接一直存在,故稱爲長鏈接。特色:鏈接有耗時,傳輸數據無大小限制,準確可靠,先發先至。
UDP是無鏈接的用戶數據報協議,所謂的無鏈接就是在傳輸數據以前不須要交換信息,沒有握手創建鏈接的過程,只須要直接將對應的數據發送到指定的地址和端口就行。故UDP的特色是不穩定,速度快,可廣播,通常數據包限定64KB以內,先發未必先至。
2.HTTP服務器

HTTP是基於TCP協議的應用,請求時需創建TCP鏈接,並且請求包中須要包含請求方法,URI,協議版本等信息,請求結束後斷開鏈接,完成一次請求/響應操做。故稱爲短鏈接。
而HTTP/1.1中的keep-alive所保持的長鏈接則是爲了優化每次HTTP請求中TCP鏈接三次握手的麻煩和資源開銷,只創建一次TCP鏈接,屢次的在這個通道上完成請求/響應操做。
值得一提的是,服務器沒法主動給客戶端推送消息。
3.WebSocket網絡

WebSocket也是一種協議,而且也是基於TCP協議的。具體流程是WebSocket經過HTTP先發送一個標記了 Upgrade 的請求,服務端解析後開始創建TCP鏈接,省去了HTTP長鏈接每次請求都要上傳header的冗餘,能夠理解爲WebSocket是HTTP的優化,但WebSocket不單單在Web應用程序上獲得支持。
4.Socket鏈接和TCP鏈接優化

其實這就是一個文字遊戲而已,創建Socket鏈接須要至少一對Socket(套接字),而建立Socket鏈接能夠指定不一樣的傳輸層協議,即TCP或UDP,因此當採用TCP創建鏈接時,該Socket鏈接就視爲一個TCP鏈接。而採用UDP則是無鏈接的。
5.Socket和WebSocketspa

這兩個雖然名字差很少,但倒是兩個徹底不一樣的概念,就比如Java和JavaScript同樣毫無關係。Socket是一套協議封裝後的接口,用於創建Socket鏈接,而WebSocket雖然是Html5的產物,但也不單單侷限於瀏覽器的應用程序,許多語言都提供了WebSocket的支持,好比C,C++,Python等。
6.HTTP、WebSocket與TCP的關係blog

HTTP通訊過程屬於「你推一下,我走一下」的方式,客戶端不發請求則服務器永遠沒法發送數據給客戶端,而WebSocket則在進行第一次HTTP請求以後,其餘所有采用TCP通道進行雙向通信。因此,HTTP和WebSocket雖都是基於TCP協議,可是二者屬於徹底不一樣的兩種通信方式。接口

圖片描述

相關文章
相關標籤/搜索