Як пакети IP-відповідей досягають місця призначення в приватній локальній мережі? [дублікат]


26

Це невелике теоретичне запитання, яке досить довго бентежить мене.

В основному, якщо ми знаходимося в приватній локальній мережі і хочемо, щоб вхідні пакети дісталися, наприклад, до HTTP-сервера, розташованому на одній з машин, ми пересилаємо порти так, щоб вхідні пакети доходили саме до цього комп'ютера.

Зараз я дуже розгублений у тому, як пакети "відповіді" досягають місця призначення в локальній мережі, наприклад, коли ми відкриваємо веб-сторінку чи так. Неможливо знайти будь-яку корисну інформацію з цієї теми.

Я сподіваюся, що хтось може дати мені декілька підказок або зв’язати мене з якоюсь інформацією, яка могла б це пояснити. Спасибі.

EDIT: Я думаю, я повинен уточнити. Приклад того, що я запитую, може бути приблизно таким:
1. Комп'ютер всередині локальної мережі з єдиним зовнішнім IP-адресом намагається завантажити веб-сторінку з веб-сервера поза цією локальною мережею (в основному в Інтернеті)
2 Веб-сервер відповідає і відправляє веб-сторінку назад на цей комп'ютер.

Наразі мене це бентежить, як маршрутизатор знає, на який комп'ютер надсилати вхідні дані (за умови, що маршрутизатор підключений до локальної мережі з декількома комп'ютерами) без попередньої переадресації порту.


Щойно подивився приємне відео на тему: Переклад мережевих адрес - Computerphile
Der Hochstapler

Відповіді:


56

Незважаючи на те, що питання було повністю висвітлено. Я відчуваю, що цей процес слід найкраще описати поетапно.

Для цього прикладу я сиджу в приватній локальній мережі, підключеній до Інтернету через маршрутизатор. Оскільки наша мережа розділяє одну загальнодоступну IP-адресу, ми використовуємо NAT.

Тож коли я запитую сторінку, superuser.comяка генерує багато IP-пакетів. Давайте розглянемо одну.


Джерело пакета IP : 192.168.1.12(мій IP)
Місце призначення: 64.34.119.12(superuser.com)

Тепер моя система, швидше за все, налаштована аналогічно тій, що йдеться. У мене є своя IP-адреса ( 192.168.1.12), маска підмережі ( 255.255.255.0) та шлюз за замовчуванням ( 192.168.1.1). Тепер, оскільки моє поле призначення в моєму пакеті IP вказує на мережу, відмінну від моєї власної, воно надсилається до мого шлюзу за замовчуванням (а не безпосередньо до комп'ютера).

Але як пакет може потрапити до шлюзу за замовчуванням, якщо пункт призначення десь зовсім інший?

Ethernet

Це легко, тому що ми використовуємо для цього адресування протоколу Ethernet. Ми просто встановлюємо нашу IP-адресу призначення в IP-пакеті та MAC-адресу нашого шлюзу за замовчуванням як місце призначення в Ethernet Frame .

Тепер це переконається, що наш шлюз за замовчуванням отримує пакет superuser.com. Так!

Тепер у шлюзу є наш пакет і він може відправити його прямо на своєму шляху. Але щоб переконатися, що він отримає відповідь, спершу потрібно замінити адресу джерела пакета (інакше superuser.comнамагаюся надіслати відповідь на якийсь (можливо) неіснуючий пристрій з моєю IP-адресою в їхній мережі. Тепер цього не було б дуже приємно.)
Тому мій маршрутизатор розмістить свою загальнодоступну IP-адресу у полі Джерело :


Джерело пакета IP : 92.69.127.243(мій загальний IP)
Місце призначення: 64.34.119.12(superuser.com)

Тепер ця сама гра триває і продовжується з усіма маршрутизаторами світу, поки пакет нарешті не з'явиться superuser.comі не буде створена відповідь.

Відповідь


Джерело IP-пакета відповідей : 64.34.119.12(superuser.com)
Місце призначення: 92.69.127.243(мій загальнодоступний IP-адресу)

Гаразд, відповідь надійшла до мого маршрутизатора, тепер що? Як тепер мій маршрутизатор знає надсилати відповідь 192.168.1.12?

TCP

Добре, що насправді працює, тому що ми розглянули лише частину зв'язку та IP та Ethernet. Ця робота робить цю частину TCP.

Ви, швидше за все, знаєте, що веб-сервери зазвичай працюють на порту 80. IP не має поняття портів . Це походить від TCP . У TCP ми маємо (як і в IP) порт джерела та призначення .

Мій пакет TCP для superuser.com
Джерело: 192.168.1.12(мій IP)
Порт джерела: 11111(порт, на якому складено мій комп'ютер)
Місце призначення: 64.34.119.12(superuser.com)
Порт призначення:80

Коли ваш маршрутизатор надішле цей початковий пакет (який адресований superuser.comна порту 80), він поставить туди новий вихідний порт (як 12345).
І це важлива частина! Він запам'ятає цю заміну!

TCP-пакет мого маршрутизатора на superuser.com
Джерело: 92.69.127.243(мій загальнодоступний IP)
Порт джерела: 12345(порт, який склав мій маршрутизатор)
Місце призначення: 64.34.119.12(superuser.com)
Порт призначення:80

Отже пакет відповідей, отриманий маршрутизатором, насправді виглядає так:
Відповідь TCP-пакет від superuser.com
Джерело: 64.34.119.12(superuser.com)
Порт джерела: 80
Місце призначення: 92.69.127.243(мій загальнодоступний IP-адреса)
Порт призначення: 12345(порт мій маршрутизатор складений)

Тепер він отримує цей пакет і бачить, що саме для порту, який він запам'ятав, був призначений для операцій NAT для IP-адреси 192.168.1.12(моя IP-адреса).

Відповідь на пакет TCP від ​​мого маршрутизатора
Джерело: 64.34.119.12(superuser.com)
Порт джерела: 80
Місце призначення: 192.168.1.12(мій IP)
Порт призначення: 11111(порт, на якому складено мій комп'ютер)


1
Я відредагував вашу відповідь, вона чітко не показала, що відбувається з номерами портів. Я додав більше прикладів проміжних кроків і того, які порти номери, де кожен крок.
Скотт Чемберлен

1
@OliverSalzburg Я шукав відповідь на те саме питання, і ваше пояснення допомогло мені згадати, лише швидке запитання щодо цього. Замислюєтеся, як довго маршрутизатор буде зберігати ці зворотні відображення (вихідний порт), відчуваючи, що у нього не вистачить місця, якщо він продовжує робити це за стільки запитів, чи не надто регулярно їх промиває?
Ахмед

@Ahmed: Обсяг пам'яті для відстеження цієї інформації обмежений. Існує 65536 можливих номерів портів, вони зберігаються в 2 байти. Отже, щоб запам'ятати IP-адресу (4 байти) для кожного порту, це складе 65536 x 4 байти = 262144 байт = 256 кБ. Однак специфіка реалізована в маршрутизаторі, це не багато пам’яті.
Der Hochstapler

@Oliver Чудова відповідь, саме те, що я шукав! У мене є кілька запитань - (1) "та сама гра продовжується і продовжується з усіма маршрутизаторами світу" - це точно? Невже джерельне поле не буде замінюватися на кожному кроці? (2) Чи запам'ятовує маршрутизатор відкриті порти довгостроково або він регулярно скидає їх на запити, що не відповідають? (3) Чи означає це, що хакер може пройти пакети через брандмауер маршрутизатора за допомогою атаки "людина-в-середині": прослуховування вихідних пакетів TCP, а потім націлювання на відкритий TCP-порт маршрутизатора з підробленим IP-кодом джерела, який відповідає вашому пункту призначення?
Джон Бентлі

1
Як відповідь ICMP ping повертається до комп'ютера в локальній мережі? Чи є у нього щось схоже на порт для TCP? Як щодо інших протоколів?
Жан

11

Переклад мережевих адрес . Коротко, коли маршрутизатор шлюзу приватної локальної мережі замінює приватну адресу джерела локальної мережі своєю власною загальнодоступною адресою, він змінює пакет таким чином, як присвоєння унікального та інакше безглуздого номера порту, який відображає назад у вихідний вузол локальної мережі та вихідний запит . Він запам'ятовує це зіставлення портів, тому коли відповідь повертається до загальнодоступного IP / унікального порту #, він (маршрутизатор) знає, як розв’язати його назад до одного з вихідного вузла. Це також, як ви можете запускати кілька вкладок, браузерів або інстанцій браузера, а відповіді на кожен запит браузера повертаються до правильного браузера та вкладки.


2
JRobert: Що з протоколами IP (наприклад, ICMP), крім tcp або udp, у яких немає номера порту?
Урі

0

Коли початковий пакет надходить до зовнішнього інтерфейсу маршрутизатора, він змінює IP-адресу пакета відповідно до конфігурації переадресації порту та передає модифікований пакет у внутрішній інтерфейс маршрутизатора (після необхідного звичайного ARP)

Пакет виходить на веб-сервер і все ще має зовнішню IP-адресу, яка буде використовуватися як адреса призначення для будь-якої відповіді. Відповідно сервер звертається до вихідних пакетів відповідей звичайним способом з цільовим IP-адресою, рівним IP-адресі джерела запиту. Оскільки IP-адреса запитувача є зовнішньою, пакет адресується на рівні MAC до внутрішнього інтерфейсу маршрутизатора.

Зауважте, що в кожному мережевому шарі є різні цілі.


0

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

Ethernet був розроблений з топологією "шини", коли кожен комп'ютер був фізично підключений до одного середовища. У той час як сучасні комутатори оптимізують потік трафіку, вивчаючи MAC-адресу на іншому кінці порту та відповідно реплікуючи трафік, топологія "шини" все ще залишається. Все, що підключено до стандартного комутатора, може «безпосередньо» дійти до всього іншого (якщо припустити, що він знаходиться в одній підмережі) без необхідності «пройти» через проміжний пристрій, наприклад маршрутизатор.

Ви можете заплутатися, якщо пристрій, до якого ви підключаєте всі комп’ютери, має кілька портів Ethernet для локальної мережі та один порт "WAN". Цей тип пристроїв насправді є як маршрутизатором, так і комутатором в одній шасі.

Отже, у вашій локальній мережі, якщо ваш HTTP-сервер має адресу 192.168.1.55, щоб дістатися до нього всередині вашої локальної мережі, вам потрібно буде ввести " http://192.168.1.55 " в адресному рядку вашого браузера. Роутер ніколи цього не бачить. Щоб дістатися до нього за межами вашої локальної мережі, вам потрібно буде ввести свій зовнішній IP, тобто " http://256.99.88.77 : {порт, який ви переслали сюди}" або що б там не було. Це дійсно потрапляє на ваш маршрутизатор, функція NAT працює на ньому, а потім маршрутизатор надсилає його на 192.168.1.55.


0

Простіше кажучи, коли комп'ютер у приватній локальній мережі ініціює вихідне з'єднання, шлюз NAT автоматично генерує для нього зіставлення портів. Вони приблизно такі ж, як відображення портів, які ви вводили вручну раніше: {загальнодоступний порт, приватна адреса, приватний порт} і використовуються приблизно так само. Найбільша відмінність від динамічних відображень полягає в тому, що NAT-шлюзу часто доводиться довільно призначати загальнодоступні порти для відображень, коли очікуваний номер порту вже використовується.

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