Сообщение об ошибке против исправления ошибки
Говоря техническим языком, ICMP - это механизм сообщения об ошибках. Он обеспечивает для шлюзов, обнаруживающих ошибки, способ сообщить об ошибке первоначальному источнику. Хотя спецификация протокола определяет допустимые способы использования ICMP и предлагает варианты возможных действий в ответ на ошибки, ICMP не специфицирует полностью действия, которые нужно предпринять в ответ на все возможные ошибки. Короче говоря:
ICMP только сообщает о возникших ошибках первоначальному источнику; источник сам должен связать ошибки с конкретными прикладными программами и предпринять действия по исправлению ошибок.
Большая часть ошибок исходит от первоначального источника, но другие - нет. Так как ICMP сообщает об ошибках первоначальному источнику, он не может использоваться, чтобы информировать промежуточные шлюзы об ошибках. Например, представим, что дейтаграмма следует по пути через шлюзы G1,G2,...,Gk. Если Gk содержит некорректную информацию о маршрутах и ошибочно отправит дейтаграмму на шлюз Gе, то Ge может лишь сообщить об ошибке первоначальному источнику. К сожалению, источник не отвечает за эту проблему и не может управлять некорректно ведущим себя шлюзом. Фактически, источник не сможет даже определить, какой шлюз вызвал эту проблему.
Зачем ограничивать ICMP взаимодействием с первоначальным источником ? Ответ должен быть очевиден, если вспомнить рассмотрение нами форматов дейтаграммы и маршрутизации в предыдущих главах. Дейтаграмма содержит поля, которые определяют только первоначального источника и конечного получателя; она не содержит полного описания своего пути через интернет(кроме необычных случаев, когда используется опция записи маршрута).
Более того, так как шлюзы могут создавать и менять свои таблицы маршрутизации, не существует глобального представления о путях. Поэтому, когда дейтаграмма достигает данного шлюза, нельзя узнать, какой путь она прошла до этого. Если шлюз обнаруживает ошибку, он не может узнать какие промежуточные машины обрабатывали эту дейтаграмму, и поэтому не может сообщить им об ошибке. Вместо простого удаления дейтаграммы этот шлюз использует ICMP, чтобы сообщить первоначальному источнику о возникшей проблеме, надеется на то, что администраторы ГВМ будут взаимодействовать с администраторами сети, чтобы локализовать и исправить ошибку.