@daniil14056

Какой основной принцип отправки пакетов IP на конкретный узел (хост) сети Интернет?

Разрабатываю децентрализованную сеть соединений между узлами(клиентами), и вот углубился в компьютерные сети, но учебник был написан в прошлом веке.
Короче задача такая. Есть Клиент, он подключен к нескольким другим клиентам, а те к другим в свою очередь. Образуется сеть. Клиент А хочет отправить запрос клиенту Z. Он знает лишь его имя в сети, он отправляет всем своим клиентам запрос на поиск клиента, те же своим, и т.д. соответственно запрос не посылается, тем клиентам, кому он уже был доставлен, короче обход Графа. После нахождения клиента, тот клиент формирует ответ источнику, и источник отправляет тело сообщения.
Нужно, как то оптимизировать, к примеру, если в сети будет миллион клиентов, то каждый из них получит запрос, Как устроена сеть, как она определяет маршрут именно в реализации
Возможно к моменту ответа, я уже найду ответ, но все же совет гуру не помешает.
Структура Запроса:
type -> Tип запроса //в случае обхода find
target -> Имя клиента в сети, который должен быть найден
source -> Адрес : порт Источника, ему должен быть прислан ответ, от target
token -> Индикатор запроса, ставиться у посещенных узлов, и проверяется, не был ли поставлен до, что бы прекратить запрос на этот узел
visits - список упорядоченный посещенных узлов(пока лишний балласт проекте)

5a8de28d5017f536434043.png

Как решения, я придумал, только ограничить жизнь пакета, поделить их на кучу(но не понятно, как они найдут цель, или к примеру, не окажутся в окружении посещенных узлов),
через несколько посещений спрашивать у отправителя, что он еще не нашел результат)
  • Вопрос задан
  • 302 просмотра
Решения вопроса 1
dimonchik2013
@dimonchik2013
non progredi est regredi
Данил молодец, хорошо рисуешь

принцип очень прос - любой хост имеет путь по умолчанию (ну, можно и не иметь,в общем-то) и таблицу маршрутизации - через какой хост слать к какой сети

в самом простом случае эта таблица содержит одну строку - родную сеть (ну и вторую - локалхост)

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

угу, при крывых руках может ходить по кругу, для этого есть ttl (или хз как , забыл) с прохождением каждого узла уменьшаюшийся , кто ловит ttl 1 - дропает пакет
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Как устроена сеть
Куча автономных систем со своей внутренней динамической маршрутизацией между узлами сети. Обычно по протоколу OSPF, может быть IS-IS или даже IBGP. В пределах AS на маршрутизаторах хранится информация о всех маршрутах их стоимости до каждой подсети.

как она определяет маршрут именно в реализации
AS связаны между собой по протоколу динамической маршрутизации BGP. Он отличается принципом работы от протоколов внутри AS. Маршрутизатор, настроенный по этому протоколу знает о маршрутах только у соседних маршрутизаторов. В зависимости от настроек BGP трафик между автономными системами пойдёт по тому или иному пути и не всегда оптимальному (зависит от того как и о чем договорятся админы AS). Далее трафик через граничный маршрутизатор попадает внутрь нужной AS, где направляется по поределённому пути, который тоже не всегда может быть кратчайшим.
Потом трафик доходит до нужного маршрутизатора и по внутренней сети направляется к абоненту.

Для более лучшего изучения темы лучше обратиться к хорошему ресурсу, где многое понятно описывается.
Ответ написан
Комментировать
@yaror
10 лет в мобильном телекоме
Я правильно понимаю, что:
- есть некая Mesh-сеть (все-со-всеми), предназначенная для обмена некими сообщениями
- канал связи между узлами - прямое TCP-соединение
- в случае обрыва прямого соединения, должна обеспечиваться возможность транзитного прохождения сообщения
- количество узлов может быть очень большим - возможно, тысячи узлов

Верно?

Тогда есть смысл реализовать схему маршрутизации, аналогичную принятой в BGP.
Я отойду от специфически сетевой терминологии и постараюсь передать суть.

Итак, у каждого узла есть свой идентификатор - имя.
Оно отвязано от его ip-адресации, и, по-хорошему, один и тот же узел может быть доступен по нескольким ip-адресам одновременно.

В момент установления нового соединения между узлами, каждый из них сообщает новому соседу как своё имя, так и список известных ему других узлов с наиболее коротким транзитным путём до каждого из них.

Пример:
Узел "Вася" подключается к узлу "Петя".
В момент подключения, "Вася" сообщает:
Я "Вася". Я знаю, как добраться до:
- "Вася", кратчайший путь: ""
- "Коля", кратчайший путь: "Вася"
- "Настя", кратчайший путь: "Вася, Коля" (Возможно, есть ещё более длинный маршрут, но нам достаточно сообщить наиболее короткий)

"Петя" делает следующее:
- отдаёт Васе аналогичный список известных ему узлов с маршрутами до них
- отбрасывает полученные от "Васи" маршруты, в кратчайшем пути до которых нашёл свой имя (во избежание петель маршрутизации)

Для того, чтобы понять, в какое соединение отправить сообщение для Насти, Пете достаточно из известных ему маршрутов до неё выбрать тот, у которого маршрут короче.

Потенциальные грабли, которые стоит учесть:
1. Не забывать сообщать соседям об изменении своей таблицы маршрутизации:
- при пропадании соседа
- при появлении нового соседа
- если для какого-то возможного получателя изменился наиболее короткий маршрут
2. Не забывать отбрасывать маршруты, в которых нашёл самого себя
3. Поскольку из-за некорректной работы некоторых узлов "закольцовывание" всё равно возможно, необходим аналогичный TTL механизм, ограничивающих количество транзитных узлов, которое может пройти сообщение перед своим уничтожением.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы