1. 程式人生 > >minGW_Lee on the way

minGW_Lee on the way

學習java網路程式設計一段時間後,突然被問到socket是什麼?回答不上來,感覺很尷尬,於是趕緊是查閱資料。

網路由下往上分為 物理層 、資料鏈路層 、 網路層 、 傳輸層 、 會話層 、 表現層 和 應用層。

通過初步瞭解,我知道IP協議對應於網路層,TCP協議對應於傳輸層,而HTTP協議對應於應用層。

TCP/IP協議是傳輸層協議,主要解決資料如何在網路中傳輸,而HTTP協議是應用層協議,主要解決如何包裝資料。

關於TCP/IP和HTTP協議的關係,網路有一段比較容易理解的介紹:

  “我們在傳輸資料時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用層,便無法識別資料內容。如果想要使傳輸的資料有意義,則必須使用到應用層協議。
  應用層協議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應用層協議。
  WEB使用HTTP協議作應用層協議,以封裝HTTP文字資訊,然後使用TCP/IP做傳輸層協議將它發到網路上

。”

什麼是Socket

那麼我們平時說的最多的socket是什麼呢,實際上socket是對TCP/IP協議的封裝,它的出現只是使得程式設計師更方便地使用TCP/IP協議棧而已。socket本身並不是協議,它是應用層與TCP/IP協議族通訊的中間軟體抽象層,是一組呼叫介面(TCP/IP網路的API函式)

socket在哪裡

網路有一段關於socket和TCP/IP協議關係的說法比較容易理解:

  “TCP/IP只是一個協議棧,就像作業系統的執行機制一樣,必須要具體實現,同時還要提供對外的操作介面。
  這個就像作業系統會提供標準的程式設計介面,比如win32程式設計介面一樣。
  TCP/IP也要提供可供程式設計師做網路開發所用的介面,這就是Socket程式設計介面

。”

HTTP是轎車,提供了封裝或者顯示資料的具體形式;
Socket是發動機,提供了網路通訊的能力。

  實際上,傳輸層的TCP是基於網路層的IP協議的,而應用層的HTTP協議又是基於傳輸層的TCP協議的,而Socket本身不算是協議,就像上面所說,它只是提供了一個針對TCP或者UDP程式設計的介面。