Presentation is loading. Please wait.

Presentation is loading. Please wait.

システムコール 低水準入力 ファイルディスクリプタ ソケット

Similar presentations


Presentation on theme: "システムコール 低水準入力 ファイルディスクリプタ ソケット"— Presentation transcript:

1 システムコール 低水準入力 ファイルディスクリプタ ソケット
ネットワークプログラミング 第4回 システムコール 低水準入力 ファイルディスクリプタ ソケット

2 ライブラリとシステムコール ライブラリ システムコール 便利な関数 オペレーティングシステムに必ずしも要求を行わない
ライブラリを利用すると、ユーザが直接オペレーションシステムに要求しなくても勝手にやってくれる。 システムコール オペレーティングシステムにユーザが直接要求を行う システムコールの数はあまり多くない

3 システムコール どんなことができる? 返り値 入出力やファイルシステムへの低水準な操作 プロセスに対するさまざまな制御 ネットワークへの対応
ライブラリでは手のとどかない部分を操作できる。 返り値 システムコールは、エラーが生じると-1を返す エラーがない場合は整数値か0を返す 予約された外部参照変数 errnoには、どのエラーが発生したかを示す番号がセットされる(error.h)

4 低水準入力 ライブラリを通さず、直接ユーザがファイルやデバイスの操作を行う
読み込み、書き込み、etc … UNIXではファイル、デバイス、ネットワーク、プロセスなどあらゆるものがファイルとして抽象化されている 低水準入力で、ファイルとして抽象化されたあらゆる対象を操作できる

5 ファイルディスクリプタ プロセスが外の世界と通信する為のデータの出入り口
ファイルやデバイスの操作、他プロセスとの通信など、外の世界とのIO全てがファイルディスクリプタを経由 プロセスから見ると整数値 ファイル プロセス ファイル 1 0:標準入力 1:標準出力 2:標準エラー出力 デバイス 2

6 ファイルディスクリプタの操作 Open() Close()
Openシステムコールを使い、ユーザはファイルやデバイスをプロセスから利用可能にする。Openは戻り値に整数値(ファイルディスクリプタを返す) Ex. fd = open(“naisho.txt”, O_RDONLY)         /* naisho.txt を読み出し専用で開く */ Close() ファイルディスクリプタのクローズ Ex. close(fd) /*fdは過去にopen したファイルディスクリプタ*/

7 読み書き read(int fd, void *buf, size_t nbytes) fd からbuf へ nbytes だけ読み込む
Buf は事前にmallocしておく 返り値は、実際に読み出したバイト数 write(int fd, void *buf, size_t nbytes) fd へbuf から nbyteだけ書き込む 返り値は、実際に書き込んだバイト数

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

9 階層化構造 MACアドレス、IPアドレス ポート TCP/UDP
ネットワークの話 階層化構造 MACアドレス、IPアドレス ポート TCP/UDP

10 メッセージを伝えるには 思ったことを伝えるには なぜ、伝わるか 言葉や、身振り手振りで伝える 何かを媒介して相手に伝える 言葉 身振り手振り
発した言葉、書かれた記事の意味と同じ意味を相手も知っている 身振り手振り 相手の動作がどんな意味を持つか、コンテクストやコードから推測 「コミュニケーションのモデル」を「メッセージを伝えるには」とかそんな感じのタイトルに あんまり「モデル」という言葉を不用意に使いたくない。吟味して使いたい。

11 役割分担: 階層モデル 発話者 受話者 意思の伝達 意思の言葉への変換 言語の伝達 空気 物理的な伝達

12 コンピュータネットワークにおける階層化モデル
OSI参照7層モデル コンピュータネットワークモデルの基礎 コンピュータ同士がコミュニケーションする場合も階層がある。 人間の脳⇔脳、口⇔耳と同じ 各層は上下の層とだけ関係を持つ 脳は口や耳と関係を持つが空気とは直接関係しない 自分の一つ上と一つ下以外とは話をしない

13 OSI参照7層モデル コンピュータネットワークのアーキテクチャを論理的に整理 プロトコル設計の物差し Physical Datalink
Network Transport Session Presentation Application Physical Datalink Network Transport Session Presentation Application

14 OSI参照モデルと インターネットの階層構造の関係
Application Application Presentation Session Transport TCP UDP Network IP Datalink NIC, データリンクプロトコル Physical Physical

15 インターネットの階層モデル IPによってエンドエンドの通信が確立 TCP/UDPによって通信の性質を選択
Application Application Application Application TCP TCP TCP TCP IP IP IP IP Datalink Datalink Datalink Datalink Physical Physical Physical Physical

16 各層での識別子 各層ごとに識別子が存在する 各層は層毎に相手を識別している Physical IP TCP UDP Application
Network Interface IP TCP UDP Application ポート番号 IPアドレス MACアドレス

17 MACアドレス 通信機器が持つ識別子 NIC(Network Interface Card)が持っている
通信機器ごとにユニークなアドレスを持つ 固定で割り当てられる IEEEが管理、割り当て 00:90:99:1F:95:E3 NIC(Network Interface Card)が持っている

18 IPアドレス インターネット上のコンピュータの識別子 コミュニケーション相手の場所を指定できる 電話番号や住所に相当
IPv4では32bit、IPv6では128bit アドレス表記 IPv とか IPv :200:0:1000::1 とか 識別できるアドレスの数 IPv4 … 32bit …. 約43億個 IPv6 … 128bit …. 2^128個

19 ポート番号 サービスの識別子(0~65535) プロトコルごとに独立したポートを持つ コミュニケーションの相手を指定できる
Ex. TCPの53番とUDPの53番は別のサービス コミュニケーションの相手を指定できる 住所(IP address)に対する部屋番号に相当 コーポシュガーの“202号室” 電話 … 相手の呼び出し 「“りんご君”をお願いします。」 IPアドレスとポート番号の組で、コミュニケーションしたい相手を特定できる 誰かが使っているポートは、他のプロセスは使えない。

20 Wellknownポート 1~1023番 /etc/services あらかじめ予約されているポート Ssh 22番 telnet 23番
dns 番 http 番 /etc/services

21 telnet で遊ぶ telnet 相手先IPアドレス ポート番号
相手先の指定したポート番号を使っているアプリケーション(server)にTCPでコネクションが張れる。 SMTPサーバと話してみよう WEBサーバと話してみよう

22 トランスポートプロトコル UDP(User Datagram Protocol)
信頼性のないデータグラム型通信 Connectionless TCP(Transmission Control Protocol) 信頼性のあるストリーム型通信 Connection Oriented Virtual Circuit

23 UDP (User Datagram Protocol)
送信者は、パケットを順に送り出すだけ 受信側は、受け取ったパケットを受け取った順に上位層に渡すだけ 誤りが見つかっても、途中でパケットが消失しても再送信は行わない パケットの順序も気にしない

24 UDPを用いたサービス パケット損失率や伝播遅延の変動が少ない安定した通信路を想定 即時性、実時間性重視 NFS, TFTP, SNMP
DNS, 音声/動画ストリーミングアプリケーション

25 (Transmission Control Protocol)
TCP (Transmission Control Protocol) アプリケーション間に信頼性のある通信を提供 IPが提供する通信に信頼性を与える コネクション型通信 再送機能 エラー検出とエラー訂正 フロー制御 順序の再構成

26 TCPを用いたサービス データの信頼性を保証したい データが届く順番を確保したい HTTP、FTP、SMTP
コンピュータ同士が遠く離れていても大丈夫 データが届く順番を確保したい SSH、チャット

27 クライアント・サーバモデル サーバは特定のアドレスとポートで、クライアントが接続するのを待っている
クライアントが使うポートは、起動時に割り当てられる。 WWW Server IP address: Port: 80, TCP Client TCPの80番にアクセス

28 階層化構造に直してみると。。 www client www server dns server telnet server #53 #80
#2048 #23 transport layer UDP TCP UDP TCP network layer IP IP Datalink/ Physical layer Ethernet Ethernet

29 Socket Bind Socketのread/write
プログラミング Socket Bind Socketのread/write

30 イメージを明確にすると… クライアント プロセス サーバ プロセス Port X Port A Port B Port C ホストA
ソケット ソケット クライアント プロセス サーバ プロセス Port X Port A Port B Port C ホストA ホストB IP Address: xx.xx.xx.xx. IP Address: yy.yy.yy.yy

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

32 socket()システムコール 返り値 例 int fd; 成功: ソケットディスクリプタが返る 失敗: -1が返る
ソケットディスクリプタはファイルディスクリプタの友達 int fd; fd = socket(AF_INET, SOCK_STREAM, 0); 通信に利用するには、各ソケットに宛先IPアドレスやポート番号を結びつける必要がある

33 sockaddr_in構造体 ソケットの情報を格納 struct sockaddr_in { u_char sin_len;
u_char sin_family; /* AF_INET,AF_INET6…*/ u_short sin_port; /*相手先ポート番号 16bit */ struct in_addr sin_addr; /*相手先アドレス */ char sin_zero[8]; };

34 Connect()システムコール Int connect(int s, const struct sockaddr *name, socklen_t namelen); 第二引数で指すSockaddr構造体が通信先を特定 実際のコードの例 Struct sockaddr_in sin; Sin.sin_family = AF_INET /*プロトコルファミリー */ sin.sin_addr.s_addr = inet_addr(“ ”); /* IPアドレス*/ Sin.sin_port = htons(1234); /* ポート番号 */ Connect(s, (struct sockaddr *)&sin, sizeof(sin)); 成功なら0, エラーなら-1の返り値

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

36 ネットワーク・バイト・オーダ Inet_addr() ntohs()/ntohl() Short, longをホストのバイトオーダに変換
htons()/htonl() Short, longをネットワークバイトオーダに変換 Inet_addr() “ ”のような文字列をネットワークバイト・オーダーのlongに変換

37 今日の実習 catプログラムを作る Echoクライアントを作る Open, read, writeの習得 Socket, connect
Sockaddr_in構造体 ソケットへのread, write


Download ppt "システムコール 低水準入力 ファイルディスクリプタ ソケット"

Similar presentations


Ads by Google