Недавно я понял, что ICMP не содержит каких-либо портов, поэтому я попытался выполнить эхо-запрос с моего ноутбука, подключенного к беспроводной сети, на общедоступные IP-адреса (конечно, это сработало!).
В типичной конфигурации локальная сеть использует одну из назначенных «частных» подсетей IP-адресов (RFC 1918). Маршрутизатор в этой сети имеет частный адрес в этом адресном пространстве. Маршрутизатор также подключен к Интернету с помощью «общедоступного» адреса, назначенного поставщиком услуг Интернета. По мере прохождения трафика из локальной сети в Интернет адрес источника в каждом пакете «на лету» преобразуется с частного адреса в общедоступный. Маршрутизатор отслеживает основные данные о каждом активном соединении (в частности, адрес и порт назначения).
Есть ли в моем маршрутизаторе специальное место для пакетов ICMP?
У него всего 4 поля: «тип», «код», «контрольная сумма» и «данные». Возможным решением является только добавление дополнительных данных. При ответе укажите источники, я не смог их найти. Спасибо за уделенное время:)
Ваш маршрутизатор преобразует ваш внутренний адрес во внешний адрес. Пакет отправляется в Интернет с внешним адресом в качестве адреса источника в пакете ICMP.
Ответы отправляются из другой системы обратно на внешний адрес маршрутизатора. Пакет снова переписывается, чтобы перенаправить его на внутренний адрес.
В зависимости от вашего маршрутизатора, особенно личного / домашнего или корпоративного / корпоративного, он может использовать несколько способов отслеживания того, какая внутренняя система отправила исходный пинг ICMP. Он может просто хранить список исходящих пакетов ICMP и совпадать, он может использовать несколько внешних адресов, по одному для каждого внутреннего адреса и т. Д.
Изучите «NAT с отслеживанием состояния» для вашего маршрутизатора, чтобы получить более подробную информацию.
Здесь недостает информации Идентификатор (он же идентификатор запроса), который находится в 8-байтовом заголовке ICMP - см. https://en.wikipedia.org/wiki/Ping_(networking_utility)#Echo_request. Когда несколько внутренних хостов проверяют один и тот же внешний хост одновременно, они, скорее всего, будут делать это с разными идентификаторами запроса.
Он используется вместо номера порта TCP / UDP в таблице NAT маршрутизатора, чтобы возвращаемые ответы можно было сопоставить с начальным запросом и отправить обратно на правильный внутренний хост (а также обычное сопоставление на основе внешнего глобальный адрес).
Смотрите также https://tools.ietf.org/html/rfc5508#section-3.1