У меня есть маршрутизатор, и к этому маршрутизатору подключены две локальные машины A и B с соответствующими ip 192.168.1.2 и 192.168.1.3. Когда A делает http-запрос к какому-либо серверу и соответствующий ответ получает маршрутизатор, тогда как этот ответ распространяется на A (не на B)? Связан ли каждый запрос с определенным портом, чтобы маршрутизатор знал, что он предназначен для A, а не для B? В таком случае порты не могут быть разделены на A и B?
В этом случае используются протокол разрешения адресов (ARP) и трансляция сетевых адресов (NAT).
Связан ли каждый запрос с определенным портом, чтобы маршрутизатор знал, что он предназначен для A, а не для B? В таком случае порты не могут быть разделены на A и B?
Да, порты - это часть игры.
Но ваш вопрос - дубликат. Проверьте этот вопрос:
Как два компьютера подключаются к одному внешнему адресу через NAT?
чтобы увидеть как NAT предотвращает конфликты адресов.
Пример:
HOST A addr HOST B addr
10.1.0.2:4040 10.1.0.3:4040
-----------------------------------------
NAT 200.50.50.28:4040 200.50.50.28:4041 (what external host sees)
200.50.50.28 - это глобальный (интернет) IP-адрес маршрутизатора.
Каждый номер порта уникален в таблице NAT. И, конечно же, роутер делает все грязный задание прозрачного изменения адресов отправителя и получателя.
Протокол HTTP работает поверх протокола TCP, который работает поверх протокола IP. TCP - это протокол, ориентированный на соединение, что означает, что соединение должно быть создано до того, как клиент и сервер смогут общаться.
TCP-соединение состоит из [исходный IP-адрес, исходный порт, целевой IP-адрес, порт назначения]. Это означает, что когда сообщение отправляется на сервер, сервер уже имеет IP-адрес и порт, на которые он должен ответить. Любой ответ отправляется в дейтаграммах IP, направленных на этот адрес и порт.
Когда какая-либо дейтаграмма получена маршрутизатором, она направляется на следующий переход по пути обратно туда, где она принадлежит. В вашем простом случае следующий переход находится прямо в локальной сети. Когда он попадает в локальную сеть, протокол ARP используется для поиска MAC-адреса для отправки, при условии, что этот адрес еще не находится в адресном кэше маршрутизатора. В любом случае, учитывая MAC-адрес, маршрутизатор отправляет дейтаграмму непосредственно на этот адрес в локальной сети.
Конечно, это не делается в портах.
В локальной сети это делается по MAC-адресу. По сути, каждая машина имеет уникальный MAC-адрес. Таким образом, когда пользователь хочет, чтобы A получил HTTP-ответ от некоторого сервера (заданный IP-адрес), будут выполняться следующие процессы: