1、 原始套接字的主要功能是什麼?
課本(p138)
1) 傳送和接收icmpv4、igmpv4和icmpv6等分組;
2) 傳送和接收核心不處理其協議欄位的ipv4資料報;
3) 控制ipv4首部。
2、 原始套接字的適用場合有哪些?
課本(p139)
1) 特殊用途的探測應用;
2) 基於資料報的捕獲應用;
3) 特殊用途的傳輸應用。
3、 原始套接字的傳送內容是否需要包含ip首部?接收的資料是否包含ip首部?
課本(p141、p144)
1) 接收資料的內容
從接收資料的內容來看,不論如何設定傳送選項,對於ipv4,原始套接字接收到的資料都是包括ip首部的內在的完整資料報,對於ipv6,原始套接字接收到的都是去掉了ipv6首部和所有擴充套件首部的淨載荷。
2) 傳送資料的內容
從傳送資料的內容來看,原始套接字的傳送內容涉及多種協議首部的構造,對於ipv4(或ipv6)資料的傳送,ip首部控制選項為協議首部的填充提供了兩個層次的選擇:如果是ipv4,選項為ip_hdrincl,選項級別為ipproto_ip;如果是ipv6,選項為ipv6_hdrincl,選項級別為ipproto_ipv6。
當ip首部控制選項未開啟,則不需要包含ip首部,ip協議首部由協議棧負責填充;
當ip首部控制選項開啟,則需要包含ip協議首部,ip由使用者完成構造。
4、 為什麼原始套接字的位址結構中的埠可以設定為0?
課本(p144)
從傳送資料的目標來看,原始套接字不存在埠號的概念,對於目的位址的描述時,埠是可以忽略的。
5、 sio_rcvall
命令允許指定的套接字接收所有經過本機的資料。
課本(p143)
6、為什麼說tcp的資料不能通過原始套接字傳送。
課本(p154)
因為特定的作業系統對原始套接字的功能作出了限制。
7、編寫乙個最簡單的多執行緒例子程式。
#include
#include
#include //
子執行緒函式
unsignedint __stdcall threadfun(pvoid pm)
intmain()
8、資料報捕獲原理是什麼?
課本(p151)
通常得而套接字程式只能響應與自己的mac位址相匹配的或是以廣播的形式發出的資料幀,對於其他形式的資料幀,網路介面採取的動作是直接丟棄。為了使網絡卡能夠接收所有經過它的資料幀,需要將網絡卡設定為混雜模式。使用sio_rcvall命令可以在原始套接字上設定網絡卡以混雜模式工作,在此基礎上從網絡卡上接收資料和對資料進行解析。
9、函式gethostbyname的作用是什麼?
課本(p44)
根據主機名獲得主機資訊。
參考部落格:
10、請寫出icmp頭部checksum的計算程式。
ushort checksum(ushort *buffer,int size)
if(size)
//將32位數轉換成16
while (cksum>>16)
cksum=(cksum>>16)+(cksum & 0xffff);
return (ushort) (~cksum); }
參考:
第五次程式設計作業 更新
第五次程式設計作業 更新 把檔案輸入輸出單獨放在乙個類內,改進了 規範。github鏈結 新增類 file operate file operate.h 檔名稱 file operate.h 031502209 2016 5 22 部落格 qq952693358 ifndef file operat...
第五次作業
一 問題及 include using namespace std class time void add a minute void add an hour void add seconds int n void add minutes int n void add hours int n voi...
第五次作業
當我們在討論多型性的時候,通常會用過載函式進行舉例,而這次發現的問題主要在過載運算子上,因此我希望通過對過載運算子的測試來得出乙個結論。我們想知道為什麼前置運算子和後置運算子會有區別,因此設計了乙個實驗來證明它 得到最終結果如預期那樣。通過這次作業,我能感受到前置和後置運算子的區別,通過x 和y x...