※ 引述《simonxander (顯顯)》之銘言:
: 同學你好:
: 我今天測試了一下,NAT並不會擋掉多出來的 reply
: 也沒有限定 reply 的 data size 必須和 request 一樣
: 所以我想有可能是 checksum 地方有錯,才讓 NAT 把 packet drop 了
: ※ 引述《simonxander (顯顯)》之銘言:
: : 對 理論上應該會有一台vm當作firewall,不過這樣會需要3台vm
: : 為了簡化測試程序,vm2就是在NAT外面的電腦了
: : firewall的功能就由vm1自己來模擬,所以是限制output
非常感謝助教的測試,
不過我上網查了之後覺得 checksum 很合理, 還請助教過目
uint16_t checksum(uint16_t *mem, int bytes){
uint32_t sum = 0;
while(bytes > 1){
sum += *mem++;
bytes -= 2;
}
if(bytes == 1){
uint16_t tmp = 0;
*(uint8_t*)(&tmp) = *(uint8_t*)mem;
sum += tmp;
}
sum = (sum >> 16) + (sum & 0xffff);
sum = (sum >> 16) + (sum & 0xffff);
return (uint16_t)~sum;
}