Как маршрутизатор отслеживает соединения? Когда вы отправляете http-запрос, он идет на маршрутизатор, который затем отправляется на другой маршрутизатор и т. д. через Интернет; но как он узнает, что нужно идти на сервер, перенаправляется ли порт на балансировщик нагрузки? Наконец, когда пакет возвращается, как враги узнают, что нужно вернуться на ПК, потому что пакет был отправлен обратно на маршрутизатор, а не на ПК? Возможно ли установить соединение с ПК, управляемым маршрутизатором, извне этого маршрутизатора, т. е. можно ли направить пакет на ПК, не подключенный напрямую к Интернету?
решение1
Я пытаюсь ответить на этот старый вопрос в надежде помочь кому-то, кто ищет что-то подобное. Также, пожалуйста, дайте мне знать, если я допустил какие-либо ошибки.
Для передачи информации с вашего компьютера на веб-сервер в Интернете задействовано множество различных компонентов, устройств и алгоритмов, но мы сосредоточимся на сетевых алгоритмах, которые делают это возможным.
Я считаю, что существуют две основные интернет-технологии, которые играют наибольшую роль в обеспечении возможности передачи информации между вашим компьютером и веб-сервером Интернета. Протокол маршрутизации и NAT.
Мы сосредоточимся на IP-пакете, поскольку это единица данных, с которой работают протокол маршрутизации и NAT.
- Когда IP-пакет, отправленный из вашего браузера на интернет-сервер, достигает домашнего маршрутизатора, он проверяется, и его исходный IP-адрес изменяется с локального IP-адреса исходного отправителя на публичный IP-адрес домашнего маршрутизатора, а затем маршрутизируется на целевой IP-адрес. Этот перевод записывается втаблица соединений.Это работа NAT..
- Если пункт назначения является частью сети публичного IP маршрутизатора, то он отправляется на этот IP, в противном случае он будет оценен по таблице маршрутизации на предмет соответствия. Если маршрутизатор не может ее найти, он пересылает пакет на свой собственный шлюз по умолчанию. Этот процесс продолжается до тех пор, пока маршрутизатор в конечном итоге не найдет соответствие.Здесь в игру вступает протокол маршрутизации..
- Если маршрут не найден, на исходный хост отправляется сообщение ICMP Destination Unreachable-Host Unreachable.
- Как только конечный хост найден, он принимает IP-пакеты, которые он декапсулирует, обрабатывает содержащийся в них запрос и затем отправляет ответ. Ответ будет иметь в своем IP-адресе назначения IP-адрес исходного маршрутизатора.
- Ответ будет следовать тому же процессу, за которым следует запрос, пока не достигнет отправителя. Обратите внимание, что когда пакеты следуют определенным маршрутом к месту назначения, они НЕ обязательно должны следовать тем же маршрутом обратно.
- Достигнув IP-адреса назначения в Интернете, маршрутизатор сопоставляет входящий трафик со своей таблицей подключений, выполняет обратную трансляцию, а затем пересылает пакеты на соответствующую машину.
Таким образом IP-пакеты передаются от браузера к целевому веб-серверу.
- Существует 4 соединения, поскольку, как мне кажется, открытая мной страница использовала 4 разных запроса для создания страницы.
- Клиент, инициирующий соединение, может использовать любой доступный исходный порт. Этот порт будет зарезервирован как временно используемый, пока обе машины не согласятся закрыть соединение. IANA предлагает использовать диапазон от 49152 до 65535 для этих так называемых «эфемерных портов». Веб-серверы обычно работают на порту 80, порту по умолчанию для HTTP-трафика, поэтому клиенты будут отправлять свои запросы на просмотр веб-страницы на этот порт.
- В домашнем маршрутизаторе Swimlane представляет собой снимок таблицы подключений маршрутизатора.
- На сервере SuperUser Swimlane представляет собой снимок установленных с сервером соединений.
Таблица подключений обеспечивает уникальность, в основном используя комбинацию исходного IP, исходного порта, конечного IP и конечного порта. Очевидно, что наиболее важным фактором для определения уникальности является исходный порт, поэтому в случае, если другой внутренний хост пытается использовать существующий исходный порт, маршрутизатор изменяет этот порт и отмечает это изменение в таблице подключений.
Это должно ответить на все ваши вопросы, кроме этого:Можно ли установить соединение с ПК, управляемым маршрутизатором, извне этого маршрутизатора, т.е. можно ли направить пакет на ПК, не подключенный напрямую к Интернету?
Если вы знаете порт NAT, используемый на маршрутизаторе для определенного IP-адреса в Интернете, и вы можете подделать IP-пакеты и отправить их на маршрутизатор, пока на маршрутизаторе открыт порт NAT, то теоретически это должно быть возможно, но я уверен, что большинство маршрутизаторов используют больше параметров для определения уникальности и подлинности IP-пакетов.
Для построения своего ответа я использовал следующие источники:
решение2
Маршрутизаторы соединяют сети через шлюзы или интерфейсы, упрощенно говоря:
Do I know where this packet should go?
yes - is it one of mine?
yes - send to appropriate interface.
no - send on to next gateway
no - return a packet saying unreachable
Ваш домашний маршрутизатор будет запускать программное обеспечение для отслеживания подключений — оно будет хранить список подключений, с которыми машины в вашей сети общались в Интернете. Таким образом, он будет знать адреса и порты для возврата ответов.
TCP-пакеты имеют специальное поле, которое может содержать адрес исходной машины. Маршрутизатор использует нечто, называемое маскарадингом, чтобы вставить свой обратный адрес, и машина назначения также включает его. Это может сэкономить немного работы на отслеживателе подключений, но также раскрывает внутренние IP-адреса удаленному серверу.
С другой стороны, возврат пакетов UDP зависит от модуля отслеживания соединений маршрутизатора, который возвращает ответы на исходную машину. Это была сложная проблема, которую было трудно решить еще несколько лет назад.
Новые входящие соединения не будут иметь никаких записей в трекере соединений, поэтому маршрутизатор не будет знать, куда их отправлять, если только не будут даны специальные инструкции по пересылке для этого типа пакета, и вы обнаружите во всех маршрутизаторах способ указать, какая машина в вашей сети будет получать новые запросы, например, на порт 80.
TCP — это сложный и удивительный протокол, управляемый состоянием, пакеты не обязательно должны следовать тем же маршрутам, могут быть разбиты на более мелкие части, прибывать не по порядку, с исправлением ошибок, требующим повторной отправки отдельных пакетов, и поток данных может быть повторно собран, причем приложения на обоих концах не будут знать о каких-либо трудностях, если только они не слишком велики, чтобы повлиять на производительность. Многие доктора наук были получены с его помощью!
решение3
Чтобы понять маршрутизацию, сначала вам следует иметь представление омодель OSIи вы также должны иметь представление оCIDR.
Это будет довольно просто:
Когда пакет покидает компьютер в стандартной домашней сети, компьютер знает, что это частная сеть, и понимает, что конечный пункт назначения находится за пределами сети из-за CIDR, и поэтому отправляет пакет на шлюз по умолчанию. Шлюз по умолчанию смотрит на IP и отправляет его по цепочке маршрутизаторов, пока он не достигнет целевой сети (на основе информации об IP в заголовке пакета), затем этот шлюз перенаправит его на нужный IP в сети (иногда это основано на порте в сведениях о пакете, иногда просто на IP, в зависимости от сервера/сети на дальнем конце). Когда запрошенная информация отправляется обратно, ваш маршрутизатор знает, на какой компьютер она отправляется, из-за порта, который был выбран для маркировки сеанса, и он знает, какому частному IP принадлежит этот сеанс. Это еще не все, но это довольно общее объяснение, чтобы понять концепцию маршрутизации. Я уверен, что другие поправят меня или добавят что-нибудь еще.
Что сводится к ответу на ваш вопрос, да, это возможно, вам нужно только знать публичный IP в конечной точке и порт, на котором должно быть установлено соединение. Маршрутизатор будет отвечать за то, чтобы знать, на какой компьютер перенаправить этот порт, чтобы достичь сервера в частной сети (на основе правил NAT).
решение4
Я не уверен, что правильно понимаю, но я дам лучшее предположение. Вы спросили: «Возможно ли установить соединение с ПК, управляемым маршрутизатором?» Я предполагаю, что вы имеете в виду удаленный доступ. Вы можете использовать что-то вроде VNC или удаленного рабочего стола или что-то в этом роде. Если вы говорите о двух ПК, подключенных через Интернет, то проверьте VPN. Если вы имеете в виду назначение одним ПК IP-адреса другому, то это будет соединение сервер/клиент, а через WAN это должно быть что-то вроде VPN.
Пакет TCP содержит информацию о пункте назначения локальной сети внутри пакета.