web-dev-qa-db-ja.com

TCPが接続指向である場合、パケットが異なるパスをたどるのはなぜですか?

私の知識によれば、インターネットアプリケーションを設計する必要がある場合、コネクション型サービスまたはコネクションレス型サービスのいずれかを使用する必要がありますが、両方を使用する必要はありません。

インターネットの接続指向サービスはTCPであり、コネクションレスサービスはUDPであり、どちらもインターネットプロトコルスタックのトランスポート層に存在します。

インターネットの唯一のネットワークレイヤーはIPで、これはコネクションレスサービスです。つまり、設計するアプリケーションが最終的にIPを使用してパケットを送信するということです。

コネクション型サービスは、同じパスを使用してすべてのパケットを送信しますが、コネクションレス型サービスはそうではありません。

したがって、私の問題は

接続指向のアプリケーションが設計されている場合は、同じパスを使用してパケットを送信する必要があります。しかし、IPは別のルートを使用することでそのルールに違反します。TCPとIPの両方がこの意味でどのように連携するのでしょうか?それは私を完全に混乱させます。

27
Assasins

私の友人であるあなたは、2つの異なるレイヤーの機能を混同しています。

TCPは、2つの端の間に、特に輻輳制御メカニズムなどの異なるものをネゴシエートできる接続確立があるという意味で、接続指向です。
トランスポート層プロトコルの一般的な目的は、プロセスからプロセスへの配信を提供することです。これは、ルートについて何も知らないことを意味します。パケットがどのようにエンドシステムに到達するかは範囲外であり、2つのエンドプロセス間でパケットがどのように送信されるかにのみ関係しています。

一方、IPはインターネットのネットワークレイヤープロトコルであり、エンドシステム間のデータ配信に関係していますが、コネクションレスであり、接続を維持しないため、各パケットは他のパケットとは独立して処理されます。
システムを離れると、各ルーターは各パケットに適合すると思われるパスを選択します。このパスは、可用性/輻輳に応じて変化する可能性があります。

それはあなたの質問にどのように答えますか?
TCPは、パケットが他のプロセスに確実に到達するようにします。どのようにそこに到達したかは関係ありません。
一方、IPは、相手に到達するかどうかをまったく気にしません。特定のパケットに最も適していると思われるものに従って、異なるパケットを転送するだけです。

注意:
IPが接続指向であると仮定しましょう。それは、パケットが同じパスをたどることを意味しますか?必ずしもそうとは限りませんが、これはこの層での「接続」という単語の意味に依存します。たとえば、セキュリティに関連する特定のオプションをネゴシエートすることを意味する場合、すべてのパケットがインターネット上の異なるルートを介して転送されている可能性があります。

編集:
混乱を招かないように、ネットワーク層以下のほとんどのコネクション型サービスは、接続が確立されると、すべての「パケット」が従わなければならない仮想パスも確立することを意味します。詳細については、 :
仮想回路 および フレームリレーネットワーク

35
Fingolfin

このリンクはあなたの質問にかなりよく答えます http://www.tcpipguide.com/free/t_ConnectionOrientedandConnectionlessProtocols-3.htm

一部の人々は、これ(TCP)を上位ネットワーク層での回線交換の「シミュレーション」のようなものだと考えています。これはおそらく少し疑わしい類推です。 TCP接続を使用してデバイス間でデータを送受信することができますが、そのすべてのデータは実際にはまだパケットとして送信されています。デバイス間に実際の回路はありません。つまり、= TCPは、データ交換の可能性や誤った順序でのデータの受信の可能性など、パケット交換通信のすべての潜在的な落とし穴に対処する必要があります。

TCPプロトコルは、IPパケットが順不同で到着したり失われたりする問題に対処し、1つのFIFOチャネルを介して到着するように感じさせます。はい、TCPはそれを行うのに十分スマートで、専用の基になるチャネルは必要ありません。

3
stackoverflower

TCPプロトコルは送信/受信マシンによって実装されます。パケットが送信マシンを離れると、それらが移動するルーターはTCPについて何も知らず、IPを使用してソースからパケットを取得するだけです。次に、TCPを使用して、すべてのパケットが到着し、それらが正しい順序で到着することを確認します。インターネット自体はTCPについて何も認識していません。これは単なるレイヤーです(多くの場合、コネクションレスメディア(インターネット)への接続を提供するソフトウェア)。

したがって、パケットが宛先を離れると、上位レベルのプロトコル(TCPまたはUDPなど))に関係なく、宛先に到達する限り、(ほとんど)任意のパスを通過できます。

つまり、それよりも少し複雑ですが、覚えている限り、それは一般的な考えです。

2
Catlin

ルーターは3つのレイヤー(物理レイヤー、データリンクレイヤー、ネットワークレイヤー)でのみ機能するため、情報のみに基づいてルーターが決定を行います。ネットワーク層(IPプロトコル)のため、TCPまたはルーターでのUDPに関する情報はありません。

0
Mustafa thamer

私の短所を適切に紹介し、

1)接続指向の意味==>リソース(バッファ、cpu、帯域幅など)を予約します。しかし、「どこ??」(リソースは予約されていますか??)これが混乱の理由です。したがって、以下はansです。).

2)トランスポート層での接続指向は、==>両端のプロセス/ポートでリソースを予約することを意味します。(TCPはトランスポート層であるため、その責任は中間パスで何が発生しているかに関係なく、両方のエンドプロセスでのみリソースを予約します。

ネットワーク層での接続指向は、==>ネットワーク層でリソースを予約することを意味します(現在、送信元から宛先へのパケットの全過程において、ネットワーク層はすべての中間ルーターでも見つかります(しかししたがって、ネットワーク層のプロトコルが接続指向である場合、その責任はすべての中間ルーターにもリソースを予約することです。つまり、すべてのパケットは同じ中間パスをたどる必要がありますが、IPは接続が少ないため、中間リソースは予約する必要があります。つまり、パケットの経路は異なるパスをたどる場合があります。)

#CONCLUSION:==>中間パスはネットワークレイヤーによって決定されるため、IPの場合、パスは異なる場合があります(IPにはTCPが含まれる場合があります)、しかしTCPが責任を負いますパケットの中間パスに関係なく、両方のエンドプロセスでのリソース予約。

0
Ravish yadav