本当にポートとプロトコルは何ですか?


11

ポートとプロトコル(コンピューターネットワーキングに関連して)について話しているのを耳にします。彼らはしばしば類似点を提供します(例:「ポートは出荷ポートのようであり、出荷ポートが商品を送受信するようにデータを送受信します」他のポートから」など)。

私はこれが何を意味するのか理解していますが、非常に人工的なレベルでのみです。基本的に、私はポートが何であるかを知っており、プロトコルが何であるかを理解していますが、それらは本当に何ですか?

これらのポートは物理オブジェクトですか?それらは私のコンピューターの一部に組み込まれているのですか?ポートはいくつありますか?ポート数を増減できますか?彼らは何か物理的なものですか?またはコードで書かれていますか?このコードはどこにありますか?オペレーティングシステム?本当にポートとは何ですか?

プロトコルとは何ですか?なんらかのコードだと思います。独自のプロトコルを作成できますか?特定のプロトコルを実行する特定のポートをどのように取得しますか?プロトコルの作成に使用する言語は何ですか?新しいプロトコルをどのように定義または発明しますか?

回答:


9

Hello71の回答に加えて、パケット内のアドレスの構造について考えることにより、ポートを視覚化することが役立つ場合があります。パケットは、ネットワークを通過するデータの単位です。TCPは、ポートを使用するトランスポート層プロトコルの例であり、一般にIPを介して使用されます。

したがって、IPには2つのアドレス指定コンポーネント(送信元IPと宛先IP)があります。TCPは、送信元ポートと宛先ポートを使用してこれに追加します。これは、受信マシンが同じIPアドレス宛てのトラフィックを区別できるようにするポートです。つまり、単一のIPアドレスでWebリクエストとEメールの両方を受信するサーバーがある場合、データを受信するアプリケーションを決定する必要があります。 -メールサービスまたはウェブサービス。したがって、1人のユーザーが同じサーバーに対してWebリクエストと電子メールリクエストを実行すると、次のようになります。

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23434             192.168.1.1   80              web
10.1.1.10    34343             192.168.1.1   25              incoming email

Webサービスはポート80を所有し、Eメールサービスはポート25を所有します。これらはそれぞれのポートで「リッスン」するため、トラフィックは適切な場所に到達します。

送信元ポートは「エフェメラル」です。つまり、パケットの送信時に作成されます。ただし、それでも有用な目的があります。これにより、接続の両端で個別の会話を追跡できます。ユーザーが2つの同時Webリクエストを送信したかどうかを検討します。

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23232             192.168.1.1   80              web request 1
10.1.1.10    23234             192.168.1.1   80              web request 2

これにより、Webサービスはこれらが個別の要求であることを認識できますが、Webサーバー(Webページ)からの戻りトラフィックはそれぞれの送信元ポートに返送されるため、ブラウザーはサーバーがどの要求に応答しているかを知ることができます。

これはすべてポート番号を指していることに注意してください。TCP/ IPの観点から、これらのポート間で移動される実際のデータは何でもかまいません。これはアプリケーションを気にしないか、認識していません。そのため、ポート25にWebトラフィックがあり、ポート80に電子メールがある場合、それは賢明ではありません。

データが適切な構造であることを確認するのは送信側と受信側のアプリケーションであり、アプリケーションプロトコルの出番です。HTTPは、WebブラウザーがWebサーバーとの通信に使用するアプリケーションプロトコルの例です。これは明確に定義されたプロトコルであり、ブラウザーが任意のWebサーバーに要求を送信し、Webサーバーが適切に理解して応答するようにします。しかし、その定義に含まれていないのは、パケットがAからBにどのように到達するかということです。これは、前のレイヤー(トランスポート、インターネット、リンクレイヤー)の責任です。


ありがとうございました!これは私が探していた答えでした、助けてくれてありがとう!
ボブは

3

うーん。開始するのに最適な場所は、TCP / IPモデルとも呼ばれるIPスイートを見ることだと思います。(簡単にするために、OSIモデルの他のレイヤーは無視します。)

基本的に、それは一連のレイヤーです:

アプリケーション層-HTTP、FTP、POP、SSHなど。
トランスポート層-TCP、UDPなど。
インターネット層-IP、ICMPなど。
リンク層-イーサネットなど。

ポートは、ほとんどの場合、トランスポート層で実装されています(層4-はい、番号付けは正しいです)。

OSに実装されているTCPスタックやUDPスタックの大部分は、プログラムにポートを割り当て、ネットワーク経由でパケットが着信したときにこれらのプログラムでイベントを発生させるという基本的なシステムを使用しています。ただし、どの実装でも理論的には機能します。学界で熟考された仮説の代替スタックによってさえあるかもしれません。

TCPは合計65535のポートを持つと定義されており、任意のプログラムが任意のプログラムを使用して任意の処理を実行できます(ただし、多くのOSは1024未満のポートの使用を制限し、アドホックな特別なステータスを提供します)。限られたリストはいくつかありますが、だれがどのポートを取得し、どのポートがどのプログラムを実行するかを定義するための実際の標準はありません。したがって、ポートは多かれ少なかれ、プログラムのさまざまな実装が通信することに同意することを決定する乱数です。もちろん、そのようなプログラムの設計者は、他の人気のあるプログラムがすでに選択しているポートを避けようとします。

TCPを使用して実行する必要がないことは確かです。一部のプロトコルは、主に効率化の目的で、またはこれらのプロトコルがTCPまたはIPさえ存在する前に発明されたため、ベアインターネットレイヤーまたはベアリンクレイヤーで実行されます。もちろん、そうするときは、OSネットワーキングライブラリのシンプルさと広範なバグチェックをトレードオフします。

詳細については、OSIモデル、TCP、IPに関するWikipediaのページを確認してください。


私はそのすべてを理解しています。基本的に、ポートは物理的なものではありませんか?プログラムされたその何か?コンピューターで定義されているポートはどこですか?そして、プロトコルの場合、それらはどのように作成されますか?それらはプログラムされていますか?
ボブは、

いいえ、ポートはこのコンテキストでは物理的なものではありません(明らかにUSBポートは物理的ですが、このトピックとは関係ありません)。プロトコルはRFC(en.wikipedia.org/wiki/Request_for_Comments)を通じて定義され、コードで実装されます-プログラムされています。
ポール

TCPは、IPから着信するデータを格納する(またはIPによって取得されるデータを格納する)ためのメモリを予約するシステムプロセスであり、このメモリは「ポート」に分割されていると言って間違いないでしょうか。また、HTTPなどの他のアプリケーション(プロセス)は、特定のポート(80と443)を予約することをTCPに通知できます。次に、TCPの仕事になります。1。HTTPがこれらのメモリアドレスにデータ送信データを追加できるようにし、2。受信データがこれらのメモリアドレスに追加されたときにHTTPに通知しますか?
ザック・スミス

多分ボブはプロトコルポートと物理スイッチポートの間で混乱していました。プロトコルポートの部分はいくつかの回答がありましたが、ソースはありませんでした。物理ポートと同様に、これらはネットワークデータ転送を可能にするケーブル接続が接続される入力入出力場所です。これには、電子回路、光ファイバー受信機、レーザー、バッファーが含まれます。L.ピーターソン第4版。
nassim

3

この質問にはすでに回答済みのマークが付けられていますが、OPで尋ねられる追加の質問のいくつかに対処したいと思いました。

これらのポートは物理オブジェクトですか?

どのポートも物理オブジェクトではありません。

ポート番号は16ビットの符号なし整数です。つまり、使用可能なポートの範囲は1〜65535です(ポート番号0は予約されており、使用できません)。プロセスは、ファイル記述子の一種であるインターネットソケットを介して入力または出力チャネルを、トランスポートプロトコル、ポート番号、およびIPアドレスに関連付けます。このプロセスはバインディングと呼ばれ、ネットワークを介したデータの送受信を可能にします。

それらは私のコンピューターの一部に組み込まれているのですか?彼らは何か物理的なものですか?またはコードで書かれていますか?このコードはどこにありますか?オペレーティングシステム?本当にポートとは何ですか?

オペレーティングシステムのネットワーキングソフトウェアは、すべてのアプリケーションポートからネットワークに送信データを送信し、パケットのIPアドレスとポート番号を照合することにより、到着したネットワークパケットをプロセスに転送するタスクを実行します。

同じトランスポートプロトコルを使用して、特定のIPアドレスとポートの組み合わせにバインドできるプロセスは1つだけです。複数のプログラムが同じプロトコルを使用して同じIPアドレスの同じポート番号にバインドしようとすると、ポートの競合と呼ばれることもある一般的なアプリケーションエラーが発生します。

上記の段落は、ネットワークでポート/プロトコルが使用される理由を理解するための鍵です。合意された武器ポート番号を介してデータを送信するプロトコルを指定する方法がなかった場合-コンピューターが持っているため、一度に複数のことを行うことはできません(電子メールを確認してWebを使用してください)。電子メールクライアントのデータと閲覧しているWebサイトのデータを区別する方法はありません。

ポートはいくつありますか?

ポート番号は、3つの範囲に基づいて、さまざまな方法で割り当てられます。

  1. Well Known / System Ports(0-1023)-この範囲のポートは、広く使用されているタイプのネットワークサービス(HTTP / 80、HTTPS / 443、Telnet / 21、SSH / 22)を提供するシステムプロセスによって使用されます。

  2. 登録済み/ユーザーポート(1024〜49151)-1024〜49151のポート番号の範囲が登録済みポートです。それらは、要求側エンティティによるアプリケーションの特定のサービスにIANAによって割り当てられます。(Webmin / 10000、HTTP Proxy / 8080、Remote Desktop Protocol / 3389など)

  3. エフェメラル/ダイナミック/プライベートポート(49152〜65535)-49152〜65535の範囲には、IANAに登録できないダイナミックポートまたはプライベートポートが含まれます。この範囲は、カスタムまたは一時的な目的、および一時ポートの自動割り当てに使用されます。

ポート数を増減できますか?

使用可能なポートの数を増やすことができるという点では、ネットワークが機能することを許可する計算(バイナリ)のため、65535を超えるポートを割り当てることはできません。 65535以上のポート。

プロトコルとは何ですか?

コンピュータサイエンスでは、通信プロトコルはコンピュータ内またはコンピュータ間でメッセージを交換するためのデジタルルールのシステムです。コンピュータネットワークを介してメッセージが交換される場合、ルールシステムはネットワークプロトコルと呼ばれます。プロトコルは、基本的には、ネットワーク化された2つのデバイスが通信できる、合意された一連の命令/コマンド/呼び出しです。プロトコルに同意しなかった場合や、WebサーバーがWebブラウザにデータをランダムに送信しただけで、ブラウザが何をすべきかわからなかったとしたらどうでしょうか。幸い、HTTPがあり、作成されたすべてのWebブラウザーがソフトウェアに組み込んでいるため、同じ言語(HTTP)を話すWebサーバーと通信できます。

なんらかのコードだと思います。独自のプロトコルを作成できますか?プロトコルの作成に使用する言語は何ですか?

はい、独自のプロトコルを作成できます。プロトコルはさまざまな言語で書かれています。私はソフトウェア開発者ではありませんが、使用している言語に、TCP / IPを介して通信できるソフトウェアを作成できるライブラリがある限り、他のプロトコルスイートもありますが、TCP / IPが最も適しています。広く使用されています)その言語を使用してプロトコルを記述できます。プログラミング言語「C」は、プロトコルの記述に最も一般的に使用されているようです。これは、最初のネットワークプロトコルの多くが1970年代にUNIX上で開発され、CがたまたまUNIX自体が記述されている言語であるためです。

特定のプロトコルを実行する特定のポートをどのように取得しますか?

これはOSによってかなり異なります。たとえば、Windowsで実行されているリモートデスクトッププロトコルのポート番号を変更するには、レジストリを編集する必要があります。Linuxでは、ネットワークサービスの多くは、特定のネットワークサービスの.confファイルから直接構成できます。

新しいプロトコルをどのように定義または発明しますか?

最近新しいネットワークプロトコルを開発した人によるブログ投稿と彼がしなければならないことについては、https://journal.paul.querna.org/articles/2012/02/22/designing-network-protocols/を参照してください途中で。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.