TCP/IPの基本を学習しています。私はサーバが1024番のポートを開き、クライアントがそれにメッセージを送ることができるサーバ - クライアントチャットアプリケーションを作った。私は、サーバーとクライアントによって交換されるTCP/IPパケットの内容について少し混乱しています。クライアントがサーバにメッセージを送ると、イーサネット経由でパケットとして送られます。クライアントからのイーサネットフレームでは、データフィールドはTCP/IP形式でエンコードされます。 TCP/IPフレームでは、宛先ポートは1024になりますが、送信元ポートの値はどのようになりますか?クライアントはポートをオープンしていません。サーバーのみがポートを開きます。また、PCで送受信されたこれらのTCP/IPパケットを監視する方法があるかどうかを知りたいと思います。TCP/IPパケットのポート番号
答えて
multiple layers involve hereがあることを忘れないでください。 TCP、IP、イーサネットは、頻繁に併用されても、異なるものになります。分離は覚えておくことが重要です。イーサネット(レイヤ2)は、個々のコンピュータを接続するプロトコルですが、どのIPアドレスを持っているかは気にしません。 IPは、コンピュータをはるかに大規模に接続します。これは、イーサネットだけではなく、さまざまな「レイヤー2」ネットワークテクノロジにルーティングして送信することができます。
IETFインターネットプロトコルの素晴らしい点は、すべてthoroughly documentedだから、内部的にどのように動作するかを知ることができるということです。 IPの上で動作するTCPの場合、ポート番号はTCP層にあります。 IP自体は気にしませんが、送信元と宛先のアドレスのみに関心があります。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
移入されなければならない両方のソースと宛先ポート:
キーは右ここでTCPヘッダを説明する図です。これは、システムのIPスタックがどのパケットがどの接続に関係しているかを追跡する重要な要素です。
通常、サーバーに接続するコードを書くとき、接続は(やや)ランダムな送信元ポートから発生します。ポートでリッスンするサーバープロセスを作成すると、そのポートを自動的に割り当てるか、または特別に設定できます。
HTTPのようなサービスでは、他のクライアントがそのサービスに接続するようにするには、そのポートを80に固定する必要があるため、自動割り当ては役に立ちません。場合によっては自動割り当てが望ましいので、競合はありません。
tcpdump
やWiresharkのようなツールですべてを監視できます。彼らはさまざまな層を掘り下げ、何が起こっているかを示すことができます。
を監視するための適切なツールです。 VBでTCPサーバーとクライアントアプリケーションを作成し、クライアントとサーバーの間でデータを送受信しました。サーバーは私のラップトップの自宅のWiFiネットワークでポート1234を使用しています。しかしWiresharkは、そのポートのクライアントとサーバーの間で交換するフレームを表示していません。私はコマンドプロンプトをチェックし、ポート1234はそこでアクティブに表示されます。理由は何でしょうか? –
正しいインターフェイスで「リッスン」していることを確認してください。 WiFiを使用しているときにイーサネットポートで誤って聴くのは簡単です(逆も同様です)。それらは2つの異なるハードウェアインタフェースであり、 "ループバック"またはローカルホストインタフェースは、しばしば3番目のインタフェースです。 – tadman
両方ともlocalhost 127.0.0.1にあります。それは私のwifiとは関係がありません? –
ポート番号は、server/clientで実行中のプロセスを識別するために使用される論理エンティティ/番号です。サーバーアプリケーションにポート番号(決定したもの)があるように、クライアントアプリケーションには、OSによって割り当てられたポート番号も関連付けられます。コマンドプロンプトでnetstat -abと入力すると、クライアントアプリケーションに関連付けられているポート番号が、プロセスのリストおよびコマンドで指定された対応するポート番号に表示されます。
- 1. ポート番号
- 2. ノード-REDポート番号
- 3. JavaScriptのdocument.domainを、ポート番号
- 4. ポート番号の概念?
- 5. デフォルトのポート番号をTomcatのポート番号8080に変更する方法は?
- 6. GoogleOAuthリダイレクトURL、LocalServerReceiverポート番号
- 7. IPアドレスとポート番号C#
- 8. ASP.NETコア認証ポート番号
- 9. rspecテストでのRailsアプリケーションのポート番号
- 10. phpのfsockopen()findoutユーザーのポート番号
- 11. Windows.Devices.Enumeration.DeviceInformationからのCOMポート番号
- 12. Linphoneは(パイソン)の変更ポート番号
- 13. Node.jsポートと番号の制限
- 14. ウェブサイトのポート番号を取得する
- 15. HTTPURLConnectionポート番号の割り当て
- 16. Url.Actionポート番号を含まない
- 17. Emacs sql-mysqlでポート番号を指定
- 18. 完全修飾ドメイン名とポート番号
- 19. Javaでポート番号を予約する
- 20. URLはhttpsでポート番号は8443
- 21. スプリングブートアプリケーションで使用されるポート番号
- 22. ポート番号を変更するには
- 23. WSO2 APIマネージャーhttpsエンドポイントをポート番号
- 24. のpythonを使用して、リストとして、パケットのポート番号を取得する - Scapyスクリプト
- 25. .NET Framework - ポート番号を指定せずにUDPポートを開く?
- 26. MODBUS TCPパケットを受信するポート番号はどのように機能しますか?
- 27. パケットを送信する前にTCPシーケンス番号を読む
- 28. IPカメラの番号ポートの検索方法は?
- 29. URLのプロトコルとポート番号の関係または対応
- 30. Visual Studio 2015のFlaskプロジェクト:ポート番号の指定方法は?
「クライアントがポートを開こうとしていません」というわけではありません。オペレーティングシステムはクライアントプロセスをその時点で使用可能なポートにバインドします。つまり、クライアント側の特定のポートとオペレーティングシステムその時点で使用可能なポートにクライアントプロセスをバインドします。 – tkhurana96
サーバーはクライアントに通常応答できる必要があります。つまり、クライアントがランダムポートを選択し、サーバーに応答を送信できることを伝えます。 Wiresharkは、https://www.wireshark.org/ –