• 検索結果がありません。

¥Í¥Ã¥È¥ï¡¼¥¯¥×¥í¥°¥é¥ß¥ó¥°ÆÃÏÀ

N/A
N/A
Protected

Academic year: 2021

シェア "¥Í¥Ã¥È¥ï¡¼¥¯¥×¥í¥°¥é¥ß¥ó¥°ÆÃÏÀ"

Copied!
20
0
0

読み込み中.... (全文を見る)

全文

(1)

ネットワークプログラミング特論

芝浦工業大学大学院

理工学研究科

電気電子情報工学専攻

(2)

なぜ「ネットワーク」「プログラミング」か

インターネットの価値

= E2E

END

に価値があるのではない

END

は,ユーザに対してオープンだから価値がある

オープン ≒ プログラマブル

この授業で得られるもの

インターネットの仕組みの中で何がどのようにプログラマブ

ルなのか分かる

自分でも使えるようになる

そうなっている理由が分かる

なかなか変えられないところが分かる

今後のインターネット (サービス) の方向性を予測できる

(3)

10000 things all ICS students should do before graduating

0000 : Buy your own domain name.

ドメイン名を買う.

0001 : Install an Apache web server and configure it in a non-trivial way, e.g. to serve multiple domains.

Apacheをインストールし,複数ドメインなどの普通じゃない設定をしてみる. 0010 : Install WordPress and have your own blog. Write blog posts regularly. Write well. Good writing is a critical skill to master in this profession.

WordPressをインストールし blog を定期的に書く.文章力はとてもとても重要. 0011 : Run your own web site at home or in a hosting company.

自宅やホスティングを使って自分の Web サイトを立ち上げる.

0100 : Write at least one complete LAMP web app, preferably two : one where P=PHP, the other where P=Python.

LAMPを使って Web アプリを作る.できれば PHP と Python の両方で. 0101 : Have your own [physical or virtual] server on the cloud.

自分の物理的ないし仮想サーバーをクラウド上にもつ.

0110 : Install VMWare or equivalent in order to boot up your laptop with more than one OS.

VMware等を使ってノート PC を複数の OS でブート可にする.

0111 : Configure your home DSL router so that you serve a web site or other kind of server from your home machine / laptop to your friends.

(4)

10000 things all ICS students should do before graduating

1000 : Use a packet sniffer to learn about the network requests your computer does to your favorite game server.

自分のコンピュータとゲームサーバ間のパケットをダンプして解析する. 1001 : Make contributions to an open source project.

オープンソースプロジェクトに寄与する.

1010 : Write an app that uses at least one of the popular Web APIs, like Facebook Connect or one of Google’s.

Facebook Connectや Google などの Web API を使ってアプリを書いてみる. 1011 : Use Google AdSense on your web site, and make money just by virtue of attracting traffic.

Google AdSenseを自分の Web サイトに導入し,トラフィックでお金を稼いでみる. 1100 : Compile a complicated open source project from scratch, like OpenSim or Matterhorn.

OpenSimや Matterhorn などの複雑な OSS を 0 からコンパイルしてみる. 1101 : Read works of literature and, besides enjoying the ride, pay close attention to how the author tells the story and makes use of words. Your programs should be as carefully written as those works of art!

文献を利用するだけでなく注意深く読む.プログラムも同じくらい注意して書く. 1110 : Get yourself involved in a software project where requirements are bound to change halfway through : that’s about 0.01% of homework projects and about 99.99% of real world projects, so find one of the latter kind. Finish the project with patience and the ability to take criticism in a constructive way.

要求条件が途中で変わるようなソフトウェアプロジェクトに入ってみる.辛抱強く, 建設的に批判しながら,プロジェクトを完遂する.

1111 : Write an application using map-reduce. Run it on Google app-engine or amazon EC2.

(5)

授業の進め方

インターネット上のサービス提供の仕組みを沢山説明

基本的には広く

(

残念ながら

)

浅く

(howto

tips

は説明しない

)

なぜそうなってるか

?

技術的な理由

なぜそうなってるか

?

技術以外の理由

重要技術はソースコードで説明

成績

何か一つ作ってみる

(

最終課題

)

成績は,最終課題の発表,レポート,ソースコードで決める

授業中の質問・議論は成績として考慮する

いいわけ

授業の資料は,何年間も少しずつ更新しているものなので,一貫

性欠如,技術の抜け等多々あり (あとは自分で)

(6)

授業の予定

1

回 インターネットの基本

2

HTTP

3

HTML4

4

回 ブラウザプログラミング

(JavaScript, DOM, CSS)

5

回 ブラウザプログラミング

(JavaScript, Library)

6

回 セキュリティ

7

回 ブラウザプログラミング

(mashup)

8

XML

9

HTML5 (

狭義の

HTML5)

10

HTML5 (HTML5

外の新技術

)

11

REST

とマッシュアップ

12

Web

サーバーの基本

13

回 データベースとトランザクション

14

回 ビッグデータ処理

15

回 発表会

(7)

通して学ぶべき重要な概念 (とりあえず思いつく範囲で)

ソフトウェアアーキテクチャ

Client Server

3-tier

MVC

Layer

と Layer violation

ステートフルとステートレス

切断への耐性

キャッシュの方法

セッション → ステートフル

Compatibility & Connectivity

browser

間 compatibility

version

間 compatibility (forward, backward)

オプション機能の豊富さ (JS がオフとか)

Security

same origin

sanitize (XSS)

hash,

署名

共有鍵, 秘密鍵

(8)

歴史

ARPANET: 1960

年代

TCP/IP: 1970

年代

TCP/IP

(UNIX

への

)

普及

: 1980

年代

WWW

HTTP0.9: 1990

年頃

NCSA Mosaic: 1993

http://evolutionofweb.appspot.com/

にとても面白い年表がある

(9)

標準化

IETF

RFC (http://www.ietf.org/)

Internet Draft, Proposed Standard, Draft Standard, Internet

Standard

W3C (World Wide Web Consortium)

WHATWG

OASIS

defacto

(10)

本日のソースコード

C

で書いた

Socket

通信

client.c: C

版クライアント

server.c: C

版サーバー

pollserver.c: C

版サーバー (多重ソケット poll)

selserv.c, selcli.c,: C

サーバー (多重ソケット select)

Java

で書いた

Socket

通信

Client.java: Java

版クライアント

Server.java: Java

版サーバー

(11)

ネットワークの基本構成

ネットワークの基本構成

ルーター

ルーター

ルーター

PC PC PC PC PC PC PC PC PC PC PC PC PC PC PC PC

サブネット(セグメントとも言う)

(12)

通信方式(サブネット内)

通信のデータ単位:パケット

宛先 MACアドレス (48bit) 送信元 MACアドレス (48bit) データ長 (16bit) データ (1500バイト) PC

MAC: 100 MAC: 200PC MAC: 300PC MAC: 400PC

MACアドレスはハードを製造した時に割り当てられている

セグメント内は全PCにパケットが伝わる

400

200

...

あ,自分宛だ

自分宛じゃない

自分宛じゃない

(13)

通信方式(サブネット間)

サブネットの収容台数を増やすとパケット衝突が増加

サブネットを越えてパケットを送る仕組みが必要

→IPアドレスによる配信

パケット構成

IPアドレスは32bitの数値

普通はバイトで区切って書く

例:

192.168.1.1

(当面,最下位のバイトがホストアドレスとする)

宛先 MAC データ 送信元 MAC 長さ 送信元 IPアドレス 32bit 宛先 IPアドレス 32bit

...

ネットワークアドレス ホストアドレス

IPアドレス

(14)

通信方式(サブネット間)

ルーターがサブネット間を中継する

PC MAC: 100 IP:10.0.0.3 PC MAC: 200 IP:10.0.0.2 PC MAC: 300 IP:10.0.0.5 PC MAC: 400 IP:10.0.0.7

400

500

MAC:600

ルーター

MAC:500

PC MAC: 700 IP:10.0.1.3

サブネット10.0.0.0からのパケットを一旦受け

取りサブネット10.0.1.0側に再送信する

dst=10.0.1.3, src=10.0.0.7

600

700

dst=10.0.1.3, src=10.0.0.7

サブネット

10.0.0.0

サブネット

10.0.1.0

(15)

TCP (Transport Control Protocol)

IP

の上位層

信頼性のある通信⇔

UDP

コネクション型(セッション型)モデル

protocol, src addr, dst addr, src port, dst port

5

つ組み

ポート

同じマシン間でも,複数のコネクションを張れる

well-known port

application writer

が知っておくべき特性

オープンが重い,セッション管理が重い

フロー制御の通信特性

スロースタート制御のためフルスピードになるまで時間がか

かる

何もしないと覗かれ放題

(16)

パケットダンプ(

Wireshark)

IP

TCP

(17)

DNS (Domain Name System)

順引き

ホスト名(

FQDN

)→

IP

アドレス

一つのマシンが複数の名前をもてる

逆引き

IP

アドレス

(1.2.3.4)

→名前

実際は,

4.3.2.1.in-addr.arpa

を引く

メール(

MX

レコード)は別にある

(18)

その他

DHCP

Dynamic DNS

マルチホーム

IP

アドレスは

NIC

につく

ホストのアドレスではない

アドレス

グローバルアドレスとプライベートアドレス

NAT

NAPT

IPv6

IPv4

(19)

ソケット

BSD socket

とも言う

(

名前の通り

BSD UNIX

が元祖

)

プロセス間通信のための汎用

API

TCP

を使うには,

socket

のドメインを

SOCK STREAM

で指

定する

ファイルへの

IO

と同様の書き方ができる

→ソースを見てみる

(C

Java)

(20)

QUIC

Google

主導の

Transport Layer

Protocol (TCP

と同じ

layer)

QUIC = Quick UDP Internet Connections

TCP

の改良は研究レベルでは沢山.例えば

SCTP

RFC

QUIC

の目標は接続時間短縮.それも

TCP Fast Open

がある.

既に

Chrome

Google

サーバーには入っている.

0-RTT connection

Packet pacing

Mobile interface migration

FEC (forward error correction)

参照

関連したドキュメント

YouTube では、パソコンの Chrome、Firefox、MS Edge、Opera ブラウザを使った 360° 動画の取り込みと 再生をサポートしています。また、YouTube アプリと YouTube Gaming

[r]

 複雑性・多様性を有する健康問題の解決を図り、保健師の使命を全うするに は、地域の人々や関係者・関係機関との

サーバー費用は、Amazon Web Services, Inc.が提供しているAmazon Web Servicesのサーバー利用料とな

[r]

7.法第 25 条第 10 項の規定により準用する第 24 条の2第4項に定めた施設設置管理

① Google Chromeを開き,画面右上の「Google Chromeの設定」ボタンから,「その他のツール」→ 「閲覧履歴を消去」の順に選択してください。.

すべての Web ページで HTTPS でのアクセスを提供することが必要である。サーバー証 明書を使った HTTPS