- 論壇徽章:
- 0
|
爭對IP碎片,通常的理解是將一個過大的UDP或者ICMP包(大于1472),在通過IP層傳遞到數(shù)據(jù)鏈路層的時候,因?yàn)榇笥贛TU,比如以太網(wǎng)的1500(這個1500是IP首部加UDP首部在加數(shù)據(jù)的總大小),從而在IP層上將上層傳來的數(shù)據(jù)分成N份,每份分別封裝在一個IP頭中進(jìn)行傳遞。這時有多個IP數(shù)據(jù)包承載一個UDP或者ICMP的數(shù)據(jù)報,這些IP包擁有相同的標(biāo)識數(shù)字,并且除了最后一個分片MF標(biāo)志字段為0外其它的分片MF標(biāo)志字段均為1。因?yàn)樯蠈訑?shù)據(jù)被分片,這時除了第一個分片的IP數(shù)據(jù)字段中包含了上層數(shù)據(jù)的信息(因?yàn)閁DP或者ICMP頭部只在第一個分片中),所以后續(xù)的分片就不在包含上層的信息。
抱歉說了這么多廢話,這些是我對IP碎片的理解,也不曉得有沒有錯,如果有錯誤那我想不通就很正常了。
以下是我的問題了。先構(gòu)建一個網(wǎng)絡(luò)路由:三臺機(jī)子,A,B,C,其中B裝RH8,充當(dāng)路由器和包過濾防火墻,分別連接兩個主機(jī)A,B,均安裝2000,A的地址是192.168.0.1,B是192.168.1.1。環(huán)境按照我對IP碎片的理解,那么就有這么個問題。除了第一片的其它分片不包含上層信息,那么如果我刻意發(fā)送大的報文(比如從192.168.0.1 ping 192.168.1.1 -l 65535 ),那么這個報文將被分片,如果這些IP碎片在通過包過濾防火墻的時候,如果不設(shè)置允許IP碎片通過,(比如iptables -A FORWARD -p icmp --icmp-type 8 -s 192.168.0.1 -d 192.168.1.1 -j ACCEPT;iptables -A FORWARD -m -state --state ESTABLISHED,RELATED -j ACCEPT;iptables -P FORWARD DROP)那么就只有第一片能夠通過,因?yàn)槠浒送暾纳蠈有畔,說明這個包是從192.168.0.1到192.168.1.1的icmp request包,即icmp類型8 ,而后續(xù)的包不包含這個信息,過應(yīng)該被過濾。這時后通過的第一個包到到C,因?yàn)槭欠制陌,所以C將其緩存并等待后續(xù)的包,但后續(xù)的包以被過濾,所以當(dāng)?shù)却欢螘r間后,超時,這時候C會將包丟棄,故A不會得到C得響應(yīng),應(yīng)該得到timed out的數(shù)據(jù)顯示。
如果要讓碎片能夠通過,可以在iptables 中加上-f的選項(xiàng),讓后續(xù)包通過,這時應(yīng)該得到響應(yīng)。
以上是我根據(jù)理論推出的。但是實(shí)際試驗(yàn)中,我發(fā)現(xiàn)沒有允許碎片的時候A依然可以得到C的響應(yīng),所以萬分疑惑。希望各位大蝦指點(diǎn)。小弟是網(wǎng)絡(luò)的初學(xué)者,希望得到大家的幫助。 |
|