IPPROTO_IP , IPPROTO_RAW

對於socket(AF_INET, SOCK_RAW, IPPROTO_IP),其原型爲
int socket (int domain, int type, int protocol);
1 參數protocol用來指明所要接收的協議包,若是是象IPPROTO_TCP(6)這種非0、非255的協議,當操做系統內核碰到ip頭中protocol域和建立socket所使用參數protocol相同的IP包,就會交給這個raw socket來處理,所以,通常來講,要想接收什麼樣的數據包,就應該在參數protocol裏來指定相應的協議。當內核向此raw socket交付數據包的時候,是包括整個IP頭的,而且已是重組好的IP包。


2 若是protocol是IPPROTO_RAW(255),這時候,這個socket只能用來發送IP包,而不能接收任何的數據。發送的數據須要本身填充IP包頭,而且本身計算校驗和。


3 對於protocol爲0(IPPROTO_IP)的raw socket。用於接收任何的IP數據包。其中的校驗和和協議分析由程序本身完成。
dom

本站公眾號
   歡迎關注本站公眾號,獲取更多信息