我在客戶端。有多個網絡接口。我如何讓不同的進程使用不同的網絡接口進行通信?由於我想連接到同一臺服務器,路由在這裏似乎不起作用。另外,connect()
不具有用於指定本地地址或接口的參數,如bind()
所做的那樣。如何讓不同的進程使用不同的網絡接口?
回答
如果您的目標是通過並行使用多個網絡接口來增加服務器的帶寬,那麼在應用程序級別上可能(或應該)做的事情可能不是這樣。相反,您應該研究Link Aggregation,然後配置您的計算機和網絡堆棧以使用它。一旦這個工作正常,你就可以自動獲得你想要的並行化速度,而不需要客戶端應用程序做任何特殊的事情來啓用它。
「的bind()系統調用時經常被誤解。它被用來 綁定到特定IP地址,只發往該IP 地址將被接收的數據包,和任何傳輸的數據包將攜帶 IP地址作爲他們的來源,bind()不控制任何有關傳輸數據包的路由,例如,如果你綁定了eth0的IP地址,但你發送了一個數據包到內核的最佳路由出去的目的地eth1,它會很高興地將數據包eth0和eth0的源IP地址發送出去,這對於TCP/IP是 完全有效,其中pac Kets可以在去往目的地的 的途中穿越不相關的網絡。「
更多資料例如here。
這就是爲什麼你可能會誤解bind()調用。
綁定到物理拓撲(適用於某些特定接口)的適當方法是使用SO_BINDTODEVICE
套接字選項。這是通過撥打setsockopt()
來完成的。
Source Policy Routing
可能會對您有所幫助。
嘗試以下步驟:
- 使用
iptables
給予不同處理的數據包與不同的標記。 - 使用
iproute2
將具有不同標記的數據包路由到不同的表。 - 在不同的表中,將默認路由設置爲不同的上行鏈路。
整個過程需要一定程度的瞭解linux網絡。
這裏有一個例子說明了如何將所有的流量,用戶通過一個特定的上行:http://www.niftiestsoftware.com/2011/08/28/making-all-network-traffic-for-a-linux-user-use-a-specific-network-interface/
你可以嘗試通過從一個用戶運行不同的用戶和流量路由的不同過程的一個上行遵循類似的方法。
此外,您可以讓進程與具有不同端口的服務器進行通信,並通過端口標記流量。
- 1. 蟒蛇:urllib2的使用不同的網絡接口
- 2. 如何使用IEnumerable接口並同時讓XMLSerializer不使用GetEnumerator()?
- 3. 與傳輸守護進程不同的傳輸網絡接口下載目錄
- 4. 在不同的網絡上使用RMI
- 5. 如何在java中同時使用多個網絡接口?
- 6. WCF服務使用來自不同進程的相同端口?
- 7. 如何註冊並使用相同接口的不同實現?
- 8. 如何讓jmeter對同一測試計劃的不同線程使用不同的主機名/端口
- 9. Python:如何在不同的網絡上連接套接字
- 10. 如何知道進程是否正在使用網絡接口?
- 11. 如何使用Python中的套接字連接不同網絡上的兩臺不同計算機?
- 12. 如何讓MySQL不同(不同的)
- 13. 如何讓不同的網站登錄
- 14. 爲Zend_Service_Amazon_S3選擇不同的網絡接口
- 15. 屬於不同的網絡
- 16. 如何從任何網絡使用不同的端口訪問API?
- 17. 如何使用不同端口上的Vagrant專用網絡訪問虛擬機?
- 18. 如何讓ssh使用不同的id_dsa
- 19. 如何讓nginx在不同的端口平衡到不同的端口?
- 20. 如何對不同的網絡應用程序
- 21. 如何從不同的網絡連接到我的apache localhost?
- 22. 進口Vue從'vue'進口「不同」Vue到不同的文件
- 23. 如何讓不同的OpenMP線程執行不同的任務
- 24. 如何讓我的HTML5移動網絡應用適用於不同的設備?
- 25. 分配不同的網站到不同的網絡在apache
- 26. 同一用戶在WordPress中使用不同的社交網絡
- 27. 在不同的網絡上使用套接字通信
- 28. 使用不同的社交網絡登錄應用程序
- 29. 如何使用INetFw接口進行多個網絡連接?
爲什麼你認爲你需要他們使用不同的接口到同一臺服務器?是什麼讓你覺得'路由不在這裏工作'?爲什麼connect()允許你在bind()已經這樣做時指定一個本地地址?問題是什麼? – EJP
我想通過多個網絡接口與同一服務器進行通信,以利用客戶端上的所有帶寬。 – Aerodonkey