ネットワークプログラミング 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
© Copyright 2024 ExpyDoc