どのように、UDPとTCPは働きますか?


それは、我々がより深く行くようですOSI 分類は、以下の1つは、このトピックに対処します.ネットワーク上で通信するアプリケーションを開発しているなら、実際にどのように実際に動作するかを理解するのはいいでしょう.今日のコンピュータの仕組みと、ソケット、ポート、およびプロセスが果たす役割について見てみましょう.
一例として、オペレーティングシステム(OS)を持つ通常のコンピュータを取り上げましょう.OSでは,ネットワーク通信の面倒を見る「ネットワークスタック」と呼ばれる部分がある.その中にポート番号の配列があります0 to 65535 , どこ0-1023 が既知である1024-65535 はランダムポートとして扱われる.OSでは、プロセスが処理される部分(私はステージと呼びます)、すなわちソフトウェアやアプリケーションがあります.プロセスがネットワークスタックの上で通信するとき、プロセスはサービスと呼ばれます.このように、我々が通信するとき、我々はそれがどのようなプロセスであるか正確に定義します.
プロセス間のコミュニケーションがどのように働くかを見てみましょう.下の図には2つのプロセスがあり、そのうちの1つはサーバーともう一方のクライアントです.可能な限り理解できるようにするために、両方のプロセス(サービス)が同じコンピュータ上で動作します.
┌──────────────────────────────────────────────────┐────────────┐
│    ┌────────────┐                                │            │
│    │    ...     │                                │            │
│    ├────────────┤   ┌──────────────────────────┐ │ ┌────────┐ │
│ ┌─▶│ PORT=8080  │◀─▶│  SOCK=10.0.1.10:8080:TCP │◀┼▶│ SERVER │ │
│ │  ├────────────┤   └──────────────────────────┘ │ └────────┘ │
│ │  │    ...     │                                │            │
│ │  ├────────────┤   ┌──────────────────────────┐ │ ┌────────┐ │
│ └─▶│ PORT=50000 │◀─▶│ SOCK=10.0.0.10:50000:TCP │◀┼▶│ CLIENT │ │
│    ├────────────┤   └──────────────────────────┘ │ └────────┘ │
│    │    ...     │                                │            │
│    └────────────┘                                │            │
├──────────────────────────────────────────────────├────────────┤
│                   Network Stack                  │    Stage   │
└──────────────────────────────────────────────────└────────────┘
│                        Operating System                       │
└───────────────────────────────────────────────────────────────┘
別のローカルプロセスまたは別のコンピュータ上のプロセスでネットワーク上で通信するプロセスについては、まずソケットを作成するようにOSに要求しなければなりません.ソケットは、プロセスとOSのネットワークスタックとの間の通信インターフェースを表します.に関する情報が含まれますIP , port コミュニケーションprotocol (例えばTCPやUDP ).
したがって、OSはソケットを作成し、プロセスはネットワークスタックへのハンドルを取得します.プロセスが実際に他のサービスと通信するために、それはオペレーティングシステムに「バインド」要求を送らなければなりません.これは、メッセージがこのポートの上に送られるということを意味します、そして、このサービスと通信する他のサービスからの着信メッセージも同じポートの上に送られます.
このコンセプトは、サーバーとクライアントの両方に適用されます.これはアプリケーション開発者が混乱している部分ですTCP , これらのすべてのものを隠してくださいbind は関数と同義であるlisten と排他的にサーバーのリスニングと着信接続を待っている.したがって、クライアントはまた、サーバーと通信するためにポートにバインドされたソケットを必要とします.サーバーサービスは、通常、それが通信したい既知のポートを定義します.クライアントは、クライアントが自動的にこの手順を実行する必要がないように、クライアントが自動的に初めてのメッセージを送信するときに、利用可能なランダムポートの1つにクライアントを自動的にバインドするのに十分なインテリジェントなオペレーティングシステムの機能を使用できます.
サーバーとクライアントがネットワークスタックに接続されているので、サーバーからクライアントへのパスが既知であるため、両方ともメッセージを送信できます.このようなユニークな通信経路も5タプルと呼ばれる.
┌─────────────┬─────────────┬─────────────┬─────────────┬─────────────┐
│ Local IP    │ Remote IP   │ Local Port  │ Remote Port │ Protocol    │
│ 10.0.0.10   │ 10.0.0.10   │ 8080        │ 50000       │ TCP         │
└─────────────┴─────────────┴─────────────┴─────────────┴─────────────┘
The TCP and UDP 送信者と受信機に関するプロトコルデータは各メッセージのヘッダーの先頭に追加されます.TCPとUDPは両方ともOSI層4トランスポートプロトコルに属します.それらは似ていて、同時に非常に異なっています.
TCPは今日、大部分のオンライン通信を駆動する堅牢で証明されたプロトコルです.それは信頼性があります、そして、我々は送られるパケットが常に彼らの目的地に到着すると信じていることができます.一方、UDPは非常に軽量で、TCPより速いです、しかし、信頼できなくて、送られたパケットは通知されている送付者なしで失われることができます.TCPは接続指向であり、プロトコルがメッセージを送ることができる前に2つの終点の間のステートフル接続を確立することを意味します.UDPはコネクションレスで、単にメッセージを送信し始め、詳細には興味がありません.
TCPは順序付けられたデータ伝送であり、したがって、他の端で送られたパケットが処理されなければならない順序を決定します.UDPで、パケットは間違った順序で送られることができます.TCPは「エラー回復」と「フロー制御」のような他の多くの特徴を持っていて、したがって、HTTPコミュニケーションに人気があります.一方、UDPは、主にビデオ・ストリーミングまたはパケットが失われる場合、それが重要でない場合のために使われる.
TCPを使用する主な引数は、指定された場所にパケットを配送することを信頼できるということです.しかし、UDPはまた、いくつかの追加のプログラミングと同様のプロパティを与えることができます.この例はQUIC , プロトコルは今後のHTTP/3と連携します.