原始套接字可以讀寫內核沒有處理的IP數據包,而流套接字(就是TCP流)只能讀取TCP協議的數據,數據包套接字只能讀取UDP協議的數據。
這兩句程序妳就可以創建壹個原始套接字.然而這種類型套接字的功能卻與TCP或者UDP類型套接字的功能有很大的不同:TCP/UDP類型的套接字只能夠訪問傳輸層以及傳輸層以上的數據,因為當IP層把數據傳遞給傳輸層時。
下層的數據包頭已經被丟掉了.而原始套接字卻可以訪問傳輸層以下的數據,,所以使用raw套接字妳可以實現上至應用層的數據操作,也可以實現下至鏈路層的數據操作.
比如:通過sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP))方式創建的raw socket就能直接讀取鏈路層的數據.
1、使用原始套接字時應該註意的問題(參考<<unix網絡編程>>以及網上的優秀文檔)
2、對於UDP/TCP產生的IP數據包,內核不將它傳遞給任何原始套接字,而只是將這些數據交給對應的
UDP/TCP數據處理句柄(所以,如果妳想要通過原始套接字來訪問TCP/UDP或者其它類型的數據,調用socket。