web-dev-qa-db-ja.com

Pingがトランスポートプロトコルを使用できないのはなぜですか?

PingがICMPを直接使用する、つまりトランスポート層をバイパスすることを知りました。そんなことがあるものか?アプリケーション(L5)は、トランスポート層(L4)でUDPまたはTCPを使用するべきではありませんか?アプリケーションはソケットを使用してL4とインターフェイスしますが、L3からL1までは認識しません。

3
ToniAz

「Ping」と言うときは、元のpingであるため、ICMPpingを指します。 ICMPは、実際にはUDPよりも低いレベルで動作します&TCPトランスポートプロトコルであり、ポートを使用しません[ 1 ]:

ICMPは、IPの基本的なサポートを高レベルのプロトコルであるかのように使用しますが、ICMPは実際にはIPの不可欠な部分であり、すべてのIPモジュールで実装する必要があります。

これは主に、IP自体が完全に信頼できるわけではないため、ICMPを使用してエラーを報告するためです。したがって、ICMPは、TCP/UDPではなく、IPを使用する低レベルのプロトコルです。 pingはICMPを使用する単なるツールです(低レベルCのおかげで)が、ICMPはpingやtracerouteだけではなく、その主な目的は私が述べたように完全に異なります。

そして、レイヤーが下のレイヤーに対してブラインドであることをどのように学んだのかわかりません。それは真実ではありません、または少なくとも私の知る限りでは。 pingは、Cで実装することにより、任意のプロトコルを使用できます。

Cのような低水準言語は、システムIPベースのモジュールに直接アクセスできるため、C(および現在Cで記述されている他のほとんどすべての言語)を使用して、このようなプロトコルを使用できます。

より明確に説明するには(tl; dr):

PingはICMPベースのツールであり、TCPおよびUDPを使用しないため、ポートでは機能しません(プロトコルはポートを必要とせず、サービスのみが必要であるため)。 TCPなどの高レベルプロトコルの機能を必要とするため、それらを実装しません。また、pingがアプリケーションであるにもかかわらず、ICMPで動作します。ポートを使用しません。

3
Fanatique