※ 引述《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;
}