[TOC]
[最好的網絡協議書,都幫你選好了](https://www.jianshu.com/p/a25c1bfcda65)
# IP協議、TCP協議、HTTP協議
網絡由上往下分為:
1. 應用層
2. 表示層
3. 會話層
4. 傳輸層
5. 網絡層
6. 數據鏈路層
7. 物理層
OSI\[開放式系統互聯參考模型(Open System Interconnect Reference Model)\]
通過初步的了解,我知道**IP協議**對應于網絡層,**TCP協議**對應于傳輸層,而**HTTP協議**對應于應用層,
**三者從本質上來說沒有可比性:**
socket則是對TCP/IP協議的封裝和應用(程序員層面上)。
也可以說,TPC/IP協議是傳輸層協議,主要解決數據如何在網絡中傳輸,
而HTTP是應用層協議,主要解決如何包裝數據。
> 關于TCP/IP和HTTP協議的關系,網絡有一段比較容易理解的介紹:
“我們在傳輸數據時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如果沒有應用層,便無法識別數據內容。如果想要使傳輸的數據有意義,則必須使用到應用層協議。應用層協議有很多,比如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等等。
> 網絡有一段關于socket和TCP/IP協議關系的說法比較容易理解:
“TCP/IP只是一個協議棧,就像操作系統的運行機制一樣,必須要具體實現,同時還要提供對外的操作接口。這個就像操作系統會提供標準的編程接口,比如win32編程接口一樣,TCP/IP也要提供可供程序員做網絡開發所用的接口,這就是Socket編程接口。”
## 參考
> http://www.cnblogs.com/ChandlerVer5/p/TCP-IP_http_Socket.html