Python ソケット プログラミング (53)

こんにちは、子供たち、こんにちは大きな友達!

Pythonプログラミングにハマった小学生の猫娘です。

猫娘と一緒にPythonを学び、一緒にプログラミングを学びましょう。

今日のテーマ

現在は、ネットワーク プログラミングの入門知識を中心に、多くのコンテンツが提供されています。

この知識はインターネットの発展において非常に重要です。

OSI 7層モデルとTCP/IP 4層モデル

IPアドレスとポート

TCP/UDP

ソケット

Python は TCP サーバー クライアントを実装します

Python は UDP サーバー クライアントを実装します

OSI 7層モデルとTCP/IP 4層モデル

OSI 7 層モデルと TCP/IP 4 層モデルはインターネット通信の基礎であり、私たちが快適にインターネットサーフィンできるのは最下位層にあります。

彼らは底で黙々と働いており、私たちにはその存在を感じさせないようです。実際、基礎となる層の設計と実装には、多くの人類の知恵が結集されています。

OSI 7 層モデルと TCP/IP 4 層モデルはどちらも、ネットワーク通信で一般的に使用される層状アーキテクチャです。

OSI 7 層モデルはより詳細で、より多くの機能と詳細をカバーしていますが、TCP/IP 4 層モデルはより簡潔で、理解と適用が容易です。

それぞれについて簡単に説明します。

OSI 7 層モデル:

OSI (Open Systems Interconnection) は、ネットワーク通信プロトコル スタックを定義する国際標準です。ネットワーク通信を 7 つの層に分割し、それぞれに特定の機能とタスクを割り当てます。最下層から最上層へは、物理層、データリンク層、ネットワーク層、トランスポート層、セッション層、プレゼンテーション層、アプリケーション層となります。

  * 物理層: 物理メディア上のビット ストリームの送信を担当し、主にハードウェア インターフェイスと信号送信に関与します。

  * データリンク層: 隣接するノード間で信頼性の高いデータ伝送パスを確立し、データのグループ化とエラー検出を実現します。

  * ネットワーク層: エンドツーエンド接続を実現するために、送信元ノードから宛先ノードにデータ パケットを送信する役割を果たします。

  * トランスポート層: データ送信中のフロー制御、エラー回復、データ再編成の制御と管理を担当します。

  * セッション層: アプリケーション間のセッションの確立、管理、終了を担当します。

  ※プレゼンテーション層:データ形式の変換、暗号化・復号化などを担当します。

  * アプリケーション層: 電子メール、ファイル転送、リモート ログインなどのさまざまなネットワーク アプリケーション サービスをユーザーに提供する役割を担います。

TCP/IP 4 層モデル:

TCP/IP (伝送制御プロトコル/インターネット プロトコル) は、インターネットで広く使用されている階層型アーキテクチャです。ネットワーク通信を 4 つの層に分割し、それぞれに特定の機能とタスクを割り当てます。最下層から最上層へは、ネットワーク インターフェイス層、インターネット層、トランスポート層、アプリケーション層となります。

  * ネットワーク インターフェイス層: データ パケットの物理媒体 (イーサネット、Wi-Fi など)、およびアドレスやルーティングなどの問題を処理する責任があります。

  * インターネット層: 異なるネットワーク間の論理接続を確立し、エンドツーエンドのデータ伝送を実現します。

  * トランスポート層: データ送信中のフロー制御、エラー回復、データ再編成の制御と管理を担当します。

  * アプリケーション層: 電子メール、ファイル転送、リモート ログインなどのさまざまなネットワーク アプリケーション サービスをユーザーに提供する役割を担います。

IPアドレスとポート

インターネットをサーフィンしたい場合、2 つのことが切り離すことはできません。1 つは IP アドレス、もう 1 つはポートです。

IP アドレスとポートはネットワーク通信における 2 つの重要な概念であり、インターネット上のデバイスまたはアプリケーション サービスを一意に識別するために一緒に使用されます。

IP アドレスはパケット ヘッダー内の送信元デバイスのアドレスを示すために使用され、ポート番号はネットワーク上のアプリケーション サービスを一意に識別するために使用されます。

IP アドレスは、インターネットに接続されているコンピュータを一意に識別します。

IP (インターネット プロトコル) アドレスは、インターネット上のデバイスを一意に識別するために使用される 32 ビットの 2 進数です。

IP アドレスは、IPv4 と IPv6 の 2 つの形式に分類されます。

IPv4 アドレスは通常、ドット付き 10 進表記 (192.0.2.1 など) ですが、IPv6 アドレスはコロンで区切られた 128 ビットの 16 進数 (2001:0db8:85a3:0000:0000:8a2e:0370:7334 など) です。

IP アドレスは、受信側がデータ パケットをターゲット デバイスに正しく送信できるように、データ パケット ヘッダー内のソース デバイスのアドレスを示すために使用されます。

IP アドレスを持つだけでは十分ではなく、コンピュータには多くのアプリケーションがあり、アプリケーションを区別するためにポートが使用されます。

ポートは、ネットワーク通信におけるデバイス間の通信のための論理インターフェイスです。

値は 0 ~ 65535 で、0 ~ 1023 はシステムによって占有され、その他のポートはアプリケーション プログラムによってランダムに割り当てられます。

各アプリケーションは、独自の通信サービスを識別するために一意のポート番号を使用します。

一般的なポート番号は、80 (HTTP)、21 (FTP)、25 (SMTP)、3306 (MySQL) などです。

TCPとUDP

TCP と UDP は、TCP/IP 4 層モデルのトランスポート層に位置します。

TCP (伝送制御プロトコル) の機能:

高い信頼性: TCP は接続指向のプロトコルであり、信頼性の高い接続を確立することでデータ送信の信頼性を保証します。転送中にパケットが失われたり破損したりすると、TCP はデータが完全に受信されるまで再送信します。

フロー制御: TCP は、スライディング ウィンドウ メカニズムを使用してデータの送信速度を制御し、ネットワークの輻輳を回避します。送信側は受信側のバッファリング状況に応じて送信レートを動的に調整します。

秩序ある: TCP はデータ パケットの順序と整合性を保証し、受信側が正しい順序でデータを受信できるようにします。

適用可能なシナリオ: TCP は、ファイル転送、電子メールなど、信頼性の高いデータ送信を必要とするアプリケーション シナリオに適しています。

UDP の機能:

高い信頼性: UDP はコネクションレス型プロトコルであるため、データ送信の信頼性は保証されません。送信中にデータ パケットが失われたり破損したりした場合、UDP はそれを再送信せず、直接破棄します。

高速性: UDP には複雑な制御プロセスがないため、伝送速度が速く、遅延が低くなります。

障害: UDP はデータ パケットの順序と完全性を保証しないため、受信機は順序が崩れたデータ パケットを受信する可能性があります。

適用可能なシナリオ: UDP は、ビデオ ストリーミング、オンライン ゲームなど、高いリアルタイム パフォーマンスが必要で、信頼性の高いデータ送信を必要としないアプリケーション シナリオに適しています。

TCP は電話をかけるようなもので、通話するには相手がオンラインである必要があります。

UDP は手紙を書くようなもので、ただ書いて直接送信するだけです。

メリット・デメリットはなく、それぞれにメリットがあります。

ソケット

TCP/UDP は、アプリケーション開発を容易にするために非常に複雑です。

アプリケーション層と TCP/UDP の間にはソケットと呼ばれる層があります。

ソケット(socket)とは、コンピュータネットワークプログラミングにおける通信機構の一つで、異なるコンピュータ間でのデータ伝送を実現するために使用されます。

簡単に言うと、ソケットはネットワーク接続を確立するための抽象インターフェイスであり、これによりプログラマーはネットワーク プロトコルを通じてデータを送信できます。

ネットワーク プログラミングでは、ソケットは通常、クライアントとサーバーの 2 つの部分で構成されます。

クライアントはデータをサーバーに送信し、サーバーはデータを受信して​​処理します。

ソケット通信は、TCP (伝送制御プロトコル) または UDP (ユーザー データグラム プロトコル) という 2 つの異なるプロトコルに基づくことができます。

Socket を使用したネットワーク プログラミングには次の手順が必要です。

  1. Socket オブジェクトを作成します。まず、Socket オブジェクトを作成し、使用するプロトコル タイプを指定する必要があります。

  2. ソケットのバインド: クライアントがサーバーを見つけられるように、特定の IP アドレスとポート番号を使用してソケットをバインドします。

  3. ソケットの接続: クライアントがサーバーと通信したい場合は、接続を確立する必要があります。これは、Socket オブジェクトの connect() メソッドを呼び出すことで実現できます。

  4. データの送受信: 接続が正常に確立されたら、Socket オブジェクトの send() メソッドと recv() メソッドを使用してデータを送受信できます。

  5. ソケットを閉じる: 通信が完了したら、リソースを解放するためにソケット オブジェクトを閉じる必要があります。

つまり、ソケットはネットワーク プログラミングにおいて非常に重要な概念であり、プログラマが異なるコンピュータ間のデータ送信を簡単に実現できるようにする、汎用のクロスプラットフォーム通信メカニズムを提供します。

Python は TCP サーバー クライアントを実装します

TCP クライアント サーバー対話フローチャート:

ソケットキー機能の紹介:

関数 説明
ソケット() ソケットクラスオブジェクトを取得する
バインド((ホスト名, ポート)) 指定したホストのポートにバインドしてリッスンします
聞く() バインドされたポートの監視を有効にします。パラメータは、確立を待機している接続の最大数を示します。
受け入れる() クライアントが接続するのを待ち、接続後にクライアント アドレスを返します。
データを送る) データを送信します。データはバイナリデータです
受信(バッファ) 受信したデータを示します。バッファサイズは各受信データの長さです
近い() ソケット接続を閉じる
connect((ホスト名, ポート)) 接続するホスト名とポート番号を設定します。

TCP プロトコル クライアント サーバー コード テスト:

注: サーバーは接続の監視を続行できますが、クライアントはオフラインになり、サーバーは自動的に切断されます。クライアントは再びオンラインになり、サーバーは接続を確立します。

Python は UDP サーバー クライアントを実装します

UDP クライアント サーバー対話フローチャート:

クライアントプロセス:

  1. インポートパッケージソケット

  2. ソケットを作成する

  3. メッセージの送受信(優先送信)

  4. ソケットを閉じる

サーバープロセス:

  1. インポートパッケージソケット

  2. ソケットを作成する

  3. バインディング情報

  4. メッセージの送受信(優先受信)

  5. ソケットを閉じる

UDP プロトコル クライアント サーバー コード テスト:

コードが必要な方は、下の画像の最初のプラットフォームの次のツイートから入手して、猫娘とPythonを学ぼう!

プラットフォームが多すぎて、コードのレイアウトに時間がかかりすぎます。

さて、今日はこれを学びましょう!

何か問題があれば、コミュニケーションをとって一緒に解決しましょう。

猫娘です、また今度!

おすすめ

転載: blog.csdn.net/parasoft/article/details/131028516