Могу ли я принудительно передавать IP-пакеты по «петлевому» соединению на одном компьютере?

390
michael

Мой следующий вопрос находится на начальном уровне, и мне может не хватать значительных знаний об основах сети. Хотя вопрос так или иначе связан с понятиями сервер / клиент, главная проблема определенно не в программировании. Поэтому я стараюсь здесь и надеюсь, что не буду полностью не по теме. Я не знаю, где вопрос был бы лучше поставлен ... Пожалуйста, не закрывайте вопрос, не давая подсказки о том, что не так.

Учитывая одну машину (в моем случае ПК), она может быть установлена более чем одна сетевая карта, обеспечивая, позволяет сказать, два физических интерфейса A, B. Согласно предыдущему вопросу эти два интерфейса (Уровень-1) могут быть назначены двум разным IP-адресам (Уровень-3):

Модуль уровня 3, зарегистрированный в модуле уровня 2 для интерфейса, будет назначен адрес уровня 3 для этого интерфейса.

Например, IP(A)= 192.168.1.10 и IP(B)= 192.168.2.10; оба назначаются свойствами TCP / IP для конкретной интерфейсной карты.

Вопрос:

Допустим, серверный процесс, запущенный на той же машине, запускается путем регистрации себя по IP (B) и некоторому порту, прежде чем он начинает прослушивать входящие соединения. Таким образом, он прослушивает любые входящие запросы, поступающие через интерфейс B.

Теперь у меня есть TCP-клиент на той же машине, и я хочу открыть TCP-соединение с сервером по IP (B). Поэтому я наивно соединяю A и B с помощью внешнего кабеля обратной связи и ожидаю, что трафик будет проходить по этому кабелю при запросе соединения с B. Но нет никакого способа сказать клиенту, какой интерфейс Xон будет использовать ... Он будет использовать Aили B? Я даже догадываюсь, что он будет использовать B, потому что Aи Bразличные сети в соответствии с выбранной маской подсети и, следовательно, запрос на конечный адрес Bбудет выдан через интерфейс B? В качестве побочного вопроса: какой способ упаковки сейчас, потому что кабель не нужен. Есть ли внутренняя петля?

Но что если я захочу форсировать трафик по шлейфу (по какой-либо причине)? Это возможно вообще? Как я могу добиться, чтобы клиент использовал А в качестве исходящего интерфейса при обращении IP(B). Подходя к концу: я просто хочу убедиться, что все отправленные пакеты между клиентом и сервером транспортируются по кабелю.

Когда, Aа Bтакже сервер и клиент будут находиться на разных машинах, каждая из которых имеет единый сетевой интерфейс, у меня не возникнет проблем с пониманием. Но здесь?

Зачем мне это?

На самом деле, в качестве следующего шага я хочу, чтобы заменить кабель между Aи Bс экспериментальной установки, где битовых ошибок могут быть изменены намеренно добавляя некоторые виды шума и статистических ошибок для имитации / эмулировать очень плохой канал. Я мог бы поставить каждую сторону на разные машины, но предпочел бы иметь обе на одной машине.

1
См. [Как работает localhost (127.0.0.1)?] (Https://superuser.com/q/321734/354511). G-Man 6 лет назад 0

2 ответа на вопрос

2
Spiff

Сетевые стеки большинства ОС увидят, что адрес назначения, на который вы отправляете, является адресом, которым владеет сам локальный компьютер, и будут использовать внутренний программный петлевой механизм, так что трафик не будет стоить затрат на выход из хоста или даже поражение оборудования Ethernet. Фактически, большую часть времени сетевые люди говорят о петлевой передаче, они говорят об этих петлевых механизмах, которые полностью встроены в стек сетевого программного обеспечения. «Шлейф» почти никогда не означает «выйти из одного сетевого адаптера через внешнюю петлю сетевого кабеля и вернуться в другой сетевой адаптер».

Способы заставить трафик выходить из одного сетевого адаптера и обратно в другой может варьироваться от ОС к ОС. Например, некоторые члены семейства Unix-систем BSD, такие как FreeBSD и macOS, имеют вызываемый sysctl net.link.ether.inet.useloopback, который по умолчанию имеет значение 1 (включено), но может быть очищено до 0 (отключено), чтобы заставить трафик выходить из системы. NIC, даже если он предназначен для другого IP-адреса на той же машине.

0
Genaro Morales

Я думаю, что нам нужна ваша операционная система или маркировка устройств, чтобы дать более подробное решение, но вы можете достичь этой установки по умолчанию для сетей.

Это означает, что вы собираетесь определить, что весь трафик из сети 192.168.1.0/24 будет выходить из xxxx ip-адреса или какого-то определенного порта как lo.

У вас должна быть таблица маршрутизации, в которой вы определили маршрут для прохождения трафика через этот порт / адрес.