Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
応用プログラミングex1
3
本日のレシピ
1.はじめに:後半の実施方法と評価方法2.ネットワークに関する幾つかの基礎的な事柄3.ネットワークを調べる4.echoクライアント・サーバを動かす
4
応用プログラミング
● 到達目標
現実の多様なデータを処理するためのプログラミング作法を修得する。少し大きな規模のプログラムが作成できるようになる。
● 系統的履修
「プログラミングおよび実習 I」の後を継ぎ、プログラミング能力のさらなる強化を目指します。
5
応用プログラミング?
● ちゃんと役に立つプログラムへ● ≠ プログラミング学習のためのプログラム● プログラミングを目的から手段へ● 巷のすごそうなプログラムとのギャップを埋める
● 前半の内容で必須となるもの● Python の基礎● 関数、ファイル入出力、文字列の扱い、など
6
ネットワークプログラミング● 「スゴそうなプログラムとのギャップを埋め、それなりに高機能で役に立ちそうなプログラム」を個人で作るには何が必要か?
● 既存の関数ライブラリ(API)を使える● 用意された関数の役割は?引数の意味と型は?
● 後半では、毎日使っているが中身は良く知らない & 教職・情報!
「ネットワークプログラミング」
7
場所
すべてオンライン(Microsoft Teams)
8
基本的に
前半、講義
後半、課題実習(with TA)
9
実習課題のチェック● TAがオンラインで提出課題をチェック● 次回実習終了30分前が提出(予約)〆切(7日と60分)
● リモート実習室環境 rp-linux.st を利用
10
成績評価● 後半の評価:50+α点
● 実習課題 25点● レポート -10点 ~ 25点+α
「自作した簡易Webサーバの性能を比較・評価する」
● 講義・演習への出欠を成績に加味しない(講義録画もあとから視聴できますし)。
● 科目評価は、前半分と加算して100点超は切り捨て。
11
後半でとくに必要なもの
「想像力」 s.connect((HOST,PORT))
send=b'Hello,world'
s.sendall(send)
print('Send',repr(send))
data=s.recv(1024)
12
本日のレシピ1.後半の実施方法と評価方法2.ネットワークに関する幾つかの基礎的な事柄3.ネットワークを調べる4. echoクライアント・サーバを動かす
13
コンピュータネットワーク● 言葉としてはけっこうアイマイ
● 「コンピュータ」とは? 計算ができる機械?CPU?● 「ネットワーク」とは? 繋がる?情報を伝える?
● 情報を伝える? = 意味・意図を伝える● 送り手と受け手の共通認識が必要● 情報伝達には必ず解釈がつきまとう● Merci / Gracias / Terima kasih● プロトコル(Protocol)が必要
14
ネットワークの基礎概念● プロトコル● TCP/IPプロトコル● (プロトコル階層)● パケット● IPアドレス
15
プロトコル● プロトコル = 約束事、(通信)規約
● 情報伝達における曖昧さを無くすための手続き方法● 情報伝達や手続きの方法・通信手順など● 使われる言葉や記号の意味、それの伴う動作など● TCP/IP プロトコル、京都議定書(Kyoto Protocol )
パリ協定(the Paris agreement, 2015)
● この応用プログラミング(後半戦)では、
TCP/IP プロトコルを用いたネットワークプログラミング
を扱う。
16
TCP/IP プロトコル● Transmission Control Protocol / InternetProtocol
● TCP/IP プロトコル・スイート● TCP, UDP / IP, ICMP, ARP / RIP, OSPF, BGP /HTTP, SMTP, FTP, TELNET, SNMP,...
● TCP/IP ≒ インターネットのプロトコル● 誰が決めているのか?
● IETF (Internet Engineering Task Force) による、RFC (Request For Comments) という仕様書
17
プロトコル階層アプリケーション層HTTP, SMTP, POP
トランスポート層TCP, UDP
ネットワーク層IP, ARP
データリンク層Ethernet, PPP
物理層
ケーブル、光ファイバ
プロトコルに従った
送信データをTCPに渡す
データをパケットに分割
して番号付けする
パケットに送信先の
アドレスを付ける
ハードウェアに合わせて
パケットを渡す
パケットのデータが
電気信号などで送信
プロトコルに従って
受け取ったデータを処理
パケットを順番に並べて
データを再構成する
パケットが壊れてないか?
自分宛のパケットか?
パケットの種類を確認して
プロトコルに渡す
電気信号などで
データを受け取る
18
郵便プロトコルアプリケーション層HTTP, SMTP, POP
トランスポート層TCP, UDP
ネットワーク層IP, ARP
データリンク層Ethernet, PPP
物理層
ケーブル、光ファイバ
「送り手」
郵便番号と宛名を書いてポストに投函する
「集配人」
ポストから集めて集配局へ
「集配局」
郵便番号で仕分け
「集配局配送」
仕分けごと梱包して
貨物に渡す
「輸送」
発送
「受け手」
⾃宅ポストで受け取る
「集配人」
集配局から受取人ポストへ
「集配局」
郵便番号で仕分け
「集配局配送」
貨物から受け取って仕分けへ
「輸送」
荷受け
20
IPアドレス● IPでネットワーク機器を一意に判別する番号
● IPv4: 32bits 232 = 4294967296● IPv6: 128bits 2128 = 340282366920938463463374607431768211456 (6.8e+17/mm2)
● ICANN, JPNIC● ドット付き10進表記 (dotted decimal notation)● ネットワーク部・ホスト部・サブネットマスク
10000101.01010011.01010000.00000001
133.83.80.1
255.255.255.128
11111111.11111111.11111111.10000000
133.83.80.1/25
21
以上が、ネットワークの基本概念その1
次に、 実際に(みなさんの目の前にある)PCのネットワーク設定を調べつつ
その2(ドメイン名とか)へ
23
PCのネットワーク情報を調べる
● ipconfig● ipconfig /all
macOS Linux Windows
● ifconfig● ifconfig en0
● ifconfig● ip address
24
ドメイン名● IPアドレスを覚えるのは面倒なので名前を付ける● 個人でも所有できます● FQDN(Fully Qualified Domain Name)host.domain
● www.math.ryukoku.ac.jp (133.83.80.1)● wiki.math.ryukoku.ac.jp
● DNS (Domain Name System)● IPアドレスとドメイン名を対応付ける仕組み● DNSサーバへ問い合わせる● 133.83.80.1 www.math.ryukoku.ac.jp
25
PCのホスト名を調べる
● hostname
macOS Linux Windows
● hostname● hostname -f
● hostname● hostname -a
26
DNSデータベースを参照する
● nslookup 133.83.80.1● nslookup sano.org
macOS Linux Windows
● nslookup 133.83.80.1● nslookup sano.org
● host 133.83.80.1● host sano.org● nslookup も使えます
27
本日のレシピ1.後半の実施方法と評価方法2.ネットワークに関する幾つかの基礎的な事柄3.ネットワークを調べる4. echo クライアント・サーバを動かす
28
クライアント・サーバモデル● クライアント (Client):
● サービスを要求する・受ける側(お客様?)● 通信を開始する(能動的)
● サーバ (Server):● サービスを提供する側(お店?)● 通信開始を待つ(受動的)
● 例:WWW(HTTP)サーバ/クライアント、 メイル(SMTP)サーバ/クライアント
● クライアン・サーバ通信モデル:● クライアントから通信を開始する● クライアントからの1回の送信に対して、必ずサーバが1回返信
● クライアント・サーバモデルとしての禁止事項● 送信だけ・受信だけ・送受信の回数が違う
29
echoクライアント・サーバを動かす●より正確には
● echo クライアントプログラム● echo サーバプログラム
●この2つのプログラムを実行させて実際にネットワーク通信させることが本日の課題です。 → 実際に動かしてみる。
●この echo クライアント・サーバプログラムを使って演習を進めて行きます。