Як NAT ділиться однією публічною IPv4-адресою на кілька приватних IPv4-адрес [закрито]


10

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

Скажімо, у мене є домашня мережа з 192.168.0.1 (IP.1) та 192.168.0.2 (IP.2), і ми обидва граємо в Counter Strike, потрапляючи в абсолютно той самий зовнішній сервер.

Як мій домашній маршрутизатор знає, який пакет перейде в IP.1? Я часто читаю речі з адресами NAT і xxx.xxx/y. ** Де записана частина / y в стеку TCP / IP?

Чи потрібен нам абсолютно NAT для цього? Що я зрозумів із статті Вікіпедії, це те, що NAT створений для оптимізації IP-адрес, коли деякі комп’ютери вимкнено. Чи дозволяє також підключати 5 пристроїв лише з 1 загальнодоступним IP-адресою?


Один для багатьох повинен відповісти на ваші запитання. Також питання домашнього спілкування та початкової освіти не найкраще підходять для цього сайту.
Крейг Костянтин

Відповіді:


14

(Для наступного я проігнорую будь-які пошуки DNS або дії другого шару, оскільки це не є відповідною частиною для історії NAT.)

Будь-яке з'єднання TCP - це кортеж з чотирьох частин:

<source IP> <source port> <destination IP> <destination port>

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

Почнемо з двох комп’ютерів без будь-якого NAT:

  • Комп'ютер має IP 1.1.1.1
  • Веб-сервер має IP 3.3.3.3
  • Стандартний порт для HTTP є 80

Коли комп'ютер запитує веб-сторінку, він спочатку вибере випадковий невикористаний номер порту з випадкового діапазону (1024-65535). Давайте виберемо 2345. Тоді відбудеться наступна послідовність: Комп'ютер надсилає пакет з: джерелом IP 1.1.1.1, портом джерела 2345, IP 3.3.3.3адресом, портом призначення 80. Пакети прибувають на веб-сервер, він бачить, що це власний IP та порт 80, тому він знає, що це запит на веб-сторінку. Потім веб-сервер відсилає веб-сторінку назад у пакетах з Source IP 3.3.3.3, Портом джерела 80, IP адресою 1.1.1.1, Портом призначення 2345. Комп'ютер отримує ці пакети, і знає, про яку веб-сторінку запросив, через номер порту 2345.

Ці комбінації портів часто записуються як такі: 1.1.1.1:2345і 3.3.3.3:80.

Тепер кількість комп'ютерів в Інтернеті набагато перевищує кількість доступних IPv4-адрес. Для збереження адресного простору було введено набір діапазонів приватних адрес, які можна вільно використовувати для спільного використання адрес. Ці діапазони називаються RFC1918 і такі:

  • 192.168.0.0 - 192.168.255.255
  • 172.16.0.0 - 172.31.255.255
  • 10.0.0.0 - 10.255.255.255

Ці адреси ніде в таблицях маршрутизації в Інтернеті немає, тому якщо ви надішлете пакет із пунктом призначення в цих діапазонах на магістралі Інтернету, вони просто занепадуть. Це тому, що мільйони людей використовують одні і ті ж адреси. Ці адреси потрібно перекласти на щось корисне для Інтернету. Тут переходить мережевий переклад адрес:

У нас є два комп’ютери:

  • A: 192.168.0.1і B:192.168.0.2
  • Їх шлюз має загальнодоступний IP 1.1.1.1.
  • Ми зберігаємо той самий веб-сервер.
  • Обидва комп'ютери хочуть однакової веб-сторінки з одного сервера.

Спочатку обидва комп'ютери вибирають випадковий порт: скажімо: 192.168.0.1:2345і 192.168.0.2:5432.

Комп'ютер Надіслати пакет з джерелом 192.168.0.1:2345та пунктом призначення 3.3.3.3:80. Шлюз переводить цей пакет в джерело 1.1.1.1:2345призначення 3.3.3.3:80та пам'ятає, що будь-які відповіді на цю комбінацію надходять 192.168.0.1. Отже, коли він отримає відповідь з джерелом 3.3.3.3:80та адресою 1.1.1.1:2345, він переведе його на джерело 3.3.3.3:80та місце призначення 192.168.0.1:2345та відправить пакет далі.

Комп'ютер B надсилає пакет з джерелом 192.168.0.2:5432та пунктом призначення 3.3.3.3:80. Шлюз переводить цей пакет в джерело 1.1.1.1:5432призначення 3.3.3.3:80та пам'ятає, що будь-які відповіді на цю комбінацію надходять 192.168.0.2. Отже, коли він отримає відповідь з джерелом 3.3.3.3:80та адресою 1.1.1.1:5432, він переведе його на джерело 3.3.3.3:80та місце призначення 192.168.0.2:5432та відправить пакет далі.

Якщо обидва комп'ютери вибирають один і той же номер порту джерела, шлюз просто вибере інший вільний номер порту випадкового джерела, і не забудьте також перекласти номер порту. Іноді це називається PAT (Порт-переклад адрес). Це в основному підмножина NAT.

Для цього існує кілька реалізацій. Шлюз може просто запам’ятати лише «Комп'ютер X, що використовується джерелом порту Y», і передати будь-що з портом Y на комп'ютер X. Можливо, пам’ятати, що Computer X використовував вихідний порт Y і призначення Z », і лише пересилав що-небудь з порту Z на порт Y назад комп'ютер X. Або є можливість, щоб він запам'ятовував весь кортеж і лише надсилав трафік на комп'ютер X, який відповідає всьому IP-коду та порту джерела / призначення.


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