前言
这段经常遇到网络报文已经到达Linux主机,通过`tcpdump -i netif -nnN -vv`已可以看到报文已经到达某网卡,但是,socket却静悄悄、收不到的情况。
通过尝试发送其他同网段通信的报文,socket恢复活力,最后了解到,这是因为linux主机特殊的`rp_filter`网络参数,进行安全限制的效果:如果收到的报文,不是最优从此网卡上能够发出去的报文,则此报文会被丢弃掉,俗称**反向路径检查**
解决办法
最优,保证同网段通信
次,增加针对此主机全掩码的特殊路由,允许从此网卡进行收发,规避到rp_filter的影响
再次,修改ip_forward或rp_filter网络协议栈参数让报文收发通畅,影响面比较大,所以,最低推荐顺序