IOT:通信プロトコル 色々

どーも こんちには ”Keita_Nakamori”(*’▽’)です。

コンピューターネットワークの通信規格、いわゆる通信プロトコルの種類についてざっくりまとめましょう。

表にしてみました

階層 名称 役割 通信プロトコル
第7層 アプリケーション層 アプリケーションへのアクセス HTTP, FTP ,SMTP,POP,IMAP
第6層 プレゼンテーション層 ファイル形式への対応
第5層 セッション層 接続開始と終了
第4層 トランスポート層 データの信頼性を確立 TCP , UDP
第3層 ネットワーク層 ネットワーク経路の決定 IP
第2層 データリンク層 フレーム,ビット列の変換 ARP
第1層 インターフェース層 ビット列,物理信号の変換 Ethernet,光ケーブル, 接続コネクタ

 

 

 

 

 

 

よく見るやつは高階層(アプリケーション層)

HTTP

-Hyper Text Transfer Protocol

Webブラウザで使われています。HTTPリクエストを処理します。

FTP

-File Transfer Protocol

自分のPCから遠くの場所にあるPCにファイルを送り込む仕組みです。

ホームページを持っていてサーバーとやり取りが多い人は使うそうですが、WordPressを使っている限りでは意識することはありません。今のところ。

SMTP

-Simple Mail Transfer Protocol

シンプルなメールの送信手順ということ。単純なメールの意味なのか、単純な転送手順の意味なのかは不明。

POP

-Post Office Protocol

郵便局、つまりメールサーバーにメールを取りに行く手順。

他者から送られたメールは手元まで自動的に届くわけではない。

実際には、こちらからPOPに従ってメールサーバーに取りに行っている。取ったメールはメールサーバーから消える。

IMAP

Internet Message Access Protocol

スマホでよく使われる。POPと同じくメールをメールサーバーまで取りに行く手順。POPと違ってメールを取ってもメールサーバーに残る。よって、コピーを持ってくる感じです

一般ユーザーには無縁の中層(トランスポート~ネットワーク層)

TCP(トランスポート層)

-Transmission Control Protocol

接続先やデータ到達確認、フロー制御、データの重複、データの欠落などの不備を検出します。

UDP(トランスポート層)

-User Datagram Protocol

UDPはTCPのように通信の信頼性を確保する機能を省いて転送スピードに重点を置いた設計になっています。リアルタイム性を重視したストリーミングなどのアプリケーションにぴったりのやりかたです。

IP(ネットワーク層)

-Internet Protocol

データをパケットに分割して通信相手に高速転送します。

よくTCPとIPは一緒に使われるのでTCP/IPとかプロトコルスイートとか言われています。

みんな知ってる(インターフェース層)

Ethernet

イーサネット。いわゆる物理的なLANケーブルのこと。よく指す所の爪が割れるので改良を求めます。

その他の用語

Socket

プログラムからTCP/IPへアクセスするときに出入口が必要になります。

その出入口をSocket(ソケット)といいます。

Pythonでは socketモジュール からのsocketメソド、socket.socket()でソケットを作成することができます。これをサーバー側とクライアント側で作れば、TPC/IPを通じてSocket通信することができます。

IOT:socket通信の超基本

socket 使っていきましょう。

socket通信とは

Socket通信とは複数のコンピュータが、ネットワークを介してデータをやりとるする時に用いる通信規格の一種です。

今お使いのPCをサーバーにして、同PCをクライアントとしローカルホスト接続してみましょう。

 

サーバー側

まず、サーバー側のスクリプトから起動します。

実行すると、クライアントからのデータ待ち状態になります。

出力:

サーバーはポートNO. 2000 にバインドされました

サーバーはクライアントをリスニング中です

クライアント側

クライアント側のスクリプトを実行して、サーバーへデータを送りましょう

出力:

サーバーへ接続しました
サーバーへデータを送信しました

サーバー側 再び

サーバー側がクライアントからのデータを受け取りました。

直後に、クライアントに対して受信の通知をします。

出力:

クライアントのアドレスを受信しました : (‘127.0.0.1’, 52256)
クライアントからのデータを受信しました : こんにちはサーバーさん。私はクライアントです
コネクションは閉じられました
サーバーソケットは閉じられました

クライアント側 再び

サーバーから送られてきた受信の通知を受け取りました。

出力:

サーバーからの受信確認が返ってきました : サーバーです。データをしっかり受け取りました

クライアントソケットを閉じました

課題

このスクリプトでは、送受信がシーケンスになっており厳密には同時ではありません。

同時にする仕組みとして、マルチスレッディングというのがありますので、次回やってみましょう。

IOT:Pythonでよく使う基本操作

やっていきましょう

list系

li=[] #リストの初期化でよく使う表現

li.append(1)#アペンドします。()内の値またはリストを元リストにそのままの要素で追加します。

li.extend([1,2,3,4])#エクステンドします。()内のリストを元リストに値として追加します。

li.pop(3)#ポップします。()内のリスト番号の要素を削除します。

li.sort()#リストを小さい値の順に並び変える。値のみのリストである必要がある。

li.insert(インデックス番号, オブジェクト)#指定インデックスの前にオブジェクトをインサートする

sqlist=[e**2 for e in li] #リスト内包表記です。liを一括変換するときに便利です。

tuple系

t=(1, 2, 3, 4, 5,3,5,3)

t.index(3)#()内の値があるリスト番号のうち、一番左側にあるリスト番号

dictionary系

dict={“me”: 1, “you”: 2, “him”: 3}

dict[“you”]#キー指定で値を得る