socket機制詳解

我另外一片博客中詳細解析了Linux下tcp socket通信的過程,下面是我對socket機制更深一層的學習。


服務器和客戶端創建過程簡單描述如下:

服務器端
  一、創建服務器套接字(CREATE)。
  二、服務器套接字進行信息綁定(BIND),並開始監聽連接(LISTEN)。
  三、接受來自客戶端的連接請求(ACCEPT),並創建接收進程。
  四、開始數據傳輸(SEND、RECEIVE)。
  五、關閉套接字(CLOSESOCKET)。
客戶機端
  一、創建客戶機套接字(CREATE)。
  二、與遠程服務器進行連接(CONNECT),如被接受則創建接收進程。
  三、開始數據傳輸(SEND、RECEIVE)。
  四、關閉套接字(CLOSESOCKET)


socket函數

SOCKET socket(int af, int type, int protocol);

af:指定應用程序使用的通信協議的協議族,對於TCP/IP協議族該參數設置爲AN_INET,對於UNIX可建立本地Socket

type:指定創建socket類型:

流套接字類型(SOCK_STREAM):最常見的類型,基於TCP協議

數據報套接字類型(SOCK_DGRAM):即UDP數據報

原始套接字類型(SOCK_RAW):在IP層對套接字進行編程

protocol:指定應用程序所使用的通信協議。最常用的是TCP和UDP

流套接字和數據報套接字不能完成的任務,可以在原始套接字中得以實現。


Socket從傳輸模式上又分爲端對端和點對點的連接,流套接字和數據報套接字都屬於端對端的連接,因此需要綁定端口號。而原始套接字是基於IP協議的,屬於點對點的傳輸模式,是沒有端口這個概念的。比如常用的監測網絡連接ping命令,就是基於ICMP協議的,它不存在端口的概念。Socket是一種服務,與其實現的語言無關。基於這個性質,我們能實現不同服務之間,不同語言之間的互聯互通。

socket實質上提供了進程通信的端點。進程通信之前,雙方首先必須各自創建一個端點,否則是沒有辦法建立聯繫並相互通信的。正如打電話之前,雙方必須各自擁有一臺電話機一樣。


更多詳細內容:百度socket詞條http://baike.baidu.com/link?url=PsoIpr5DfvwlKhwf4hVgxCB7UhzIYkCroynJWdUhWLMo_D9VX39oaRdpEwoaUuu-RSaSvq8gGvSfuY85zKhFOa2-2O3OGm6GpchojKLyA4G


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章