Как Ping не может использовать транспортный протокол?

458
ToniAz

Я только что узнал, что Ping использует ICMP напрямую, то есть он обходит транспортный уровень. Как это возможно? Разве приложение (L5) не должно использовать UDP или TCP на транспортном уровне (L4)? Насколько я знаю, каждый уровень скрыт от всего, что на 2 уровня ниже, то есть приложение взаимодействует с L4 с помощью сокетов, но слепо от L3 до L1.

3
Модель OSI - это абстракция, которая никогда не была полностью реализована так, как написано в каком-либо стеке, поэтому имейте в виду, что ни один из уровней выше 2 на самом деле не является обязательным. приложение на уровне 7 может выполнять задачи на уровне 2, 3 или 4, если оно выберет. посмотрите мой ответ здесь о том, как приложение использует библиотеку Sockets для установки соединения с помощью вызовов функций сокетов, которые работают на разных уровнях стека: https://superuser.com/questions/984182/what-are-the-detailed -OSi-модель-шаги вовлеченных-в-подключение к-а-сайта / 984253 # 984253 Frank Thomas 6 лет назад 1

1 ответ на вопрос

3
Fanatique

Когда кто-то говорит «Ping», они ссылаются на ICMP-пинг, так как именно это и есть оригинальный пинг . На самом деле ICMP работает на более низком уровне, чем транспортные протоколы UDP и TCP, и не использует порты [ 1 ]:

ICMP использует базовую поддержку IP, как если бы это был протокол более высокого уровня, однако ICMP на самом деле является неотъемлемой частью IP и должен быть реализован каждым модулем IP.

Это происходит главным образом потому, что ICMP используется для сообщения об ошибках, поскольку сам IP не является полностью надежным. Итак, ICMP - это протокол нижнего уровня, который использует IP, а не TCP / UDP. Ping - это всего лишь инструмент, использующий ICMP (благодаря низкоуровневому C), однако ICMP - это не просто ping или traceroute, его основное назначение, как я уже заметил, совершенно иное.

И я не знаю, как вы узнали, что слои слепы для нижних слоев. Это неправда, или, по крайней мере, насколько мне известно. Ping может использовать любой протокол, который пожелает, внедрив его в C.

Низкоуровневые языки, такие как C, имеют прямой доступ к системным IP-модулям, поэтому можно использовать любой такой протокол, используя C (и почти любой другой язык, написанный на C в настоящее время).

Чтобы объяснить более явно (tl; dr):

Ping - это инструмент, основанный на ICMP, он не использует TCP и UDP, поэтому он не работает с портами (поскольку протокол не требует портов, только сервисы). Он не требует функциональности протоколов более высокого уровня, таких как TCP, поэтому он не реализует их. И несмотря на то, что ping является приложением, оно работает на ICMP и не использует порт.

* Ping может использовать любой протокол, который пожелает * Я думаю, вы можете дополнительно объяснить, что когда кто-то говорит «Ping», он означает «ICMP Ping». Akina 6 лет назад 1
Спасибо, что упомянули это @Akina. Я обновил свой ответ соответственно. Fanatique 6 лет назад 0
@Fanatique Спасибо за разъяснения. Я не подразумевал, что ICMP был протоколом прикладного уровня. Возможно, путаница связана с «этим» в первом предложении. Под «обходом» я подразумеваю «обход обходов». ToniAz 6 лет назад 0
Да, я знаю, я полагаю, что это была неправильная интерпретация с моей стороны, я отредактирую свой ответ, чтобы не подразумевать этого. Однако, как я ответил, источник ping просто не основан на tcp или udp, он основан на icmp. Fanatique 6 лет назад 1

Похожие вопросы