微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过多个接口发送/接收数据

如何解决通过多个接口发送/接收数据

| 我有2个基于Linux的系统-一个具有2个接口(1个LAN,1个调制解调器)的客户端和一个服务器。 我打开2个UDP套接字,并使用带有SO_BINDTODEVICE的setsockopt将每个套接字绑定到它的接口。 然后,我通过每个套接字将消息从客户端发送到服务器。 他们两个都到达服务器。服务器套接字读取它们,并向它们每个发送答复。 然后,我尝试在客户端上阅读服务器的回复。 但是,只有1条回复。 另外,如果我运行tcpdump,我会看到两个答复都在它们相关的接口上收到了,并且留在了相同的端口上。然而,其中只有一个能到达插座。对方丢了? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\“丢失的\”数据包不是随机的,而是\“非\”认数据包。如果我的路由表为空,则调制解调器一丢失。如果我从调制解调器接口添加到服务器ip的路由,丢失的数据包将是局域网。 但是,它们总是到达服务器,总是返回,总是在tcpdump中出现,但是1永远不会到达套接字。这个怎么可能?     

解决方法

        有一个称为rp_filter(反向路径验证过滤器)的ipv4网络配置参数。基本上,如果对数据包的答复不会离开该数据包进入的接口,则这是伪造的数据包,应忽略。这就是为什么当我在tcpdump上看到数据包时,它从未到达套接字。禁用它可以解决问题。
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.ppp0.rp_filter=0
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。