通訊網路程式設計第五次作業

2021-08-11 14:15:50 字數 1648 閱讀 8278

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...