1

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

При наличии одной машины (в моем случае ПК) на ней может быть установлено более одной сетевой карты, обеспечивающей, скажем, два физических интерфейса 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 ? В качестве побочного вопроса: какой способ упаковки сейчас, потому что кабель не нужен. Есть ли внутренняя петля?

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

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

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

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

2 ответа2

2

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

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

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .