Незважаючи на те, що питання було повністю висвітлено. Я відчуваю, що цей процес слід найкраще описати поетапно.
Для цього прикладу я сиджу в приватній локальній мережі, підключеній до Інтернету через маршрутизатор. Оскільки наша мережа розділяє одну загальнодоступну 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
(порт, на якому складено мій комп'ютер)