原生套接字(sock_raw)可以用來自行組裝ip資料報,然後將資料報傳送到其他終端,也就是說原生套接字是基於ip資料報的程式設計。(sock_packet是基於資料鏈路層的程式設計)。另外,必須在管理員許可權下才能夠使用原生套接字。
原生套介面提供了普通tcp和udp socket不能提供的3個能力:
1)程序使用raw socket可以讀icmp、igmp等分組。這個能力還使得使用icmp或igmp構造的應用程式能夠完全作為使用者程序處理,而不必往核心中新增額外**。
2)大多數的核心只處理ipv4資料報中乙個名為協議的8位字段的值為1(icmp)、2(igmp)、6(tcp)、17(udp)四種情況。然而該字段的值還有許多其他值。程序使用raw socket就可以讀寫那些核心不處理的ipv4資料報了,因此,可以使用原生套接字定義使用者自己的協議格式。
3)通過使用raw socket,程序可以使用ip_hdrincl套介面選項自行的構造ip頭部。這個能力可用於構造特定型別的tcp或udp分組等。
pipe用來建立管道,但是單個管道只能單向通訊,一端用於讀,而另一端用於寫。如果要實現程序雙向通訊,必須建立一對管道,而socketpair則可以用來建立雙向通訊的管道,具體實現如下:
「domain」:表示協議族,只能為af_local或者af_unix;
「type」:表示型別,可以是sock_stream或者sock_dgram。用sock_stream建立的套接字對是管道流,與一般的管道相區別的是,套接字對建立的通道是雙向的,即每一端都可以進行讀寫。引數sv,用於儲存建立的套接字對;
「protocol」:表示協議,只能為0;
「sv[2]」:是接收代表兩個套介面的整數陣列。每乙個檔案描述符
代表乙個套介面,並且與另乙個並沒有區別。
socketpair()函式的返回值為0時表示呼叫成功,為-1時表示發生了錯誤。
網路基礎 套接字
套接字 應用層通過傳輸層進行通訊時,tcp和udp會同時遇到要為多個應用程序提供併發服務的問題,多個tcp鏈結或者應用程式可能需要通過乙個tcp協議埠傳輸資料,為了將不同的應用程式區分開來,作業系統為應用程式與tcp udp互動提供了介面,成為套接字。埠號 源埠號 目的埠號 傳輸層協議 tcp ip...
套接字基礎
1 什麼是套接字?2 internet 套接字的兩種型別 3 網路理論 4 結構體 5 本機轉換 6 ip 位址和如何處理它們 7 socket 函式 8 bind 函式 9 connect 函式 10 listen 函式 11 accept 函式 12 send 和recv 函式 13 sendt...
網路套接字程式設計基礎
struct sockaddr和struct sockaddr in這兩個結構體用來處理網路通訊的位址。struct sockaddr sockaddr in在標頭檔案 include或 include中定義,該結構體解決了sockaddr的缺陷,把port和addr 分開儲存在兩個變數中,如下 s...