1. 程式人生 > >linux網路程式設計之套接字(套介面)、ip、埠理解

linux網路程式設計之套接字(套介面)、ip、埠理解

它是網路通訊過程中端點的抽象表示,包含進行網路通訊必需的五種資訊:連線使用的協議,本地主機的IP地址,本地程序的協議埠,遠地主機的IP地址,遠地程序的協議埠。
或者說,套接字,是支援TCP/IP網路通訊的基本操作單元,可以看做是不同主機之間的程序進行雙向通訊的端點,簡單的說就是通訊的兩方的一種約定,用套接字中的相關函式來完成通訊過程。 非常非常簡單的舉例說明下:Socket=Ip address+ TCP/UDP + port。
區分不同應用程式程序間的網路通訊和連線,主要有3個引數:通訊的目的IP地址、使用的傳輸層協議(TCP或UDP)和使用的埠號。Socket原意是 “插座”。通過將這3個引數結合起來,與一個“插座”Socket繫結,應用層就可以和傳輸層通過套接字介面,區分來自不同應用程式程序或網路連線的通訊,實現資料傳輸的併發服務。 Socket可以看成在兩個程式進行通訊連線中的一個端點,是連線應用程式和網路
驅動程式
的橋樑,Socket在應用程式中建立,通過繫結與網路驅動建立關係。此後,應用程式送給Socket的資料,由Socket交給網路驅動程式向網路上傳送出去。計算機從網路上收到與該Socket繫結IP地址和埠號相關的資料後,由網路驅動程式交給Socket,應用程式便可從該Socket中提取接收到的資料,網路應用程式就是這樣通過Socket進行資料的傳送與接收的。

2 )、ip

IP地址是一個32位的無符號整數,由於沒有轉變成二進位制,因此通常以小數點分隔,如:198.163.227.6,正如所見IP地址均由四個部分組成,每個部分的範圍都是0-255,以表示8位地址。IP地址都是32位地址,這是IP協議版本4(簡稱Ipv4)規定的,目前由於IPv4地址已近耗盡,所以IPv6地址正逐漸代替Ipv4地址,Ipv6地址則是128位無符號整數。

3 )、埠

埠號是一個16位無符號整數,範圍是0-65535


2、套接字的分類

常用的TCP/IP協議的3種套接字型別如下所示。 流套接字(SOCK_STREAM): 流套接字用於提供面向連線、可靠的資料傳輸服務。該服務將保證資料能夠實現無差錯、無重複傳送,並按順序接收。流套接字之所以能夠實現可靠的資料服務,原因在於其使用了傳輸控制協議,即TCP(The Transmission Control Protocol)協議。 資料報套接字(SOCK_DGRAM): 資料報套接字提供了一種無連線的服務。該服務並不能保證資料傳輸的可靠性,資料有可能在傳輸過程中丟失或出現數據重複,且無法保證順序地接收到資料。資料報套接字使用UDP(User Datagram Protocol)協議進行資料的傳輸。由於資料報套接字不能保證資料傳輸的可靠性,對於有可能出現的資料丟失情況,需要在程式中做相應的處理。 原始套接字(SOCK_RAW): 原始套接字(SOCKET_RAW)允許對較低層次的協議直接訪問,比如IP、 ICMP協議,它常用於檢驗新的協議實現,或者訪問現有服務中配置的新裝置,因為RAW SOCKET可以自如地控制Windows下的多種協議,能夠對網路底層的傳輸機制進行控制,所以可以應用原始套接字來操縱網路層和傳輸層應用。比如,我們可以通過RAW SOCKET來接收發向本機的ICMP、IGMP協議包,或者接收TCP/IP棧不能夠處理的IP包,也可以用來發送一些自定包頭或自定協議的IP包。網路監聽技術很大程度上依賴於SOCKET_RAW 原始套接字與標準套接字(標準套接字指的是前面介紹的流套接字和資料包套接字)的區別在於:原始套接字可以讀寫
核心
沒有處理的IP資料包,而流套接字只能讀取TCP協議的資料,資料報套接字只能讀取UDP協議的資料。因此,如果要訪問其他協議傳送資料必須使用原始套接字。


3、Socket網路層次

套接字位於網路中的層次,它位於傳輸層以上、應用層以下。Socket程式設計正是通過一系列系統呼叫(Socket API)來完成應用層協議(如ftp、http)。

套接字是對網路中應用層程序之間的通訊進行了抽象,提供了應用層程序利用網路協議棧交換資料的機制。

或者