1,socket是什麼? 2,socket的作用 3,socket怎麼用 4,socket的擴展 —————————————————————— socket是什麼? Socket這個名詞現在有很多不同的意思,這裡主要講到其中2個含義。一是,套接字socket=(IP地址:埠號),是端的概念。二是, ...
1,socket是什麼?
2,socket的作用
3,socket怎麼用
4,socket的擴展
——————————————————————
socket是什麼?
Socket這個名詞現在有很多不同的意思,這裡主要講到其中2個含義。一是,套接字socket=(IP地址:埠號),是端的概念。二是,socket在應用層和傳輸層之間,是層的概念。
要理解socket是什麼,首先要理解網路的分層結構,目前internet廣泛使用的TCP/IP模型,總結起來網路模型分為四層,從上層往下依次為:應用層、傳輸層、網路層、接入層。
網路上的兩個程式通過一個雙向的通信連接實現數據的交換,這個連接的一個端點(endpoint)稱為一個socket。(端)
然後理解系統調用(system call)和應用程式介面(API)的概念。系統調用就是應用程式和操作系統之間傳遞控制權。當應用程式啟動系統調用時,就把控制權從應用程式傳遞給系統調用介面,此介面又把控制權傳遞給操作系統,操作系統執行內部的操作,執行完畢控制權又通過系統調用返回給應用程式。這個系統調用介面就是API。API定義了很多系統調用的函數,通過請求調用就可以獲得操作系統的服務。目前最著名就是伯克利為UNIX定義的socket interface。(層)
回到網路中,傳輸層TCP協議和網路層的IP協議已經集成到操作系統中,應用程式在應用層,這就涉及到應用進程與操作系統的調用,而socket interface就作為應用進程和運輸層協議之間的介面。因此,應用進程要使用TCP/IP協議進行通信就必須通過socket和操作系統進行調用請求服務。
————————————————————-
socket的作用?
socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層複雜的操作抽象為幾個簡單的介面供應用層調用以實現進程在網路中通信。Socket把複雜的TCP/IP協議族隱藏在Socket介面後面,對用戶來說,一組簡單的介面就是全部,讓Socket去組織數據,以符合指定的協議。
————————————————————-
socket的怎麼用?
socket起源於Unix,而Unix/Linux基本哲學之一就是“一切皆文件”,都可以用“打開open –> 讀寫write/read –> 關閉close”模式來操作。socket是可以理解為一種特殊的文件,socket函數就是對其進行的操作(讀/寫IO、打開、關閉)。
Socket通信的雙方可以分為客戶端和伺服器端,客戶端的基本流程如下:
- 創建socket
- 連接到伺服器
- 發送數據到伺服器
- 從伺服器接受數據
- 關閉連接
伺服器端的步驟稍微多一些,主要增加了與埠綁定(bind)和監聽(listen)、接受阻塞(accept)等流程
——————————————————————
socket的擴展——即socket編程
socket編程是利用socket介面為應用層自定協議用於應用進程的網路通信。那為什麼要自定義呢,自定義目的是滿足自己的應用需求。例如http協議是應用層使用最多最廣泛的協議,http是單工阻塞性質的協議,如果你需要一個全雙工,無阻塞的雙向傳輸,那http就滿足不了。http定義自己的包頭,你要是覺得傳輸效率極其重要,這樣的包頭太臃腫,你也需要自定義協議。自定義應用層協議就需要socket編程,目前應用的場景有,即時通訊,社交訂閱更新,視頻會議,網路游戲,股票基金實時價格等等。
另外還有,網路模型ATM,不同於TCP/IP模型,這就相應的有自己的協議和socket,這也用到socket編程。
——————————————————————-
參考資料
1, 謝希仁《電腦網路(第五版)》
2, http://www.cnblogs.com/dolphinX/p/3460545.html
3, http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html
4, http://blog.csdn.net/hguisu/article/details/7445768/