Network Programming in C Lecture 6: Network Programming (1) ネットワークプログラミング 第6回「ネットワークとプログラミング(1)」 2010年秋学期 Rodney Van Meter.

Slides:



Advertisements
Similar presentations
インターネット プロトコル 情報教員のためのサーバ管理技法 3 日目 柴田 功. 情報教育の失敗事例 ホームページ作成でロゴの画像の ファイル名が他の生徒とかぶってし まった。 ホームページ作成でロゴの画像の ファイル名が他の生徒とかぶってし まった。 生徒には作品を FD に保存させていた が、データが消えてしまった。
Advertisements

Step.5 パケットダンプ Wiresharkでパケットをキャプチャする PC 1 PC 2 PC 3 PC 4 ネットワーク
システムコール 低水準入力 ファイルディスクリプタ ソケット
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
前回の課題 IPv6アドレス IP ARP ICMP NAT インターネット層 2003年12月4日 情報ネットワーク論 新村太郎.
ネットワークプログラミング 第7回「ネットワークとプログラミング(2)」
ネットワーク層.
システムプログラミング 第13回 情報工学科 篠埜 功.
CS-B3 ネットワークプログラミング 峰野博史
TCP (Transmission Control Protocol)
「コンピュータと情報システム」 07章 インターネットとセキュリティ
30分でわかるTCP/IPの基礎 ~インターネットの標準プロトコル~ 所属: 法政大学 情報科学研究科 馬研究室 氏名: 川島友美
Windows Network Programming
TCPソケットプログラミング ソケットプログラミング TCP-echoのデータ通信手順
トランスポート層.
Telnet, rlogin などの仮想端末 ftp などのファイル転送 rpc, nfs
コンテンツ配信 エンコード (符号化) CBR (Constant Bit Rate) VBR (Variable Bit Rate)
ま と め と 補 足 ネットワークシステムⅠ 第15回.
Network Programming in C ネットワークプログラミング Lecture 8, Network Programming (3) 第8回「ネットワークとプログラミング(3)」 2010年秋学期 Rodney Van Meter.
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
第5回ネットワークプログラミング 中村 修.
千代浩司 高エネルギー加速器研究機構 素粒子原子核研究所
ネットワークプログラミング C言語 第1回「イントロダクション」
2010年秋学期 Rodney Van Meter Network Programming in C #1: Introduction ネットワークプログラミング C言語 第1回「イントロダクション」 2010年秋学期 Rodney Van Meter
ネットワークプログラミング 中村 修.
大阪大学 大学院情報科学研究科 博士前期課程2年 宮原研究室 土居 聡
第11章 UDPユーザ・データグラム・プロトコル
TCP/UDP プロセス間の通信のためのプロトコル TCP:信頼性高、処理時間大 UDP:信頼性低、処理時間小 ftp SMTP HTTP
第11回ネットワークプログラミング 中村 修.
システムプログラミング 第13回 プロセス間通信(続き) 情報工学科 篠埜 功.
情報の科学的 な理解(2) 情報科教育法 8回目 2005/6/4 太田 剛.
UDPエコーサーバ UDP-echoサーバのプログラムモデル(Cプログラム) サーバで利用するソケット関数(Cプログラム)
システムプログラミング 第13回 情報工学科 篠埜 功.
インターネットの基礎知識 その3 ~TCP・UDP層編~
ネットワークプログラミング 第4回「C言語の基礎~ポインタと配列」
イーサネットフレームの構造とデータリンク層アドレス
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 ソケットプログラミング 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
ネットワーク技術II 第9.1課 TCP/IPプロトコルスイート
ソケットプログラム(TCP,UDP) EasyChat開発2
ネットワークの基礎知識 電子制御設計製図Ⅰ   2014年5月2日 Ⅲ限目.
ユビキタスシステムアーキテクチャ 第5回 ネットワークプログラミングの基礎
ネットワークプログラミング 第3回「C言語の基礎~コマンドライン引数・構造体・ポインタ」
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
TCP/IP入門          櫻井美帆          蟻川朋未          服部力三.
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
TCP/IPとプロセス間通信 2007年1月12日 海谷 治彦.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
最低限インターネット ネットワークにつなぎましょ!
情報実験 第五回 最低限 internet ~ネットワークの仕組みを知ろう~
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
OSI7層に関係する機器、仕様、機能など 物理層 データリンク層 ネットワーク層 トランスポート層 セッション層 プレゼンテーション層
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
インターネットワーキング.
ネットワーク・プログラミング TCPサーバ.
ネットワーク・プログラミング 1対多のプロセス間通信.
岡村耕二 UDP通信プログラム 課題と回答例 岡村耕二 情報ネットワーク.
アプリケーションゲートウェイ実験 2001.10.5 鬼塚 優.
ネットワーク・プログラミング マルチタスク.
SMTPプロトコル 2001年8月7日 龍 浩志.
ポートスキャン実習 2002年9月19日 修士1年 兼子 譲 牧之内研究室「インターネット実習」Webページ
プロトコル番号 長野 英彦.
ネットワークシステム ネットワークシステム概要.
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
Presentation transcript:

Network Programming in C Lecture 6: Network Programming (1) ネットワークプログラミング 第6回「ネットワークとプログラミング(1)」 2010年秋学期 Rodney Van Meter

今期の授業スケジュール(予定) 第1回 9/28: Introduction / イントロダクション 第2回 10/5:C Basics~Functions, Variables, Data Types・ Makefiles 第3回 10/12:C Basics~Command Line Arguments ・ Structures ・ Pointers 第4回 10/19:C Basics~Pointers & Arrays ・ Lists 第5回 10/26: file I/O・ Network Protocols 第6回 11/2: Network Programming (1)‏ 第7回 11/9: Network Programming (2)‏ 第8回 11/16: Network Programming (3) 第9回 11/30: Applied Network Programming (1) 第10回 12/7: Applied Network Programming (2) 第11回 12/14: Work on Projects 第12回 12/21: Work on Projects 第13回 1/19: Final Presentations!!!

今日の目標

Try My Message Server (Simpler even than the attendance server) IP address: 2001:200:0:8801:20c:29ff:fe27:6c98 Port : 12345 telnet! 課題:サーバ作成

Outline for Today Projects Tools Sockets Practice/Homework Make your own TCP “Success!” server

Wireshark

Internet Layered Model アプリケーション層 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 エンドノード 中継ノード エンドノード 送信元から中継ノード(ルータ)を通ってあて先に到達する 7 7

OSI Model & Internet Architecture アプリケーション層 Application Layer Web XML Webサービス Email NNTP ・・・ Messaging File transfer File sharing プレゼンテーション層 Presentation Layer セッション層 Session Layer トランスポート層 Transport Layer TCP UDP ネットワーク層 Network Layer IP データリンク層 Data Link Layer Ethernet xDSL Optical fiber 無線LAN (WLAN) 物理層 Physical Layer 8

Protocol Stack & Encapsulation Sender side Each layer in stack adds headers as necessary Receiver side Each layer extracts headers, processes, then sends to higher layer in stack n.b.: Messages may not be 1:1! Application アプリケーション ex:HTTP hdr Data データ TCP hdr TCP TCP IP hdr IP IP Ethernet Frame Ethernet/100M Ethernet/100M CAT5e CAT5e phy. signal sender side receiver side 9

ネットワークアプリケーションとは? Application layer transport layer IP network layer process process process process transport layer TCP UDP ICMP IP IGMP network layer ARP RARP data link layer hardware interface media

Client-Server Model Client Server サービス要求 Time サービス提供 Primary model used on the Internet Server (e.g., web server, DNS server, file server) Waits to receive communication from client 反復サーバ/平行サーバ Client (e.g., web browser) Initiates connection to server Client Server サービス要求 Time サービス提供

Port & Socket Port Socket Access point for transport layer TCP/UDP both have Appears in packet headers Socket “Adapter” that connects a software process to a network port Much like a file descriptor Internal to your computer

ソケット(Socket)‏ Process Process Process-to-process data I/O entrance/exit Allows process to send/receive like a file descriptor Process Process socket socket

socket() System Call int socket(int family, int type, int proto)‏ family defines choice of protocol family AF_INET IPv4 protocol AF_INET6 IPv6 protocol AF_LOCAL UNIX Domain Socket AF_ROUTE routing socket (経路制御ソケット) (special) Type defines how data is managed SOCK_STREAM as a stream (TCP) SOCK_DGRAM as individual datagrams (UDP) SOCK_RAW raw packets Proto is 0, except for RAW

socket() System Call Return value Code usually looks like… success: socket descriptor number failure: -1 same as with file descriptors Code usually looks like… listenfd = socket(AF_INET, SOCK_STREAM, 0)‏ AF_INETの場合の利用されるIPv4の上位層 SOCK_STREAM TCP SOCK_DGRAM UDP SOCK_RAW なし

初期状態 クライアント プロセス サーバ プロセス Port A Port B Port C ホストA ホストB IP Address: xx.xx.xx.xx. IP Address: xx.xx.xx.xx.

Socketを開いた状態 Socketを開く クライアント プロセス サーバ プロセス Port A Port B Port C ホストA IP Address: xx.xx.xx.xx. IP Address: xx.xx.xx.xx.

bindした状態 Proto LocalAddress ForeignAddress State TCP *.A *.* Closed クライアント プロセス サーバ プロセス Port A Port B Port C ホストA ホストB IP Address: xx.xx.xx.xx. IP Address: xx.xx.xx.xx.

Datagram example (UDP)‏ Server socket()‏ Client bind()‏ socket()‏ recvfrom()‏ bind()‏ Block until Data from client sendto()‏ Data (request)‏ Process request Data (reply)‏ sendto()‏ recvfrom()‏

Stream example (TCP)‏ Server socket()‏ bind()‏ Client listen()‏ accept()‏ Block until connect Connection Establishmt. connect()‏ 暗黙にbind()‏ Data (request)‏ send()‏ recv()‏ Process request Data (reply)‏ send()‏ recv()‏

sockaddr_in構造体 ソケットの情報 7 15 31 長さ Port番号 アドレス unused unused アドレス … 32bit (IPv4), 128bit (IPv6)‏ ポート番号 … 16bit プロトコルファミリー … AF_INET… 7 15 31 長さ protocol Port番号 アドレス unused unused

sockaddr構造体 ソケットの情報を一般化した形 7 15 31 長さ unused unused unused unused ソケットを使った通信のためのテンプレート 利用するプロトコルに依存しない 共通: 長さ・プロトコルファミリ(AF_XXX)‏ 7 15 31 長さ protocol unused unused unused unused

キャスト ある変数・構造体を無理やり違う型の変数や構造体として扱う方法 変数を使う時に扱いたい型をカッコで括る (int)no_int_variable; ← int型にキャスト 関数の引数を一般化するのに便利 sockaddrの例 struct sockaddr_in sin; (struct sockaddr)sin; 型やサイズに依存せず1バイトずつ読みたいときにも使う long addr = 1234567; char *cp = (char *)&addr; for(j = 0; j < 4; j++) { printf("%c ", *cp++); }

1 2 2 1 1 2 3 4 4 3 2 1 ネットワーク・バイト・オーダ リトルエンディアン ビッグエンディアン 16ビット整数 Network Byte Order CPUアーキテクチャによって、バイトの並びが違う 一般にBig Endian(sparc等)とLittle Endian(Intel等)の二つ ネットワーク上に流すバイト順を統一しなくてはならない Big Endianに統一 htons()/htonl()/ntohs()/ntohl()を利用 リトルエンディアン ビッグエンディアン 16ビット整数 (short)‏ 1 2 2 1 32ビット整数 (long)‏ 1 2 3 4 4 3 2 1

エンディアン変換 u_long htonl(u_long hostlong); u_short htons(u_short hostshort); u_long ntohl(u_long netlong); u_short ntohs(u_short netshort);

Naming: inet_aton()‏ (don’t use!) int inet_aton (const char *cp, struct in_addr *inp); アドレスを表す文字列を, ネットワークバイト順序のバイナリ値へ 「127.0.0.1 」という文字列は人間 には分かりやすいが,コンピュータには分かりにくい 返り値は, 指定したアドレスが正当ならば0以外,不当なら0. 仲間 inet_ntoa()‏

“Modern” naming getaddrinfo() See: Gilligan et al., RFC 2553 Metz, “Protocol Independence...,” FreeNix 2000 Yoshifuji et al., “Linux IPv6 Networking,” Linux Symposium 2003 More next week, when we start clients

実習/課題:TCP-echoクライアント作成 IP address: 2001:200:0:8801:20c:29ff:fe27:6c98 Port : 12345 telnet! 次ページに必要な関数・構造体の説明あり

Important Structure #include<netinet/in.h> struct sockaddr_in{ u_char sin_len; /*IP addressのサイ ズ*/ u_char sin_family; /*AF_INET etc*/ u_short sin_port; /*port num*/ struct in_addr sin_addr; /*IP address*/ char sin_zero[8]; /*padding*/ }

Important functions socket bind sendto recvfrom UDP client UDP Server Data (request)‏ sendto()‏ recvfrom()‏ Data (reply)‏

socket int socket(int domain, int type, int protocol); (例)‏ int sd; sd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)‏        AF_UNIX , SOCK_STREAM,IPPROTO_TCP SOCK_RAW,IPPROTO_ICMP

bind int bind(int sockfd,struct sockaddr *addr,int addrlen); (例)‏ struct sockaddr_in cl_addr; memset((void *)&cl_addr, 0, sizeof(cl_addr)); cl_addr.sin_family = AF_INET; cl_addr.sin_port = htons(0); cl_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* local host*/ bind(sd,(struct sockaddr *)&cl_addr, sizeof(cl_addr))‏

Example of Old-Style Code for filling in sockaddr struct sockaddr_in sv_addr; memset((void *)&sv_addr, 0, sizeof(sv_addr)); sv_addr.sin_family = AF_INET; sv_addr.sin_port = htons(?????); inet_aton(?????, &sv_addr.sin_addr);

Using sendto() ssize_t sendto(int s, const void *msg, size_t len, int flags, const struct sockaddr *to, int tolen); (例) if (sendto(sd, (char *)&msg, sizeof(msg), 0 , (struct sockaddr *)&sv_addr, sizeof(sv_addr)) < 0) { perror("sendto"); exit(-1); }

Using recvfrom() ssize_t recvfrom() (int s, void *buf, size_t len, int flags, struct sockaddr *from, int *fromlen); (例)‏ recvlen = recvfrom(sd, (void *)buf, 1024, 0, (struct sockaddr *)&sv_addr, &svadlen);

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #define BUFMAX 1024 int main(int argc, char *argv[]){ int sd; int cc, svadlen; char buf[BUFMAX] char rmsg[BUFMAX]; struct sockaddr_in cl_addr, sv_addr; /* socketの作成 */ ???? /* socketに名前をつける */ /* サーバのソケットアドレスの設定 */ /* 処理ルーチン(メッセージの送信,受信) */ return 0; }

今日の目標

Homework Create your own TCP “Success!” message server.

コンピュータ・プロトコル 通信の手順をきめた約束事 通信規約と訳される 例: IP、HTTP、TCP、FTP、UDP、ICMP、etc… それぞれ対応しているプロトコルが違うとお互い に通信できない

同じ決まりで通信するということ 相手が英語,自分が日本語で 話しても会話は成立しない 電話では始めに 「もしもし,xx です」 1) 受話器を上げる 相手が英語,自分が日本語で 話しても会話は成立しない 電話では始めに 「もしもし,xx です」 コンピュータの世界でも同じ UNIX-Windows間の通信 無線-有線間の通信 2) 電話番号を入力 5) 会話する 6) どちらかが受話器を置く 7) 回線が切れる 3) 着信を通知する 4) 受話器を上げる 電話の例

階層化の特徴 責任範囲(役割)の規定,限定 各階層が独立 スケーラビリティ 新しい技術への柔軟性 階層化していないと・・・ 上位のプロトコルは,自分のすぐ下のプロトコルの使い方(イン ターフェース)さえ知っていれば,それより下で何が起きている かをまったく気にする必要がない 階層毎に共通のインターフェイスを定義 スケーラビリティ 処理を各層に分散できる 新しい技術への柔軟性 同一レベルの階層同士を交換出来る 新しく技術が開発された部分だけ交換すれば進化できる ISDN→ADSL→FTTH,IPv4→IPv6 階層化していないと・・・ 規格が変わるとシステムすべてを更新する必要がある 41