HTTP 協議對應於應用層,Socket 則是對 TCP/IP 協議的封裝和應用(程序員層面上)。
HTTP 是應用層協議,主要解決如何包裝數據。而我們平時說的最多的 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 等。
網絡有一段關於 Socket 和 TCP/IP 協議關係的說法比較容易理解:“TCP/IP 只是一個協議棧,就像操作系統的運行機制一樣,必須要具體實現,同時還要提供對外 的操作接口。
這個就像操作系統會提供標準的編程接口,比如 win32 編程接口一樣,TCP/IP 也要提供可供程序員做網絡開發所用的接口,這就是 Socket 編程接口。”
TCP/IP、Http、Socket 三者的關係
CSDN上有個比較形象的描述:
HTTP 是轎車,提供了封裝或者顯示數據的具體形式; Socket 是發動機,提供了網絡通信的能力。
實際上,傳輸層的 TCP 是基於網絡層的IP協議的,應用層 HTTP 協議又是基於傳輸層的 TCP 協議;
Socket 本身不算是協議,就像上面所說,它只是提供了一個針對 TCP 或者 UDP 編程的接口。

利用 Socket 建立網絡連接的步驟
建立 Socket 連接至少需要一對套接字,其中一個運行於客戶端,稱為 ClientSocket ,另一個運行於服務器端,稱為 ServerSocket 。
套接字之間的連接過程分為三個步驟:服務器監聽,客戶端請求,連接確認。
1、服務器監聽:服務器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網絡狀態,等待客戶端的連接請求。
2、客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然後就向服務器端套接字提出連接請求。
3、連接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發給 客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。而服務器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。
HTTP 鏈接的特點
HTTP協議是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。
HTTP連接最顯著的特點是客戶端發送的每次請求 都需要服務器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為“一次連接”。
閱讀更多 三旺通信 的文章