2011-05-14 64 views
0

在有在ip_output的兩行代碼,我無法理解:的hLen和sizeof(結構IP)

mhlen = sizeof(struct ip) 

if (hlen > sizeof(struct ip)) { ... 

爲什麼我們需要比較的hLen這是原始IP數據包頭的長度(sizeof(struct ip))?

你能幫忙嗎?

+3

你是代碼在你面前的人,而不是我們。 – 2011-05-14 14:39:15

回答

0

它看起來也許這是來自BSD的ip_fragment函數?其中一個變量是mhlen,另一個是hlen,因此它們可能會有所不同。 IP標頭是可變長度的。 struct ip有固定部分。變量hlen的實際長度在最後包含可變長度選項。

+0

是的,實際上他們是2個變量,我不關心第一個,實際上我不明白爲什麼他們比較標題長度sizeof(結構IP)?你知道sizeof(struct ip)的答案是什麼嗎? 謝謝你的回答* – elie 2011-05-14 14:54:30

+0

嘿,對不起,elie,剛纔看到這個。 'sizeof(struct ip)'始終爲20.請參閱http://en.wikipedia.org/wiki/IPv4#Header以獲取標題佈局的詳細信息,這可以幫助您解碼代碼。 – andrewdski 2011-05-17 01:55:08

0

IP標頭可以有其他選項(例如源路由記錄,用於tracerouting)。 IP標頭的總大小在hlen字段中編碼爲32位字的數量,所以如果沒有IP選項,它將爲5(對於20字節),如果有IP選項,則爲更大。