![>](style_images/1/nav_m.gif)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.128.170.81] |
![]() |
|
![]() |
|
|
Здравствуйте!
В последнее время у меня возник интерес к сетевым технологиям, которые я плохо понимаю. В частности, не понимаю, как работает NAT и программы удаленного управления компьютером (TeamViewer и аналогичные): 1. За роутером IP адреса ПК локальной сети извне не видны. Как роутер перенаправляет пакеты от/к нужному компьютеру и разбирается с различным типом информации (FTP-запрос, запрос интернетовской страницы, почтовое сообщение или др.)? Где роутер сохраняет информацию о том, какой из ПК какой запрос сделал и какому из ПК какой поступивший извне пакет отправлять? Как ему удается справляться с сложными задачами классификации и распределения пакетов для нескольких ПК, каждый из который может использовать различные протоколы? Я читал книги Немет и других авторов, но так это и не понял. 2. Как программам удаленного управления компьютера удается через роутер управляеть ПК в локальной сети? Если объяснять это затруднительно, то посоветуйте, пожалуйста, книгу и ресурс, в которых есть понятные объяснения по этим вопросам. |
Сообщ.
#2
,
|
|
|
1) Может стоит начать с https://ru.wikipedia.org/wiki/NAT
2) Любые программы, которые могут создать соединение (krdc, RAdmin) или используют опорный туннель через внешний сервер (TeamViewer, AnyDesk). |
Сообщ.
#3
,
|
|
|
По пункту 2 - о программах такого типа я знаю и их использовал, хотел бы понять принцип их работы
Добавлено По пункту 1: "суть механизма которого состоит в замене адреса источника при прохождении пакета в одну сторону и обратной замене адреса назначения в ответном пакете. Наряду с адресами источник/назначение могут также заменяться номера портов источника и назначения. По поводу адресов - понятно, а вот по какому принципу заменяются номера портов источника и назначения? Как я понимаю, в пакете есть информация о порте (типе запроса), например 21 – ftp, 22 – ssh, 23 – telnet, 25 – smtp и др.). Как и для чего преобразуются порты? Ведь при приходе пакета внешний адрес заменяется на врутренний и зачем менять номер порта? |
Сообщ.
#4
,
|
|
|
Цитата tuchin @ По пункту 2 - о программах такого типа я знаю и их использовал, хотел бы понять принцип их работы В двух словах: если прямое соединение между ID1 и ID2 не возможно (ну у одного из них нет видимого для другого IP адреса*), тогда может быть установлено соединение через сервер: ID1 <---> Server <---> ID2. При этом и ID1 и ID2 это просто идентификационные данные на этом сервере и являются адресами для соединений с этим сервером. Тогда сервер будет отслеживать оба соединения с клиентами и перекидывать пакеты от ID1 к ID2 и наоборот. Получится подобие тоннеля, который установлен средствами сервера (через внешний IP сервера и программы управления, которые раздают ID клиентам). *Это утверждение не равнозначно. У одного из ID может быть адрес пространства интернет (допустим ID1), а у другого только локальной сети (ID2). Тогда ID1 не сможет сам установить соединение с ID2 т.к. он не видит его сетевой адрес, а вот ID2 может т.к. адрес ID1 виден глобально. Добавлено Цитата tuchin @ По пункту 1: "суть механизма которого состоит в замене адреса источника при прохождении пакета в одну сторону и обратной замене адреса назначения в ответном пакете. Наряду с адресами источник/назначение могут также заменяться номера портов источника и назначения. По поводу адресов - понятно, а вот по какому принципу заменяются номера портов источника и назначения? Как я понимаю, в пакете есть информация о порте (типе запроса), например 21 – ftp, 22 – ssh, 23 – telnet, 25 – smtp и др.). Как и для чего преобразуются порты? Ведь при приходе пакета внешний адрес заменяется на врутренний и зачем менять номер порта? Порт не является привязанным к протоколу передачи данных. Если вы запустите nginx на 21 порту, то это не сделает работу nginx как ftp сервера. Он по прежнему будет ожидать запросы http, но на 21 порту. При этом придется вручную в строке адреса указывать этот порт (https://localhost:21) т.к. он отличается от принятых по умолчанию (см. приведенный вами список). Но, если вы в пакете замените порт скажем с 80 на 12345 (просто число из головы), а при приходе ответного пакета на порт 12345 обратно на 80, тогда локальный компьютер будет думать, что он работает с портом 80, а вот удаленный будет взаимодействовать с другим портом (12345). Кстати, браузер при установке соединения тоже "выбирает" случайный порт для получения ответа от сервера, а вот соединяется он как раз с 80 портом сервера. Поэтому при такой замене через PAT ничего страшного для соединения не происходит. |
Сообщ.
#5
,
|
|
|
Спасибо за ответ. Прежде чем задавать еще вопросы я почитаю литературу и подумаю. Пока понятная картина сетевого взаимодействия не складывается.
|
![]() |
Сообщ.
#6
,
|
|
Цитата tuchin @ Ведь при приходе пакета внешний адрес заменяется на врутренний и зачем менять номер порта? Представь, что у тебя за NAT спрятаны два веб-сервера. Соответственно у них разные внутренние IP. Если ты прописываешь только замену адреса, то как определить, на какой из двух серверов следует отправить пришедший снаружи пакет? А никак. Потому ты и настраиваешь маппинг портов - на первый веб-сервер ты пересылаешь пакеты пришедшие снаружи на порт 80, а на второй - пришедшие снаружи на порт 8080. Но, чтобы не заниматься дополнительной настройкой второго веб-сервера, ты во втором случае не только подменяешь адрес, но и нестандартный для HTTP порт 8080 подменяешь на стандартный 80. А на ответных пакетах делаешь обратное преобразование. В итоге - внутренний веб-сервер работает, как привык, на порте 80, внешний клиент обращается к порту 8080, а всю работу по согласованию выполняет роутер. |
Сообщ.
#7
,
|
|
|
Цитата Akina @ Спасибо за подробное объяснение, принцип понятен. Только я с каждым разом все больше убеждаюсь, что для глубокого понимания нужно этим заниматься на практике и профессионально. Представь, что у тебя за NAT спрятаны два веб-сервера |