![应用程序如何知道使用哪个网络适配器?](https://linux22.com/image/1559566/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E4%BD%BF%E7%94%A8%E5%93%AA%E4%B8%AA%E7%BD%91%E7%BB%9C%E9%80%82%E9%85%8D%E5%99%A8%EF%BC%9F.png)
假设我的电脑上打开了 wifi、以太网 lan 和 Hamachi。
它们都是相互关联的。
我的应用程序通过它们发送数据。
术语问题:我的应用程序将数据发送到这些网络适配器, 或者网络接口控制器或者网络接口. 这就是这 3 项技术创造的网络适配器(网卡) 以便我的应用程序与网络进行通信?哪个术语是正确的(网络适配器,网络接口,网卡)?
这些中的每一个网络适配器(?)被分配了一个 IP 地址(一个或多个)。
我的应用程序如何知道将数据发送到哪个适配器?是否有操作系统选择的默认适配器,但应用程序可以另外选择适配器。我认为在 Java(和其他编程语言)中,当您创建套接字时,您可以指定本地 IP 地址,并且这必须是适配器分配的地址之一?
这是否也意味着发送的数据将根据所使用的适配器使用 IP 包中的相应 IP 源地址?
答案1
除了处理 TCP 或 UDP 以下协议的非常特殊的情况外,应用程序不会将数据发送到特定的网络适配器,而是将数据发送到特定的偏僻的网络地址。然后由操作系统决定需要从哪个适配器发送生成的数据包才能到达目的地,尽管每个操作系统的做法略有不同(虽然一般术语大致相同,但您可以搜索有关您选择的操作系统的“路由表”的信息以获取更多信息)。
在大多数编程语言中,您可以明确地将套接字绑定到给定地址。大多数情况下,这需要是分配给本地网络适配器的地址(在这种情况下,来自该套接字的所有流量都将通过该适配器发出),但在某些情况下可以绑定到非本地地址(在某些情况下,这用于某些类型的透明代理或强制门户)。