參考文章:http://www.cnblogs.com/songQQ/archive/2009/09/03/1559838.html
http://www.cnblogs.com/newlist/archive/2012/02/19/2358392.html
一、socket概述
1、socket定義
Linux中的網絡編程是通過socket來進行的。常說的socket接口是一種特殊的I/O,它也是一種文件描述符。每一個socket都用一個半相關描述{協議,本地地址,本地端口}來表示;一個完整的套接字則用一個相關描述{協議,本地地址,本地端口,遠程地址,遠程端口}來實現。socket也有類似打開文件的函數調用,該函數返回一個整型的socket描述符,隨後連接建立、數據傳輸都是通過socket來實現的。
在運行TCP/IP協議的計數機中,一般都支持軟件虛擬的ip數據報自環接口loopback。如果試圖和ip地址等於自己地址的計算機通信,數據不會發到網絡上,而是通過內核實現的虛擬的自環接口loopback將數據自環到計算機本身。利用這一點,可以在一個計算機的多個進程之間進行通信。現在的許多軟件設計,同一台計算機內的進程之間通信也使用socket方式,這使得系統有很大的靈活性,因為需要的時候,只要將兩個進程分布到不同的計算機上就可以了,而不需要更改程序。socket只是進程之間通信的一種方法,其他方法還有很多。
2、socket類型
(1)流式socket(SCOK_STREAM)
流式套接字提供可靠的、面向連接的的通信流,使用TCP協議。
(2)數據報socket(SCOKET_DGRAM)
無連接的服務,使用UDP。
(3)原始socket
原始套接字允許對底層協議如IP或者ICMP進行直接訪問,用於協議的開發。
3、下圖表示了協議之間的關系