シンプルで楽しく、わかりやすい!PythonUDPネットワークプログラミング

1. UDPとは何ですか?

UDPユーザーデータグラムプロトコルの略で、中国語はユーザーデータグラムプロトコルです。これは、あるコネクションレストランスポート層プロトコル、インターネットプロトコルセットで提供する、シンプルで信頼性のないトランザクション指向の伝送サービスを。簡単に言うと、UDPはトランスポート層のトランスポートプロトコルです。送信中にターゲットホストとの接続を確立する必要はありません相手のIPとポート番号を知っていれば、直接送信できますUDPと手紙書くことを比較することができます:手紙を送るたびに郵送先住所と郵送番号を書く必要があります。それを送る前に相手に電話することなく直接送ることができます。
UDPの定義については一般的に理解しているので、「文字書き込みモード」の特徴を見てみましょう。

第二に、UDPの特徴

1.信頼性の欠如:

UDPは配信に最善を尽くしますが、配信を保証するものではありませんつまり、UDPプロトコルを介して送信されるデータの整合性到達可能性は保証されません到着したかどうかホストに通知されませんしたがって、ホストとターゲットホスト間の複雑な接続関係を維持する必要はありません。素人の言葉で言えば、それは古代のようです。別の場所でガールフレンドと本を共有する必要があります。何が問題なのか、封筒を伝えることができます(ベイ卿に遭遇した場合はケーキ...)

UDPは信頼できないので、UDPが存在する必要ありませんか?答えはノーです。UDPは、UDPは、送信処理中にシステムのオーバーヘッドの多くを持っていますので、TCPのようなセキュリティ機能が多数同梱されていない大幅に実行時間を短縮することにより、伝送効率を向上させること。それは覚えておくことは難しいのTCPこの効率は、 。UDP伝送速度の利点により、UDP一部のリアルタイムアプリケーションにとって非常に重要です。

 2.接続なし:

UDPはコネクションレス型です。つまり、通信の前に接続を確立する必要なく、ターゲットホストのトランスポート層はそれを受信し後に確認を行いません前の例えに従って、鳩を飛ばすときにガールフレンドに通知する必要はありません(通知する方法はないようです...)。鳩が封筒を配達しても、彼女はすぐに通知することはできません。それを受け取りました。」

3.メッセージ指向:

ネットワーク層を通過してIPパケットに渡されるアプリケーション層のパケットは変更されず、次のステップのためにヘッダー直接追加/削除します。メッセージが長すぎると、IP層で断片化さます。メッセージが短すぎると、IP層のデータグラムのヘッダーが非常に長くなります。ここではFeiGe Chuan Shuを使用しなくなり、Fei Ge Chuan Shuのアップグレードバージョンを使用します-手紙を書く(emmm ...パススルー):手紙を書くときは、手紙(データフィールド)を封筒に入れます(前編)内容が多すぎる場合は数枚のレターペーパーを使用し、内容が少なすぎる場合は封筒の単語数ほど多くない場合があります。そして、あなたのガールフレンドが手紙を受け取ったら、封筒を開けるだけで、あなたはあなたの「小さなラブレター」を読むことができます。

4.輻輳メカニズムなし:

ネットワークの輻輳、送信元ホストの伝送速度は低下しません。これは、一部のリアルタイムアプリケーションにとって非常に重要です。IP電話、リアルタイムビデオなど。同時に、ネットワークが混雑しているときに許可されると、一部のデータ失われますがデータの遅延は許可されません

UDPには輻輳メカニズムがないため、送信元ホストが多すぎると、同時に高速のリアルタイムデータをネットワークに送信すると、輻輳が発生してデータが失われる可能性があります。一部のリアルタイムアプリケーションでは、この信頼性の低い送信を適切に改善でき、前方誤り訂正失われたパケットの再送信など、いくつかの保護および修復手段を追加できます

5.クライアントとサーバーの明確な感覚がありません

あなたは手紙を書くことも受け取ることもできます、2つの間に大きな違いはありません(愛はもともと相互です...)。

6. 1対1、1対多、多対1、多対多のインタラクティブなコミュニケーションをサポートする

  • ユニキャスト:ユニキャストは1対1の通信モードです。送信者は相手のIPとポートを指定する必要があり、対応するマシンのみが送信されたデータを受信でき、サブネット内の他のマシンに影響を与えることはありません。
  • マルチキャスト:マルチキャストは1対多の通信モードです。1台のマシンがサブネット内のすべてのマシンの一部と通信します。これらのマシンはすべて、ホストから送信されたデータを受信できますが、サブネット内の指定されていないマシンは影響を受けません。
  • ブロードキャスト:マルチキャスト内のマシンの数がサブネット内のすべてのマシンの数である場合、この時点での「マルチキャスト」は、マルチキャストではなくブロードキャストと呼ばれます。ブロードキャストはサブネットでのみ実行でき、ワイドエリアネットワークでは実行できないことがIPプロトコルで規定されています。
  • マルチキャスト:同様に、マルチキャストも1対多の通信モードです。マシンがマルチキャストIPに参加し、マルチキャストIPにデータを送信すると、マルチキャスト内のすべてのマシンがデータを受信できるようになります。

 

7.ヘッダーのオーバーヘッドは小さく、わずか8バイトです。

UDPは2つの部分構成され、1つはヘッダーフィールド、もう1つはデータフィールドです。
ヘッダーフィールドは8バイトのみで4つのフィールドに分割されています

  • 送信元ポート:送信元ポート番号。相手に返信する必要がある場合に選択し、不要な場合はすべて0を使用します。
  • 宛先ポート:宛先ポート番号。配達の終わりに使用されます。
  • 長さ:udpユーザーデータグラムの長さ。最小値は8です(ヘッダーのみ)。
  • チェックサム:udpユーザーデータグラムの送信にエラーがないかチェックし、エラーがある場合は破棄します。

3、ソケット通信

実際、ソケットを作成する方法は、ファイルを読み書きする方法と似ていますが、ファイルを読み書きする方法をまだ覚えていますか?一緒に思い出しましょう:

f  = open()   # 打开文件
f.read()/f.write()    #  对文件进行操作
f.close()   # 关闭文件   

ソケットをもう一度作成する方法を見てみましょう。

1.ソケットモジュールをインポートします

import socket

2.ソケットオブジェクト(ソケット)を作成します

t = socket.socket(socket.AF_INET,sockeet.SOCK_DGRAM)

ソケットを作成する場合、ソケットには2つのパラメーターsocket(AddressFamily、Type)が必要です。

AdressFamilyAF_INET(インターネットプロセス間の通信用)またはAF_UNIX(同じマシン上のプロセス間の通信用)を選択できます。実際には、AF_INETが一般的に使用されます。
タイプSOCK_STREAM(ストリームソケット、主にTCPプロトコルに使用)またはSOCK_DGRAM(データグラムソケット、主にUDPプロトコルを使用)。

3.ローカル情報をバインドします(バインド)

t.bind(("",5678))   #参数为一个含有两位元素的元组,第一个元素为本机ip,默认自动分配;第二个元素为端口号。

4.ソケットを使用してデータを送受信します(recvfrom / sendto)

# 1.发送数据
data = ""   # 需要发送的数据
t.sendto(data.encode("转码"),("ip",port))   # 两个参数:参数1为传输数据,参数2为元组("目标ip",目标端口)

# 2.接收数据
recv _data, dest_ip_and_port = t.recvfrom(1024)   # 返回数据:数据内容,对方的(ip和端口号)

ソケットを閉じる(閉じる)

t.close()  

私に従って、Pythonを楽しんでください!

 

おすすめ

転載: blog.csdn.net/qq_45807032/article/details/105139292