前言
IoTと無線ネットワークのコースの第二回目授業メモです。
IoT
インターネット通信の概要
1.IP = インターネット・プロトコル
- IP(Internet Protocol):
複数の通信ネットワークを相互に接続し,データを中継・伝送 して一つの大きなネットワークにすることができる通信規約 (プロトコル)の一つ - IPアドレス(IP Address):
インターネット中のコンピュータの固有のアドレス - パケット(Packet):
コンピュータ間でデータを送受信するための転送単位。
メッセージは複数のパケットに分割して転送される - パケットの内容:
ヘッダ
受信先アドレス(IPアドレス)
送信元アドレス(IPアドレス)
データ
2.TCP
- 概要:
メッセージは多数のパケットに分割されて受信先に転送
転送経路はパケットによって異なる
パケットの到着順はパケットの送信順と異なるかも知れ ない
到着したパケットを送信順に並べ替える必要がある
Transmission Control Protocol(TCP)
・パケットを正しい順序に並べ替えてメッセージを再構成するためのプロトコル - 信頼性:
メッセージを構成する全てのパケットが到着してい れば,パケットのロス(紛失)はない
データの品質に影響を及ぼすような通信の遅延はな い(VoIPでの会話,ストリーミング・オーディオ)
到着した全てのパケットは正しい順序(送信順)に 並べ替えられてメッセージが再構成される - 接続の確立:
- 接続の確立(3-way handshake):
- データの送信(成功):
- データの送信(失敗):
- 接続の終了
3.UDP(User Datagram Protocol)
-
UDPの概要:
コネクションレス型のプロトコル
TCPに比べると信頼性がない
高速転送が可能
UDPヘッダサイズが少ない(8byte)ので,その分アプ リケーションのデータを多く送受信することが可能
ただし,パケットが到達する保証がないので,パケットロスなどの場合には,アプリケーション側で再送処理をして通信を成立させるかパケットロスが容認きるアプリで使用する必要がある。 -
UDPの用途:
音声や映像などのリアルタイム性のあるデータを転送する場合
複数の相手に同じデータを同時に転送する場合:
・マルチキャスト通信(1対N)
・ブロードキャスト通信
信頼性が重要でなく,少量のデータ転送をしたい場合:
・Domain Name System (DNS)
・Simple Network Management Protocol (SNMP)
・Routing Information Protocol (RIP)
・Dynamic Host Configuration Protocol (DHCP)
・Network Time Protocol (NTP) -
UDPのデータフォーマット
-
TCPとUDPの比較
4.TCP/IP
-
概要:
TCPとIPの組み合わせは 非常によく使われるので,単に「TCP / IP」と呼ぶ。
それぞれのレイヤーが下にあるレイヤーの構成要素を用いて一連のプロトコルまたはスタックを記述。
OSI=Open System Interconnection -
OSI参照モデル: 7 アプリケーション層 ソフトウェアがあつかう通信サービス層,ファイル,メールの転送などを提 供。HTTPやFTP等の通信サービスなどが含まれる。 6 プレゼンテーション層 データの表現方法,圧縮方式,文字コードなどの定義を管理する。 5 セッション層 通信プログラム間の通信の開始から終了までのセッションを管理する。 4 トランスポート層 エラー訂正,再送制御などTCPの機能などはここに位置する。 3 ネットワーク層 ネットワーク上の通信経路の選択,つまり一般的なルーティングはこの層 でおこなわれる,ルータなどはこの階層での仕事が主になる。 2 データリンク層 接続されている通信機器間の信号のやりとり,受け渡しなど,一般的なス イッチングハブなどはこの層を扱うことが可能となっている。 1 物理層 物理的な接続,電気的であったり,その形状など,基本的な通信機器の 物理的なものを内包する。 -
ルータの動作:
python
Pythonプログラミング(2)
データ型
文字列型
文字列型の記述方法(1)
・文字の並びをダブルクォート(")もしくはシングルクォー ト(‘)で囲んだオブジェクト
"Hello, world!"
#'Hello, world!'
'Hello, world!'
#'Hello, world!'
文字列型の記述方法(2)
・ダブルクォート(")を含む文字列またはシングルクォート(‘) を含む文字列を作るには,文字列全体をそれぞれシングル クォート(‘)またはダブルクォート(")で囲む
'"Hello," he said.'
#'"Hello," he said.'
"'Hello,' world!"
#"'Hello,' world!"
文字列型の記述方法(3)
・長さ0の文字列も生成できる("" または ‘’)
""
#''
''
#''
文字列型の記述方法(4)
・複数の行にわたる文字列は,3つの連続したダブルクォー ト(")またはシングルクォート(‘)で文字列を囲むことによっ て作成できる
"""The quick brown fox
jumps over the lazy dog."""
#'The quick brown fox¥jumps over the lazy dog.'
# ¥n は 改行コード
3重クォートで囲まれた文字列は,プログラムのコメント としても使用可能!
エスケープシーケンス(1)
・改行やタブなど,通常の記述方法では表せない文字 を2文字以上の文字を組み合わせて表現する方法
・Windows環境でのPythonの場合,エスケープ文字 として「¥」を用いる
エスケープシーケンス(2)
・正しい記述
print("It's me!")
# It's me!
・誤った記述
print('It's me!')
# SyntaxError: invalid syntax
エスケープシーケンス(3)
・「’」で囲まれた文字列中の「’」
print('It¥'s me!')
# It's me!
・改行
print("abc¥ndef")
# abc
# def
・水平タブ
print("abc¥tdef")
# abc def
変数と名前
(今日同僚と飲み会ので、22時から宿題と文書を書くので、もう疲れた、あまりの内容はまたね。。。。。2020年5月20日 0:14)
演習課題
演習課題(2−1)
文字列 s を " abcdefghijklmnopqrstuvwxyz" とする。 (文字列の先頭にスペースがあることに注意)
- 文字列 s を用いて,文字列 "elephant" を生成するプログラム。
s = " abcdefghijklmnopqrstuvwxyz" print("演習課題 1") print(s[5]+s[12]+s[5]+s[16]+s[8]+s[1]+s[14]+s[20])
演習課題 1 elephant
演習課題(2−2)
文字列 s を " abcdefghijklmnopqrstuvwxyz" とする。 (文字列の先頭にスペースがあることに注意)
- 文字列 s からスライス記法を用いて文字列 "ehknq" を生成する プログラム。ただし,スライスの先頭 start および末尾 end の値 は正とする。
-
文字列 s からスライス記法を用いて文字列 "ehknq" を生成する プログラム。ただし,スライスの先頭 start および末尾 end の値 は負とする。
s = " abcdefghijklmnopqrstuvwxyz" print("演習課題 2") print("正とする結果:",s[5:18:3]) print("負とする結果:",s[-22:-9:3])
演習課題 2 正とする結果: ehknq 負とする結果: ehknq
演習課題(2−3)
文字列 s を " abcdefghijklmnopqrstuvwxyz" とする。 (文字列の先頭にスペースがあることに注意)
- 文字列 s からスライス記法を用いて文字列 "qnkhe" を生成する プログラム。ただし,スライスの先頭 start および末尾 end の値 は正とする。
-
文字列 s からスライス記法を用いて文字列 "qnkhe" を生成する プログラム。ただし,スライスの先頭 start および末尾 end の値 は負とする。
s = " abcdefghijklmnopqrstuvwxyz" print("演習課題 3") print("正とする結果:",s[17:4:-3]) print("負とする結果:",s[-10:-23:-3])
演習課題 3 正とする結果: qnkhe 負とする結果: qnkhe
演習課題(2−4)
文字列 "The quick brown fox jumps over the lazy dog." に含まれる文字 "a", "e", "i", "o", "u" の個数をカウントして印字するプログラムを作成せよ。
s = "The quick brown fox jumps over the lazy dog."
print("演習課題 4")
a = s.count("a")
e = s.count("e")
i = s.count("i")
o = s.count("o")
u = s.count("u")
print("a:",a,"\ne:",e,"\ni:",i,"\no:",o,"\nu:",u)
print("count:",a+e+i+o+u)
演習課題 4
a: 1
e: 3
i: 1
o: 4
u: 2
count: 11
以上