先看下面這個圖程序員
網絡由下往上分爲編程
物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。網絡
通常咱們都知道IP協議對應於網絡層,TCP對應於傳輸層、http協議對應於應用層,三者這這間沒有對比性。socket
socket是對TCP/IP協議的封裝和應用,也能夠說,TCP/IP協議是傳輸層協議,主要解決數據如何在網絡中傳輸的函數
http協議是應用層協議,主要解決如何包裝數據spa
關於TCP/IP和HTTP協議的關係,網絡有一段比較容易理解的介紹:設計
「咱們在傳輸數據時,能夠只使用(傳輸層)TCP/IP協議,可是那樣的話,若是沒有應用層,便沒法識別數據內容。接口
若是想要使傳輸的數據有意義,則必須使用到應用層協議。it
應用層協議有不少,好比HTTP、FTP、TELNET等,也能夠本身定義應用層協議。程序
WEB使用HTTP協議做應用層協議,以封裝HTTP文本信息,而後使用TCP/IP作傳輸層協議將它發到網絡上。」
而咱們平時說的最多的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等等。