应用程序如何知道要使用哪个网络适配器?


0

假设我有wifi,以太网局域网,并且Hamachi在我的PC上打开了。

它们都已连接。

我的应用程序通过它们发送数据。

术语问题:我的应用程序将数据发送到这些网络适​​配器网络接口控制器网络接口。这是这3种技术为我的应用程序创建网络适​​配器NIC)以便与网络进行通信吗?正确的术语是哪个(网络适​​配器网络接口NIC)?

这些网络适​​配器(?)中的每一个都分配了一个IP地址(一个或多个)。

我的应用程序如何知道向哪个适配器发送数据?操作系统是否选择了默认适配器,但是应用程序还可以选择适配器。我认为在Java(和其他编程语言)中,当您创建套接字时可以指定本地IP地址,并且该地址必须是适配器分配的地址之一?

这也意味着发送的数据将使用IP包中的相应IP源地址,具体取决于所使用的适配器?


您具有多个网络连接,并使用路由来引导流量。
DavidPostill

什么操作系统?编辑您的问题。
Ramhound18年

@Ramhound我一般在问。但我与Windows 7和Ubuntu 16.工作
croraf

Answers:


1

在处理TCP或UDP以下协议的非常特殊的情况之外,应用程序不将数据发送到特定的网络适配器,而是将数据发送到特定的远程网络地址。然后由操作系统来确定需要从哪个适配器发送结果包以到达其目的地,尽管每个操作系统的操作有所不同(尽管通用术语大致相同,但是您可以搜索有关“您选择的操作系统的路由表”以获取更多信息)。

在大多数编程语言中,您可以将套接字显式绑定到给定地址。大多数情况下,这需要是分配给本地网络适配器的地址(在这种情况下,来自该套接字的所有流量都将通过该适配器流出),尽管在某些情况下,可以绑定到非本地地址(在某些情况下,这用于某些类型的透明代理或强制门户)。


关于你的第一段。是不是套接字在创建期间已绑定到特定的网络适配器(即使您没有显式指定绑定的本地地址)。然后,通过该套接字发送到的任何远程地址都将使用以前绑定的网络适配器?
croraf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.