业务案例:
今年是2015年,我使用的是Linux内核3.17。我的ARM Linux有两个网卡,eth0和eth1。eth0用于在本地为旁边的人配置,eth1用于从远程进行配置。因此,它们的功能基本相同,除了eth0有一个人在现场插入电缆。
本地PC - eth0 My ARM Linux Computer eth1 -远程PC
使用eth0,PC软件可以配置用于配置的eth1 IP地址和端口。为此,我的eth0有一个预设的IP地址(192.168.1.2),这样PC软件就可以很容易地找到它。ARM Linux (3.17)应用程序需要侦听eth0端口A和eth1端口B(如果已配置),一旦连接,它将做出响应,但永远不会发起任何活动(甚至不会执行ping操作)。
本地PC和远程PC之间没有连接。它们不应该是桥接的,也不应该联网。
问题1:
如果使用与eth0相同的IP配置eth1,我的应用程序是否仍能同时侦听两个NIC端口并正确响应?我将有两个独立的线程(可能是相同的函数,但是不同的参数)来监听两个NIC端口。
这就是为什么我问我是否可以在连接和响应时指定NIC,因为现在您可以看到它们可能具有相同的IP地址。理想情况下,操作系统知道connect请求来自何处,因此它应该知道回复哪种方式,即使两个NIC具有相同的IP,只要它们具有不同的以太网地址。但是,C++11或Berkeley模型允许我在监听和回复时指定eth0或eth1吗?
现在,本地PC和远程PC也可以具有相同的IP地址(但不同于ARM Linux)。但是假设我有两台ARM Linux计算机,那么这个配置是完全正确的。但不幸的是,我只有一个嵌入式系统和一个带有eth0和eth1的操作系统。
问题2:
如果问题1答案为否,那么它们是否可以拥有相同的子网掩码?另外,本地PC和远程PC是否可以拥有相同的IP地址?
假设
如果可行,设置路由表是一种解决方案。我想知道这是否可行,以及是否建议不要这样做。
还有,这就是Linux。类似的问题很久以前就被问过了,Windows XP说(不),而我使用的是Linux 3.17,而且我有相同的IP地址,所以事情与类似的问题不同。
发布于 2015-10-25 00:58:47
在系统级,您可以在中介盒上配置网桥。它在网桥两端可以具有相同的IP地址,并且可以使用iptables锁定,以便仅响应特定的TCP/UDP端口。
您不能让网桥两端的系统具有相同的IP地址(即本地pc和远程pc不能具有相同的IP地址)。您可以使用ebtables将网桥两端的访问限制为网桥本身的IP地址,这意味着本地pc只能与中介盒通信,而远程pc只能与中介盒通信。
这是基于从未期望本地和远程pcs相互通信。
这主要是一个系统管理员的解决方案,但是,作为一个开发人员,并没有一个真正的API可以用来完成同样的事情。
https://stackoverflow.com/questions/33319274
复制相似问题