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

Slides:



Advertisements
Similar presentations
TCP/IP によるチャットプログラ ム 薄井 秀晃. 基礎知識編 TCP/IP とは? IP とは・・・ Internet Protocol の略称であり通信方法の技術的なルールで あり、実際にデータを送受信する前にデータを小さなデータ に分割し、それに発信元と受信先の IP アドレスを付加させて.
Advertisements

第1章 ネットワークとコミュニケーション 第2節 ネットワークのしくみ 2 ネットワークを支える技術 (教科書 p36 ~ p37) 今日の用語  モデム (modulator/demodulator:modem)  IP アドレス (internet protocol address)  ドメインネーム.
情報基礎A 情報科学研究科 徳山 豪.
山梨大学 伊 藤 洋 99/06/30 インターネット入門 総合科目V 山梨大学 伊 藤  洋
インターネットのプロトコル階層 ネットワーク層(IPアドレス)
第1回.
前回の課題 IPv6アドレス IP ARP ICMP NAT インターネット層 2003年12月4日 情報ネットワーク論 新村太郎.
第14回 今日の目標 §4.3 情報セキュリティー 情報化社会の特徴を社会的な面から概観する 情報に関わる危険の要因を示す
ネットワークプログラミング 第7回「ネットワークとプログラミング(2)」
ネットワーク層.
CS-B3 ネットワークプログラミング 峰野博史
TCP (Transmission Control Protocol)
「コンピュータと情報システム」 07章 インターネットとセキュリティ
30分でわかるTCP/IPの基礎 ~インターネットの標準プロトコル~ 所属: 法政大学 情報科学研究科 馬研究室 氏名: 川島友美
Windows Network Programming
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
インターネット メールサーバ DNSサーバ WWWサーバ ファイアウォール/プロキシサーバ クライアント.
TCPソケットプログラミング ソケットプログラミング TCP-echoのデータ通信手順
第13回 今日の目標 §4.3 情報セキュリティー 情報化社会の特徴を社会的な面から概観する 情報に関わる危険の要因を示す
HTTPプロトコルとJSP (1) データベース論 第3回.
トランスポート層.
Telnet, rlogin などの仮想端末 ftp などのファイル転送 rpc, nfs
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満
コンテンツ配信 エンコード (符号化) CBR (Constant Bit Rate) VBR (Variable Bit Rate)
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
第5回ネットワークプログラミング 中村 修.
第2章 第1節 情報通信の仕組み 1 ネットワークの仕組み 2 通信プロトコル 3 認証と情報の保護
イーサネット.
インターネット概論第3回 kudo担当分.
情報検索概説II(99秋) 第3回 1999/10/21 インターネットの仕組み(2).
総合講義B:インターネット社会の安全性 第6回 ネットワークの基盤技術
Linux リテラシ 2006 第4回 ネットワーク CIS RAT.
ネットワークプログラミング 中村 修.
IPv6 ネットワークにおける エニーキャスト通信実現のための プロトコル設計と実装
第11章 UDPユーザ・データグラム・プロトコル
TCP/UDP プロセス間の通信のためのプロトコル TCP:信頼性高、処理時間大 UDP:信頼性低、処理時間小 ftp SMTP HTTP
第11回ネットワークプログラミング 中村 修.
第7回ネットワークプログラミング 中村 修.
UDPエコーサーバ UDP-echoサーバのプログラムモデル(Cプログラム) サーバで利用するソケット関数(Cプログラム)
インターネットの基礎知識 その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.
スキルチェック Network編.
TCP/IPとプロセス間通信 2007年1月12日 海谷 治彦.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
Network Programming in C Lecture 6: Network Programming (1) ネットワークプログラミング 第6回「ネットワークとプログラミング(1)」 2010年秋学期 Rodney Van Meter.
最低限インターネット ネットワークにつなぎましょ!
情報実験 第五回 最低限 internet ~ネットワークの仕組みを知ろう~
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満
4.3 IPとルーティングテーブル 国際産業情報学科 2年 大竹 雅子.
ネットワーク・プログラミング TCPサーバ.
TCP/IPの通信手順 (tcpdump)
第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール
プロトコル番号 長野 英彦.
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

階層化構造に直してみると。。 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

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

イメージを明確にすると… クライアント プロセス サーバ プロセス 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

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

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

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]; };

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(“203.178.143.1”); /* IPアドレス*/ Sin.sin_port = htons(1234); /* ポート番号 */ Connect(s, (struct sockaddr *)&sin, sizeof(sin)); 成功なら0, エラーなら-1の返り値

ネットワーク・バイト・オーダ 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

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

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