文章來源
區(qū)別
網(wǎng)絡ISO
由下往上分為物理層碴巾、數(shù)據(jù)鏈路層、網(wǎng)絡層丑搔、傳輸層厦瓢、會話層提揍、表示層和應用層。
IP協(xié)議對應于網(wǎng)絡層煮仇,TCP協(xié)議對應于傳輸層劳跃,而HTTP協(xié)議對應于應用層,三者從本質(zhì)上來說沒有可比性浙垫,socket則是對TCP/IP協(xié)議的封裝和應用(程序員層面上)刨仑。也可以說,TPC/IP協(xié)議是傳輸層協(xié)議夹姥,主要解決數(shù)據(jù)如何在網(wǎng)絡中傳輸杉武,而HTTP是應用層協(xié)議,主要解決如何包裝數(shù)據(jù)辙售。關(guān)于TCP/IP和HTTP協(xié)議的關(guān)系艺智,網(wǎng)絡有一段比較容易理解的介紹:
“我們在傳輸數(shù)據(jù)時,可以只使用(傳輸層)TCP/IP協(xié)議圾亏,但是那樣的話十拣,如果沒有應用層,便無法識別數(shù)據(jù)內(nèi)容志鹃,如果想要使傳輸?shù)臄?shù)據(jù)有意義夭问,則必須使用到應用層協(xié)議,應用層協(xié)議有很多曹铃,比如HTTP缰趋、FTP、TELNET等陕见,也可以自己定義應用層協(xié)議秘血。WEB使用HTTP協(xié)議作應用層協(xié)議,以封裝HTTP文本信息评甜,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)到網(wǎng)絡上灰粮。”
而我們平時說的最多的socket是什么呢忍坷,實際上socket是對TCP/IP協(xié)議的封裝粘舟,Socket本身并不是協(xié)議,而是一個調(diào)用接口(API)佩研,通過Socket柑肴,我們才能使用TCP/IP協(xié)議。實際上旬薯,Socket跟TCP/IP協(xié)議沒有必然的聯(lián)系晰骑。Socket編程接口在設計的時候,就希望也能適應其他的網(wǎng)絡協(xié)議绊序。所以說硕舆,Socket的出現(xiàn)只是使得程序員更方便地使用TCP/IP協(xié)議棧而已隶症,是對TCP/IP協(xié)議的抽象,從而形成了我們知道的一些最基本的函數(shù)接口岗宣,比如create蚂会、listen、connect耗式、accept胁住、send、read和write等等刊咳。網(wǎng)絡有一段關(guān)于socket和TCP/IP協(xié)議關(guān)系的說法比較容易理解:
“TCP/IP只是一個協(xié)議棧彪见,就像操作系統(tǒng)的運行機制一樣,必須要具體實現(xiàn)娱挨,同時還要提供對外的操作接口余指。這個就像操作系統(tǒng)會提供標準的編程接口,比如win32編程接口一樣跷坝,TCP/IP也要提供可供程序員做網(wǎng)絡開發(fā)所用的接口酵镜,這就是Socket編程接口〔褡辏”
總結(jié)
實際上淮韭,傳輸層的TCP是基于網(wǎng)絡層的IP協(xié)議的,而應用層的HTTP協(xié)議又是基于傳輸層的TCP協(xié)議的贴届,而Socket本身不算是協(xié)議靠粪,就像上面所說,它只是提供了一個針對TCP或者UDP編程的接口毫蚓。