套接字是通信的基石,是支持TCP/IP協議的路通信的基本操作單元。可以將套接字看作不同主機間的進程進行雙間通信的端點,它構成了單個主機內及整個網絡間的編程界面。套接字存在于通信域中,通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念。套接字通常和同一個域中的套接字交換數據(數據交換也可能穿越域的界限,但這時一定要執(zhí)行某種解釋程序),各種進程使用這個相同的域互相之間用Internet協議簇來進行通信。
Socket(套接字)可以看成是兩個網絡應用程序進行通信時,各自通信連接中的端點,這是一個邏輯上的概念。它是網絡環(huán)境中進程間通信的API(應用程序編程接口),也是可以被命名和尋址的通信端點,使用中的每一個套接字都有其類型和一個與之相連進程。通信時其中一個網絡應用程序將要傳輸的一段信息寫入它所在主機的 Socket中,該 Socket通過與網絡接口卡(NIC)相連的傳輸介質將這段信息送到另外一臺主機的 Socket中,使對方能夠接收到這段信息。 Socket是由IP地址和端口結合的,提供向應用層進程傳送數據包的機制。
1.流套接字(SOCK_STREAM)
流套接字用于提供面向連接、可靠的數據傳輸服務。該服務將保證數據能夠實現無差錯、無重復送,并按順序接收。流套接字之所以能夠實現可靠的數據服務,原因在于其使用了傳輸控制協議,即TCP(The Transmission Control Protocol)協議。
2.數據報套接字(SOCK_DGRAM)
數據報套接字提供一種無連接的服務。該服務并不能保證數據傳輸的可靠性,數據有可能在傳輸過程中丟失或出現數據重復,且無法保證順序地接收到數據。數據報套接字使用UDP( User DatagramProtocol)協議進行數據的傳輸。由于數據報套接字不能保證數據傳輸的可靠性,對于有可能出現的數據丟失情況,需要在程序中做相應的處理。
3.原始套接字(SOCK_RAW)
原始套接字與標準套接字(標準套接字指的是前面介紹的流套接字和數據報套接字)的區(qū)別在于:原始套接字可以讀寫內核沒有處理的IP數據包,而流套接字只能讀取TCP協議的數據,數據報套接字只能讀取UDP協議的數據。因此,如果要訪問其他協議發(fā)送的數據必須使用原始套接。
套接字Socket=(IP地址:端口號),套接字的表示方法是點分十進制的lP地址后面寫上端口號,中間用冒號或逗號隔開。每一個傳輸層連接唯一地被通信兩端的兩個端點(即兩個套接字)所確定。例如:如果IP地址是210.37.145.1,而端口號是23,那么得到套接字就是(210.37.145.1:23)。
為了更方便地開發(fā)網絡應用程序,美國伯克利大學在UNIX上推出了一種應用程序訪問通信協議的操作系統(tǒng)調用接字(Socket)。 Socket的出現,使得程序員可以很方便地訪問 TCPIP,從而開發(fā)各種網絡應用程序。后來套接字被引進到 Windows等操作系統(tǒng),成為開發(fā)網絡應用程序的有效工具。
套接字存在于通信區(qū)域,通信區(qū)域也被稱為地址族,主要用于將通過套接字通信的進程的公有特性綜合在一起。套接字通常只與同一區(qū)域的套接字交換數據。Windows Socket只支持一個通信區(qū)域——AF_INET國際網區(qū)域,使用網際協議族通信的進程使用該域。





