ICMP Destination unreachable (Port unreachable) error
I will describe the problem that I encounter below which is the error message that I can see in WireShark:
ICMP Destination unreachable (Port unreachable)
I am connecting an IP Camera like this:
IP Camera —> Router(no internet connected) —> My PC Computer
- IP Camera IP Address: 192.168.1.101
- PC Ethernet IP Address: 192.168.1.104
- I have disabled all firewalls in Windows 10 and have no antivirus software
(Above 2 IP are put as static IP Address Reservations in the TP-Link Router)
Now I use some code that I have (I will try to not post the code as I dont think that is the problem). When I run the code, I use WireShark to sniff out what the problem is and I get as seen in image below this error message:
ICMP Destination unreachable (Port unreachable)
I have googled on this error message and I have red almost every post I can find but no one really tells how to solve this problem. Only what it means.
The image shows the error. However each time I run the code, the source/destination ports changes everytime so they are not static. It could be for example those ports as I tried the code at least 3 times:
Source ports: 65063,64077,51923 etc (PC computer)
Destination ports: 6987,6991,6995 etc (IP Camera)
What is causing this error and what can I do to solve this error?
(Image from WireShark)
Протокол ICMP. Сообщения типа Error
Протокол ICMP представляет собой механизм передачи сообщений об ошибках, которые возникают в процессе информационного обмена в сети Internet. На данный протокол не возлагаются функции локализации и устранения причин, которые привели к возникновению этих ошибок.
Для передачи сообщений протокола ICMP по сети IP используются дейтаграммы обычного формата. Сообщение ICMP в данном случае помещается в поле DATA. Заголовок дейтаграммы, которая предназначена для переноса сообщений ICMP, имеет следующие значения полей:
- SERVICE TYPE = 0
- PROTOCOL = 1 (ICMP)
- TIME TO LIVE – устанавливается в соответствии с типом сообщения в секундах
- SOURCE IP ADDRESS – адрес источника сообщения ICMP
- DESTINATION IP ADDRESS– адрес станции назначения для данного сообщения ICMP
Структура сообщения ICMP
TYPE ICMP | Сообщение |
0 | Echo Reply |
3 | Destination Unreachable |
4 | Source Quench |
5 | Redirect |
8 | Echo Request |
11 | Time Exceeded |
12 | Parameter Problem |
13 | Timestamp Request |
14 | Timestamp Reply |
15 | Information Request |
16 | Information Reply |
17 | Address Mask Request |
18 | Address Mask Reply |
Сообщение ICMP состоит из заголовка сообщения и собственно сообщения. Заголовок сообщения ICMP может занимать до 8 байтов – два 32-х разрядных слова. Собственно сообщение ICMP не имеет фиксированной длины, поэтому размер данного поля определяется типом сообщения. В заголовке сообщения размещается идентификатор типа сообщения ICMP. В таблице приведены значения поля TYPE ICMP и типы сообщений, которые соответствуют этим значениям.
Сообщения ICMP можно условно разделить на парные и непарные. Парные сообщения состоят из двух компонентов – запрос (Request) и ответ (Reply). Сообщение типа ответ высылается станцией назначения только в ответ на полученное от источника сообщение типа запрос. К сообщениям такого типа относятся Echo Request/Reply. Непарные сообщения формируются асинхронно при возникновении какой либо проблемы при передаче дейтаграммы, и передается в адрес источника данной дейтаграммы. К сообщениям подобного типа относятся сообщения Destination Unreachable и Source Quench.
Сообщения ICMP
Структура заголовка сообщений ICMP
Заголовки всех сообщений ICMP имеют примерно одинаковый формат. В четырех первых байтах заголовка сообщений ICMP размещаются поля TYPE, CODE и CHECKSUM.
В этом поле заголовка сообщений ICMP размещается код, который соответствует типу сообщения.
В поле CODE некоторых сообщений ICMP может быть размещен код дополнительной диагностической информации.
В этом поле заголовка сообщений ICMP размещается контрольная сумма данного сообщения. Эта контрольная сумма вычисляется суммированием всех полей, начиная с поля TYPE. При вычислении контрольной суммы значение поля CHECKSUM полагается равным 0.
Сообщение Destination Unreachable
Сообщение Destination Unreachable (цель недоступна) — принадлежит к непарным сообщениям ICMP. Это сообщение формируется в том случае, если запрошенный сетевой ресурс является недоступным для запрашивающей его станции.
0 | 7 | 15 | 31 |
TYPE=3 | CODE=0…12 | CHECKSUM | |
UNUSED=0 | |||
Internet Header+64 первых бита дейтаграммы | |||
… |
В поле CODE сообщения Destination Unreachable размещается код, который соответствует типу запрошенного недоступного сетевого ресурса или конкретизирует причину, из-за которой этот ресурс недоступен в данном случае. Возможные значения поля CODE приведены в таблице:
CODE | Значение |
0 | Network Unreachable |
1 | Host Unreachable |
2 | Protocol Unreachable |
3 | Port Unreachable |
4 | Fragmentation Need & DF set |
5 | Source Route Failed |
6 | Destination Network Unknown |
7 | Destination Host Unknown |
8 | Source Host Isolated |
9 | Communication with destination Network Administratively Prohibited |
10 | Communication with destination Host Administratively Prohibited |
11 | Network Unreachable for type of service |
12 | Host Unreachable for type of service |
Сообщения данного типа могут быть сформированы как станцией назначения (CODE=2 и 3), так и одним из промежуточных маршрутизаторов – шлюзов (CODE=0,1,6 и т.д.). При этом в качестве адреса источника должен быть указан IP адрес узла, который обнаружил проблему. Например, сообщение №1 — Host Unreachable может быть сформировано последним маршрутизатором, который пытается доставить сообщение до хоста по непосредственно подключенной сети. Для того, чтобы станция – источник смогла правильно интерпретировать диагностическое сообщение, в тело сообщения Destination Unreachable помещается заголовок и первые 8 байт исходной дейтаграммы.
Сообщение Time Exceeded
Сообщение Time Exceeded – (истекло время) принадлежит к непарным сообщениям ICMP. Это сообщение должно быть сформировано в том случае, если в процессе передачи дейтаграммы истекло допустимое время её существования в сети или на хосте.
0 | 7 | 15 | 31 |
TYPE=11 | CODE=0 или 1 | CHECKSUM | |
UNUSED=0 | |||
Internet Header+64 первых бита дейтаграммы | |||
… |
Значение поля CODE в сообщении Time Exceeded используется для уточнения причины, по которой дейтаграмма прекратила существование:
- CODE=0 — в процессе передачи дейтаграммы поле TTL приняло значение 0
- CODE=1 – таймер дефрагментации установился в 0 до полной сборки принятого сообщения
Сообщение Parameter Problem
Сообщение Parameter Problem — (проблема с параметром) принадлежит к непарным сообщениям ICMP. Сообщение данного типа должно быть сформировано в том случае, если в процессе обработки заголовка дейтаграммы на хосте или маршрутизаторе были обнаружены некорректные аргументы, которые делают невозможным дальнейшее перемещения дейтаграммы. В этом случае дейтаграмма должна быть уничтожена, а в адрес её источника должно быть передано сообщение Parameter Problem.
0 | 7 | 15 | 31 |
TYPE=12 | CODE=0 или 1 | CHECKSUM | |
POINTER | UNUSED=0 | ||
Internet Header+64 первых бита дейтаграммы |
В поле CODE данного сообщения размещается признак типа диагностической информации. В том случае, если в этом поле находится код «0», значение поля Pointer сообщения Parameter Problem соответствует номеру байта в заголовке исходного сообщения, который не может быть адекватно интерпретирован. Например, значение Pointer=1, в данном случае указывает на возникновение проблемы с интерпретацией поля Type Of Service исходного сообщения.
Значение поля CODE=1 должно быть сформировано в ситуации, когда причина, по которой данная дейтаграмма не может продолжать перемещение по сети заключается в несоответствии запрашиваемых параметров установленным требованиям. Такими требованиями могут быть, в частности, требования по обеспечения безопасности.
Сообщение Source Quench
Сообщение Source Quench – (сдерживание источника) принадлежит к непарным сообщениям ICMP. Это сообщение должно быть сформировано в том случае, если в процессе передачи дейтаграммы возникла угроза перегрузки.
При получении от станции назначения или одной из промежуточных станций сообщения Source Quench, источник должен, используя специальные процедуры уменьшить скорость информационного обмена в указанном направлении.
0 | 7 | 15 | 31 |
TYPE=4 | CODE=0 или 1 | CHECKSUM | |
UNUSED=0 | |||
Internet Header+64 первых бита дейтаграммы | |||
… |
При передаче этого сообщения в качестве адреса назначения должен быть использован адрес IP источника первичного сообщения. Для того, чтобы станция – источник смогла правильно интерпретировать диагностическое сообщение, в тело сообщения Destination Unreachable помещается заголовок и первые 8 байт исходной дейтаграммы.
Сообщение Redirect
Сообщение Redirect – (изменение маршрута) принадлежит к непарным сообщениям ICMP. Это сообщение должно быть сформировано в том случае, если при получении дейтаграммы шлюз обнаруживает, что для её передачи был выбран неудачный маршрут. На рисунке приведен пример использования сообщения Redirect для изменения неверного маршрута.
В данном случае хост А(10.40.0.2) отправляет дейтаграмму в направлении хоста В(10.10.0.2) используя для этого в качестве шлюза маршрутизатор R2. После того, как маршрутизатор R2 получает дейтаграмму, он определяет, что данная дейтаграмма адресована в направлении 10.10.0.0. Кратчайший маршрут для достижения этой сети для маршрутизатора R2 лежит через маршрутизатор R4, который в данном случае подключен к тому сегменту сети, из которого была получена принятая дейтаграмма.
Маршрутизатор R2 направляет дейтаграмму по направлению R4 (красная стрелка на рисунке) и одновременно формирует сообщение ICMP Redirect, в котором он рекомендует хосту А впредь для передачи дейтаграмм в направлении сети использовать в качестве шлюза маршрутизатор R4.
0 | 7 | 15 | 31 |
TYPE=5 | CODE=0/1/2/3 | CHECKSUM | |
Gateway Internet Address | |||
Internet Header+64 первых бита дейтаграммы | |||
… |
Сообщения данного типа могут быть сформированы только маршрутизатором – шлюзом. В заголовке сообщения ICMP Redirect размещается IP адрес шлюза, который рекомендуется использовать для достижения сетевого ресурса, указанного в исходной дейтаграмме и тип маршрута, который должен быть изменен по предложению источника сообщения ICMP. В таблице приведены используемые значения поля CODE сообщения ICMP Redirect и соответствующие им рекомендации по изменению маршрута: