第5回ネットワークプログラミング 中村 修.

Slides:



Advertisements
Similar presentations
Step.5 パケットダンプ Wiresharkでパケットをキャプチャする PC 1 PC 2 PC 3 PC 4 ネットワーク
Advertisements

第1回.
システムコール 低水準入力 ファイルディスクリプタ ソケット
前回の課題 IPv6アドレス IP ARP ICMP NAT インターネット層 2003年12月4日 情報ネットワーク論 新村太郎.
ネットワークプログラミング 第7回「ネットワークとプログラミング(2)」
ネットワーク層.
システムプログラミング 第13回 情報工学科 篠埜 功.
CS-B3 ネットワークプログラミング 峰野博史
TCP (Transmission Control Protocol)
「コンピュータと情報システム」 07章 インターネットとセキュリティ
ネットワークプログラミング (CS-B3 選択必修)
Windows Network Programming
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
TCPソケットプログラミング ソケットプログラミング TCP-echoのデータ通信手順
Copyright Yumiko OHTAKE
トランスポート層.
Telnet, rlogin などの仮想端末 ftp などのファイル転送 rpc, nfs
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満
コンテンツ配信 エンコード (符号化) CBR (Constant Bit Rate) VBR (Variable Bit Rate)
ネットワーク機器接続 2SK 情報機器工学.
ま と め と 補 足 ネットワークシステムⅠ 第15回.
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
総合講義B:インターネット社会の安全性 第6回 ネットワークの基盤技術
ネットワークプログラミング C言語 第1回「イントロダクション」
ネットワークプログラミング 中村 修.
IPv6 ネットワークにおける エニーキャスト通信実現のための プロトコル設計と実装
第11章 UDPユーザ・データグラム・プロトコル
TCP/UDP プロセス間の通信のためのプロトコル TCP:信頼性高、処理時間大 UDP:信頼性低、処理時間小 ftp SMTP HTTP
第11回ネットワークプログラミング 中村 修.
システムプログラミング 第13回 プロセス間通信(続き) 情報工学科 篠埜 功.
第7回ネットワークプログラミング 中村 修.
UDPエコーサーバ UDP-echoサーバのプログラムモデル(Cプログラム) サーバで利用するソケット関数(Cプログラム)
システムプログラミング 第13回 情報工学科 篠埜 功.
インターネットの基礎知識 その3 ~TCP・UDP層編~
イーサネットフレームの構造とデータリンク層アドレス
ソケットプログラム(TCP,UDP) EasyChat開発
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 ソケットプログラミング 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
ネットワーク技術II 第9.1課 TCP/IPプロトコルスイート
ソケットプログラム(TCP,UDP) EasyChat開発2
ネットワークの基礎知識 電子制御設計製図Ⅰ   2014年5月2日 Ⅲ限目.
インターネットにおける真に プライベートなネットワークの構築
ユビキタスシステムアーキテクチャ 第5回 ネットワークプログラミングの基礎
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
TCP/IP入門          櫻井美帆          蟻川朋未          服部力三.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
TCP/IPとプロセス間通信 2007年1月12日 海谷 治彦.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
Network Programming in C Lecture 6: Network Programming (1) ネットワークプログラミング 第6回「ネットワークとプログラミング(1)」 2010年秋学期 Rodney Van Meter.
最低限インターネット ネットワークにつなぎましょ!
情報実験 第五回 最低限 internet ~ネットワークの仕組みを知ろう~
OSI7層に関係する機器、仕様、機能など 物理層 データリンク層 ネットワーク層 トランスポート層 セッション層 プレゼンテーション層
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満
ネットワーク・プログラミング TCPサーバ.
ネットワーク・プログラミング 1対多のプロセス間通信.
アプリケーションゲートウェイ実験 2001.10.5 鬼塚 優.
ネットワーク・プログラミング マルチタスク.
SMTPプロトコル 2001年8月7日 龍 浩志.
第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール
ポートスキャン実習 2002年9月19日 修士1年 兼子 譲 牧之内研究室「インターネット実習」Webページ
プロトコル番号 長野 英彦.
ネットワークシステム ネットワークシステム概要.
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
Presentation transcript:

第5回ネットワークプログラミング 中村 修

今日のお題 講義 ---------休憩-------------------------------- 7 layer modelのおさらい TCPとUDP ネットワークプログラミング基本手順 練習1:echo clientを作ろう ---------休憩-------------------------------- 実習:UDPでデータを送る/受け取る udpで echo serverを作ろう

インターネットの階層モデル TCP TCP IP IP IP データリンク データリンク 物理 物理 物理 アプリケーション

OSI参照モデルと インターネットの階層構造の関係 セッション トランスポート アプリケーション プレゼンテーション ネットワーク データリンク 物理 アプリケーション TCP UDP IP Network Interface 物理

階層型プロトコルでのデータ送受信 送信側 受信側 各層がそれぞれ必要な情報を付加して下層へ渡す 各層がそれぞれ情報をもとに処理を行い、その使った情報を取り除いて上層へ渡す 各層の 情報 アプリケーション アプリケーション データ データ TCP UDP TCP UDP IP IP Network Interface Network Interface 物理 物理 送信ノード 受信ノード

プロトコル 2つの機器間で,通信の手順を決めた約束ごと IP,TCP,HTTP,FTP コンピュータは「決まり」がないと通信できない

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

クライアント・サーバモデル ネットワークを介したサービスにおける通信モデル サーバ クライアント Client Server サービス要求 受動的にサービス提供する側、待っててくれる クライアント 能動的にサービス提供を促す側、接続しに行く Client Server サービス要求 サービス提供

ポートとソケット ポート トランスポート層のアクセスポイント TCP/UDP毎に持っている ソケット プロセスとポートを繋ぐアダプタ

ソケット(Socket) プロセス間通信を行う為のデータの出入り口 プロセスからはファイルディスクプリタを用いてアクセス プロセスにとってはプロセス間通信もファイル入出力も同じインターフェイス プロセス プロセス socket socket

socket()システムコール int socket(int family, int type, int proto) AF_INET IPv4プロトコル AF_INET6 IPv6プロトコル AF_LOCAL UNIX Domain Socket AF_ROUTE 経路制御ソケット Typeにはソケットのタイプ(以下のどれか) SOCK_STREAM ストリームソケット SOCK_DGRAM データグラムソケット SOCK_RAW rawソケット Protoにはrawソケット以外、通常0

socket()システムコール 返り値 実際のコードでは… 成功: ソケットディスクリプタが返る 失敗: -1が返る ソケットディスクリプタはファイルディスクリプタの友達 実際のコードでは… 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 LocalAdddress 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.

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

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

Datagram example2 (UDP) Server socket() Client bind() socket() recvfrom() bind() Block until Data from client connect() Data (request) send () Process request Data (reply) sendto() recv ()

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

sockaddr構造体 ソケットの情報を一般化した形 ソケットを使った通信のためのテンプレート 利用するプロトコルに依存しない 共通: 長さ・プロトコルファミリ(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++); }

inet_addr() in_addr_t inet_addr(const char *strptr); アドレスを表す文字列を, ネットワークバイト順序のバイナリ値へ 「127.0.0.1 」という文字列は人間には分かりやすいが,コンピュータには分かりにくい 仲間 inet_aton() inet_ntoa()

ネットワーク・バイト・オーダ 1 2 2 1 1 2 3 4 4 3 2 1 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);

練習1:echoクライアント作成 echoサーバは以下  hi.sfc.wide.ad.jp port 7番

必要な構造体 #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*/ }

必要な関数 socket bind sendto recvfrom

socket int socket(int domain, int type, int protocol); (例) 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 server; memset((void *)&server, 0, sizeof(server)); server.sin_family = AF_INET; server.sin_port = htons(7); server.sin_addr.s_addr = INADDR_ANY; /* local host*/ bind(sd,(struct sockaddr *)&server, sizeof(server))

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

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 *)&client, &clientlen);

実習 echoサーバを作ろう。 基本的にechoクライアントと同じ sendto,recvfromの順番が逆