我有2个基于Linux的系统 - 一个带2个接口(1个LAN,1个调制解调器)和一个服务器的客户端。
我打开2个UDP套接字,并使用setsockopt和SO_BINDTODEVICE将每个套接字绑定到它的接口。
然后我通过每个套接字发送一条消息,从客户端到服务器。
他们都到达服务器。服务器套接字读取它们,并向它们中的每一个发送回复。
然后我尝试读取客户端上的服务器回复。
但是,只有1个回复。
此外,如果我运行tcpdump,我看到这两个答复是在他们相关的接口上,在他们离开的同一个端口上接收到的。然而,只有其中一个到达插座。另一个丢失了?
“丢失”数据包不是随机的,而是“非”默认数据包。如果我的路由表为空,则调制解调器丢失。如果我从调制解调器接口添加到服务器ip的路由,丢失的数据包将成为局域网的一部分。
然而,他们总是到达服务器,总是返回,始终在tcpdump中看到,但1永远不会到达套接字。怎么可能?通过多个接口发送/接收数据
0
A
回答
2
有一个名为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
相关问题
- 1. 通过套接字和端口发送和接收数据
- 2. WindowsPhone - 通过USB发送/接收数据
- 3. 通过TCP接收和发送数据
- 4. 通过串口发送和接收Windows
- 5. 如何通过wifi直接发送和接收数据到多个android设备
- 6. 打开多个COM端口和发送/接收数据
- 7. 通过UDP接收数据并通过TCP发送
- 8. 如何通过套接字发送/接收数据文件?
- 9. 通过套接字发送和接收数据python3
- 10. 通过TCP套接字发送和接收数据的问题
- 11. 通过Java中的套接字发送和接收数据
- 12. 通过套接字发送和接收数据
- 13. 如何通过套接字发送/接收二进制数据?
- 14. 通过wlan和eth接口发送和接收单个套接字
- 15. 通过“嘈杂”数据流发送和接收数据
- 16. 可以通过两个不同的端口发送和接收数据
- 17. 如何通过串口发送和接收十进制数组?
- 18. Android:发送/接收数据
- 19. NSStream,发送/接收数据
- 20. 发送和接收数据
- 21. 并发发送和接收数据在一个端口与udpclient
- 22. 通过套接字接口接收不同的数据类型
- 23. 在一个线程中通过tcp套接字发送和接收数据
- 24. 套接字 - 不发送/接收数据
- 25. 通过MPI_Send/recv发送和接收多个元素
- 26. 使用服务通过套接字连接发送/接收数据。
- 27. JAVA通过json发送/接收信息
- 28. 通过ActiveMQ发送和接收PDF
- 29. 通过GameKit发送和接收NSData
- 30. 通过tcpclient发送/接收对象
我们需要了解您如何设置路由。 – ninjalj 2011-06-11 11:31:53