Приложения / протоколы, использующие один и тот же порт с одинаковыми IP-адресами одновременно - PullRequest
0 голосов
/ 20 марта 2019

У меня один интерфейс на устройстве, и мне нужно отправлять трафик с этого интерфейса одновременно. С ниже требования

адрес src, адрес назначения, порт источника, порт назначения и протокол должны быть одинаковыми

Итак, в моей виртуальной машине Linux я использую пространства имен, и у меня настроено это, как показано ниже

ip netns eng51 ifconfig
eth1.51   Link encap:Ethernet  HWaddr 52:54:00:bd:68:c3
          inet addr:51.51.1.10  Bcast:51.51.1.255  Mask:255.255.255.0

ip netns exec eng52 ifconfig
eth1.52   Link encap:Ethernet  HWaddr 52:54:00:bd:68:c3
          inet addr:51.51.2.10  Bcast:51.51.2.255  Mask:255.255.255.0

ip netns exec eng522 ifconfig
eth1.522  Link encap:Ethernet  HWaddr 52:54:00:bd:68:c3
          inet addr:51.51.2.10  Bcast:51.51.2.255  Mask:255.255.255.0

ip netns exec eng511 ifconfig
eth1.511  Link encap:Ethernet  HWaddr 52:54:00:bd:68:c3
          inet addr:51.51.1.10  Bcast:51.51.1.255  Mask:255.255.255.0

так что у меня есть один скрипт, который пытается отправить несколько сообщений в пространство имен назначения. Я запускаю python SimpleHTTPServer в пространстве имен назначения и в пространстве имен источника, использую сокет python и привязываю любой адрес к порту 63999

sock.bind(('0.0.0.0',63999)) 

таким образом, я могу контролировать свой порт-источник всегда равным 63999. и теперь я запускаю этот скрипт в пространствах имен источника, таких как

ip netns eng51 abc_client.py 51.51.2.10
ip netns eng511 abc_client.py 51.51.2.10

но проблема, с которой я сталкиваюсь, заключается в том, что, хотя я запускаю сеанс tcp в двух отдельных пространствах имен, порт 63999 не считается уникальным. Когда сеанс tcp выполняется в пространстве имен eng51, и я запускаю eng522, сеанс eng51 останавливается, сообщая об установлении соединения другим узлом.

1 Ответ

0 голосов
/ 21 марта 2019

Так что я получил это, просто используя несколько интерфейсов, сопоставляя каждый интерфейс виртуальной машины с пространством имен.И тогда я смог использовать исходный порт 63999 одновременно в двух одновременных сеансах

ip netns eng51 ifconfig eth1.51 Link encap: Ethernet HWaddr 52: 54: 00: bd: 68: c3 inet addr:51.51.1.10 Bcast: 51.51.1.255 Маска: 255.255.255.0

ip netns exec eng52 ifconfig eth2.52 Link encap: Ethernet HWaddr 52: 54: 00: bd: 68: c3 inet addr: 51.51.2.10 Bcast: 51.51.2.255 Маска: 255.255.255.0

ip netns exec eng522 ifconfig eth3.522 Link encap: Ethernet HWaddr 52: 54: 00: bd: 68: c3 inet addr: 51.51.2.10 Bcast: 51.51.2.255Маска: 255.255.255.0

ip netns exec eng511 ifconfig eth4.511 Код соединения: Ethernet HWaddr 52: 54: 00: bd: 68: c3 inet addr: 51.51.1.10 Bcast: 51.51.1.255 Маска: 255.255.255,0

...