こんにちは、子供たち、こんにちは大きな友達!
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 クライアント サーバー対話フローチャート:
クライアントプロセス:
-
インポートパッケージソケット
-
ソケットを作成する
-
メッセージの送受信(優先送信)
-
ソケットを閉じる
サーバープロセス:
-
インポートパッケージソケット
-
ソケットを作成する
-
バインディング情報
-
メッセージの送受信(優先受信)
-
ソケットを閉じる
UDP プロトコル クライアント サーバー コード テスト:
コードが必要な方は、下の画像の最初のプラットフォームの次のツイートから入手して、猫娘とPythonを学ぼう!
プラットフォームが多すぎて、コードのレイアウトに時間がかかりすぎます。
さて、今日はこれを学びましょう!
何か問題があれば、コミュニケーションをとって一緒に解決しましょう。
猫娘です、また今度!