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