配布資料 Lecture Slides

ネットワークプログラミング
C言語
第1回「イントロダクション」
2008年秋学期
Rodney Van Meter
[email protected]
今日の授業のお題

この授業について






授業の目的/流れ
スタッフ紹介
授業の進め方/参加方法
みんなへのヒアリング
ネットワークの基礎知識
実習
授業の目的

こんな人におすすめ



ネットワークを利用したアプリケーション構築ができる
ようになる


プログラミングのスキルアップをしたい
ネットワークの知識をつけてみたい
ソフトウェア設計・実装
C言語によるプログラミング


定石を習う
経験を積む事によって上達

手を動かすことが大事
前提

最低限欲しい

情報処理の授業内容



基本操作・基本知識
最低限押さえられていないと置いていかれるかも・・・
あると役立つ

ネットワークの基礎の基礎
プログラミングの基礎の基礎

いっぱい知識ある人は前半の講義はつまらないかも・・・

この授業の流れ

1.
2.
3.
4.
C言語によるプログラミング入門
システムプログラミング
ミニプロジェクトのグループ決定
ネットワーク関連のプログラミング
ミニプロジェクト成果発表
スタッフ

教員


Rodney Van Meter ([email protected])
アシスタント

永山翔太
([email protected])

吉藤
 yoshfuji@...
この授業の進め方

火2限(11:10-12:40)、ε11




注意:11/25, 1/13無
講義形式
- 前半: 内容提示・解説,練習問題
- 後半: 課題提示・実習
毎回授業では実習を行う
更に、学期末にはミニプロジェクトの発表
成績評価について

基本

ミニプロジェクトの成果



プログラムとしての成果物
成果物についての期末レポート
毎回の授業での実習の成果

これで出席を兼ねる
受講者へのヒアリング




学年は?
C言語によるプログラミング経験
Java言語によるプログラミング経験
他授業の履修状況




インターネットオペレーション
インターネット
ネットワークアーキテクチャ
システムプログラミング
今期の授業スケジュール(予定)













第1回 9/29:イントロダクション
第2回 10/6:C言語の基礎~関数・変数・Makefile
第3回 10/13:C言語の基礎~コマンドライン引数・構造体・ポインタ
第4回 10/20:C言語の基礎~ポインタと配列・リスト構造
第5回 10/27: file I/O・ネットワークとプログラミング
第6回 11/10:ネットワークとプログラミング(1)
第7回 11/17:ネットワークとプログラミング(2)
第8回 12/1:ネットワークとプログラミング(3)
第9回 12/8:応用ネットワークプログラミング(1)
第10回 12/15:応用ネットワークプログラミング(2)
第11回 12/22:ミニプロ中間発表
第12回 1/12:ミニプロ実習
第13回 1/19:ミニプロ最終発表
プログラミング環境

CNS環境


Linux:ccx00,ccx01
sshして上記のホストにログイン


http://itc.sfc.keio.ac.jp/ssh/
PuTTY:



http://www.chiart.greenend.org.up/~sgtathm/
putty/
http://hp.vector.co.jp/authors/VA024651/
PuTTYkj.html
課題はSFSでサブミットする
プログラミング環境 (2)


自分のPCでやるのも可能
Windows: cygwin


注意:IPv6は動かないかも
Linux, BSD, Macはネーティヴで
ここから本編~
ネットワークの基礎
ネットワーク超基礎知識



プロトコル
階層化モデル
ネットワークアプリケーションとは?
プロトコル

ネットワークを介してコンピュータ同士が通信を行
う上で,相互に決められた約束事

それぞれ対応しているプロトコルが違うとお互いに通
信できない
同じ決まりで通信するということ
電話の例
1) 受話器を上げる



相手が英語,自分が日本
語で話しても会話は成立し
ない
電話では始めに 「もしもし
,xxです」
コンピュータの世界でも同
じ


UNIX-Windows間の通信
無線-有線間の通信
7) 回線が切れる
2) 電話番号を入力
5) 会話する
6) どちらかが受話器を置く
3) 着信を通知する
4) 受話器を上げる
OSI参照モデル
アプリケーション層
データ
アプリケーション層
セッション層
プレゼンテーション層
トランスポート層
セッション層
トランスポート層
ネットワーク層
データリンク層
物理層
プレゼンテーション層
パケット
フレーム
信号
ネットワーク層
データリンク層
物理層
・各プロトコルの関係を階層構造でモデル化
1) 物理層

物理的な信号線での規格を規定する層


メディア



電波強度、符号変調方式
光ファイバ,銅線,電灯線,衛星,地上波無線
標準化と団体(ITU-T,ISO,…)
規格


X.25,IEEE,ATM,ISDN…
光)SONET,FDH…
2) データリンク層

物理的な通信媒体に対応した、フレームをやり取りす
るためのプロトコルを規定する層

同期,送信権の制御


識別


CSMA/CD
MAC Address
誤り検出

CRC Checksum
3) ネットワーク層

物理媒体を意識しない、インターネット全体で
の2点間通信を規定する層




End-to-Endの通信
経路制御(ルーティング)
IPv4,IPv6
世界でunique
4) トランスポート層



各ノード(ホスト)で動作するプロセス間の通信
を規定するための層
TCP,UDP
ノード内でのサービスの識別(PORT)
5) セッション層

セッション(通信の開始から終了まで)の手順
を規定するための層


送受信の同期管理
一般的にはアプリケーションがセッションをハ
ンドル
6) プレゼンテーション層


セッションでやり取りされるデータの表現方法
や符号化、暗号化などを規定する層
バイトオーダ



Least/Most Significant Bit (LSB/MSB)
Htonl(), Htons()
一般的にはアプリケーションがデータ表現をハ
ンドル
7) アプリケーション層



アプリケーション間でのデータのやり取りを規
定するための層
電子メールのフォーマット,内部構造など
一般的なアプリケーションプロトコルは、6,7,
8層を規定している
インターネットの階層モデル
アプリケーション層
アプリケーション層
Application Layer
Application Layer
トランスポート層
トランスポート層
Transport Layer
Transport Layer
ネットワーク層
ネットワーク層
ネットワーク層
Network Layer
Network Layer
Network Layer
データリンク層
データリンク層
データリンク層
Data Link Layer
Data Link Layer
Data Link Layer
物理層
物理層
物理層
Physical Layer
Physical Layer
Physical Layer
エンドノード
中継ノード
エンドノード
送信元から中継ノード(ルータ)を通ってあて先に到達する
OSIモデルとインターネットアーキテクチャ
アプリケーション層
Application Layer
プレゼンテーション層
Presentation Layer
セッション層
Web
XML Webサービス
メール
ニュース
・・・
メッセージング
ファイル共有
ファイル転送
・・・
TCP
UDP
Session Layer
トランスポート層
Transport Layer
ネットワーク層
IP
Network Layer
データリンク層
Data Link Layer
イーサネット
物理層
xDSL
光ファイバ
無線LAN
Physical Layer
26
プロトコルスタックとカプセル化

送信側


各層がそれぞれ必要な情報(ヘッダ)を付加して下層へ渡す
受信側

各層はヘッダの情報をもとに処理を行い,そのヘッダ部分を取り
除いて上層へ渡す
例:HTTPヘッダ
アプリケーション
アプリケーション
データ
データ
TCPヘッダ
IPヘッダ
Ethernet Frame
信号へ
TCP
TCP
IP
IP
Ethernet/100M
Ethernet/100M
CAT5e
CAT5e
送信側
受信側
ネットワークアプリケーションとは?
process
process
TCP
UDP
IP
ICMP
process
process
ARP
transport
layer
IGMP
network
layer
RARP
hardware
interface
media
data link
layer
ここから実習~
C言語に触れてみる
実習

次週からの授業を行う準備/練習



CNSへsshをする
Hello world 出力する
“こんなのできるぜ”というたしなみのある人は
帰っていいよ
今日の環境

CNS環境


sshして上記のホストにログイン



Linux:ccx00,ccx01
http://itc.sfc.keio.ac.jp/ssh/
PuTTY:
自分のホームディレクトリにファイルを置く
はろーわーるど
???.c というファイル名
 gccコマンド
 include
 printf
 a.out
などのおまじないを体験してみる

hello.cの例
#include <stdio.h>
int main (int argc, char* argv[]) {
printf("%s\n", "Hello World!");
}
#include <stdio.h>
main(){
printf(“Hello World!\n”);
}
→ gcc hoge.c
→ ./a.out
コンパイル

gcc hoge.c

a.outというファイルが生成される
または
 gcc –o hoge hoge.c

hogeというファイルが生成される
Makefile

再コンパイルの煩雑さを解消

コンパイル時は make と打つだけ
基本文法
ターゲット:依存するファイル
<tab>コマンド

Makefileの例
all: program
program : source1.o source2.o
gcc -o program source1.o source2.o
source1.o : source1.c
gcc -c source1.c
source2.o : source2.c
gcc -c source2.c
Makefileの簡素化
.cから.oファイルの生成ルール
all : source1.o source2.o
gcc -o program source1.o source2.o

コンパイルオプションの変数化
<command>
%gcc -Wall -g -c source1.c
<Makefile>
CFLAGS = -Wall
gcc ${CFLAGS} -c source1.c

Makefile: hello.cへの適用例
all: hello
hello: hello.o
gcc -o hello hello.o
hello.o: hello.c
gcc -c hello.c