(Для наступного я проігнорую будь-які пошуки 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-коду та порту джерела / призначення.