我有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