Як маршрутизатор знає, куди пересилати пакет


67

Якщо до маршрутизатора підключено декілька комп'ютерів з локальними адресами (192.168.0. #), І кожен комп’ютер відкриває веб-браузер і запитує сторінку через HTTP, коли ці пакети TCP: 80 надсилаються, маршрутизатор перемикає локальну адресу на статичний IP-роутер (тобто постачальник надає IP-адресу), щоб сервер міг відповісти на відповідну адресу.

Але як маршрутизатор знає, на який комп'ютер направити відповідь HTTP, оскільки заголовок TCP не містить локальної IP-адреси (чи не так?), А всі комп'ютери використовують порт 80?

Чи має це щось спільне з адресами MAC?

Як саме це працює?

Відповіді:


78

Більшість домашніх маршрутизаторів використовують спеціальний корпус NAT під назвою PAT.

Ви також побачите це як NAPT або IP маскування. Усі три останні терміни означають одне і те ж у загальному користуванні. (Скорочення - Переклад мережевих адрес / Переклад адрес порта / Переклад портів мережевих адрес)

Коли пакет виходить з вашої внутрішньої машини, адреса джерела буде переписана, як вам відомо. Порт джерела також змінюється, як правило, на велику кількість, і маршрутизатор зберігає таблицю перекладу адрес.

Наприклад, скажімо, у вас є клієнтська машина, яка переходить на www.google.com. Ваш комп'ютер (наприклад, 192.168.1.100) шукає цю адресу і здійснює з'єднання TCP до 72.14.204.147 на порту 80 з вашої внутрішньої IP-адреси, використовуючи випадковий вихідний порт.

Підключення до комп'ютера виглядає так:

192.168.1.100:37641   <-->  72.14.204.147:80

Ваш комп'ютер посилає пакет до маршрутизатора, який вибирає новий випадковий високий порт і переписує пакет. Кожне вихідне з'єднання отримує власний порт на маршрутизаторі. Потім маршрутизатор пересилає пакет у свій Інтернет-провайдер після додавання його до таблиці зв’язку:

PrivateIP        PrivatePort   PublicIP      PublicPort    Remote          RemotePort
-------------    ----------    -----------   -----------   ----------      -----------
192.168.1.100    37641         *10.6.23.5    59273         72.14.204.147   80

* Для прикладу, я використовував адресу, починаючи з 10, але вони не є загальнодоступними. Таблиця також дещо спрощена.

Для google з'єднання виглядає так:

10.6.23.5:59273   <-->  72.14.204.147:80

Google надішле відповідь на 10.6.23.5 на порт 59273. Потім ваш маршрутизатор шукає цю інформацію в таблиці та пересилає пакет на 192.168.1.100:37641.


3
Отже, підводячи підсумок, Маршрутизатор використовує номери портів, щоб запам’ятати, що зовні локальна мережа переходить на внутрішню частину мережі. Однак це не пояснює, як www.google.comби мене знайти, якби я не надіслав йому початковий запит. Іншими словами, повідомлення можуть надходити до мене лише через маршрутизатор, якщо я спочатку надіслав запит через маршрутизатор
CodyBugstein

2
@Imray google.com (або що-небудь ще в Інтернеті) не може знайти ваш комп'ютер, якщо ваш комп'ютер не ініціював запит. Ось чому наявність маршрутизатора додає багато безпеки.
Джейсон

6
@Jason Це небезпечний міф. Наявність брандмауера додає безпеку. Завдання типового маршрутизатора SoHo полягає лише в тому, щоб все працювало, а не перешкоджало роботі. Ознайомтесь тут для отримання додаткової інформації.
Девід Шварц

1
@Jason Краще не видаляти ваш коментар, це робить те, що було б корисним для обговорення, а неможливо прочитати.
барлоп

2
Хороший приклад, але чи означає це, що всі порти високої кількості завжди відкриті на наших маршрутизаторах?
jiggunjer

1

Маршрутизатори між локальною мережею та іншим Інтернетом використовують техніку, яку називають NAT.

Лише уривок із TCP / IP Illustrated Volume 1 про NAPT із словом про недоліки простого кузена, Basic NAT:

Basic NAT виконує перезапис лише IP-адрес. По суті, приватна адреса переписується як загальнодоступна адреса, часто з пулу або діапазону публічних адрес, наданих постачальником послуг. Цей тип NAT не є найпопулярнішим, оскільки не допомагає різко зменшити потребу в IP-адресах - кількість глобально маршрутизованих адрес повинна дорівнювати або перевищувати кількість внутрішніх хостів, які бажають одночасно отримати доступ до Інтернету. Набагато більш популярний підхід, NAPT передбачає використання ідентифікаторів транспортного рівня (тобто портів для TCP та UDP, ідентифікаторів запитів для ICMP) для розмежування того, який хост на приватній стороні NAT пов'язаний з певним пакетом (див. Рис. 7- 4). Це дозволяє великій кількості внутрішніх хостів (тобто, кілька тисяч) для доступу до Інтернету одночасно, використовуючи обмежену кількість публічних адрес, часто лише одну. Зазвичай ми будемо використовувати термін NAT для включення як традиційного NAT, так і NAPT, якщо різниця не є важливою в конкретному контексті.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.