【问题标题】:Prefered network interface of Socket.bindSocket.bind 的首选网络接口
【发布时间】:2012-08-22 08:12:09
【问题描述】:

http://docs.oracle.com/javase/tutorial/networking/nifs/definition.html 说“当您创建套接字并将其绑定到该地址时,系统将使用关联的接口”。我试图在 Linux 和 Android 系统的页面上做这个例子,但是它在两者上都不起作用。绑定的 IP 地址在 IP 标头上设置为源 IP 地址,但传输接口仍然没有改变。许多人提到了 Stack Overflow 上的 URL。真的这么好用吗?

【问题讨论】:

    标签: java sockets interface bind


    【解决方案1】:

    您可以提供要绑定的接口作为提示,但操作系统可以随意忽略这一点,事实上 Linux 确实忽略了这一点,因为它的托管模型很弱。即无论您设置什么,操作系统都会确定要使用的界面。我会假设 Android 是一样的。

    http://en.wikipedia.org/wiki/Host_model

    【讨论】:

    • 如果你有例如,你会怎么做? 2 个 NIC,并且您希望将 2 个不同应用程序的接口中的每一个绑定到特定的 NIC 上,例如因为一个用于连接远程数据库,另一个用于连接客户端?
    • Linux 并不真正支持这一点。对于外出数据包,您无法控制。对于传入连接,您可以做的最好的事情是为客户端提供与数据库使用的 IP 地址不同的 IP 地址。
    • 我过去做过的事情是让数据库通过自己的网络连接(实际上一根电缆直接连接到每台机器的背面,没有开关)因为它使用具有不同 IP 的单独网络地址,Linux别无选择,只能使用给定的IP地址。但是,如果 Linux 可以找到两种获取 IP 地址的方法,您就无法控制它使用哪一种。
    • 但这不是限制吗?这是由于某种优化原因吗?我的意思是 Windows 也这样做?
    • 将数据库放在服务器上是 IMO 的一个坏主意,除非您拥有非常强大的硬件(或微不足道的数据)。将服务器直接连接到数据库是一个好主意,前提是您将所有内容都放在同一位置。但是其余的内容很有趣。比你!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多