Download presentation
Presentation is loading. Please wait.
1
Windows Network Programming
中京大学 情報理工学部 情報システム工学科 H107002 秋田大輔
2
目次 ネットワークとプロトコル Winsock 課題
3
プロトコルとは 例:電話のプロトコル ネットワークで通信を行うときの約束事 コンピュータ同士が正しく通信するために必要 自分側 相手側
コンピュータ同士が正しく通信するために必要 例:電話のプロトコル 自分側 相手側 受話器を取り、相手の番号をダイヤル 受話器のベルが鳴る 呼び出し音がとまる 受話器を取る 通話 受話器を置く 受話器を置く
4
OSI基本参照モデル OSI基本参照モデル ネットワーク・プロトコル ネットワーク機器 第7層 アプリケーション層
HTTP, SMTP, FTP 第6層 プレゼンテーション層 第5層 セション層 SSL 第4層 トランスポート層 TCP, UDP ゲートウェイ 第3層 ネットワーク層 IP, ICMP, ARP ルータ 第2層 データリンク層 ブリッジ 第1層 物理層 リピータ
5
データリンク層・物理層 物理層 デジタルデータを電圧に変換し、機器へ送る データリンク層 ネットワーク上で繋がれた機器同士の通信方式を定める
電気信号の誤り訂正や、再送信要求、フレームの判別などを行う
6
ネットワーク層 経路の選択、宛先の管理 実際にパケットを送るのはココ
同じネットワークだけでなく、異なるネットワーク媒体上に接続されているコンピュータ間でも通信を行えるようにする ⇒IP(Internet Protocol) ネットワークに参加している機器のアドレス付や経路選択を行うプロトコル。
7
通信を行う際に、宛先を判別するために使う MACアドレス(物理アドレス) Ethernetにある固有番号 カード間での送受信はこれを用いる
IPアドレス 通信を行う際に、宛先を判別するために使う MACアドレス(物理アドレス) Ethernetにある固有番号 カード間での送受信はこれを用いる IPアドレスの枯渇問題 IPv4 IPv6
8
IPに関するプロトコル ARP(Address Resolution Protocol)
IPアドレスからMACアドレスを求めるプロトコル ⇔RAPR(Reserve ARP) ICMP(Internet Control Message Protocol) IPのエラー・制御メッセージを転送する エラー通知や診断などの問い合わせ
9
IPアドレスについて IPアドレスはIPv4プロトコルに基づく32bitのアドレス空間 しかし、最近IPアドレスの枯渇問題が浮上している
ネットワーク部+ホスト部で構成されている A~Eの5つのアドレスクラスに分けられている 10101100.00010000.11111110.00000001 172 . 16 . 254 . 1
10
IPアドレスのクラス Aクラス 0-から始まる Bクラス 10-から始まる ネットワーク部8bit、ホスト部24bit
2^24=1600万 1 0 2^16=65536
11
Cクラス Dクラス IPマルチキャスト専用 ホストアドレスは無い ネットワーク部24bit、ホスト部8bit
110-で始まる Dクラス ネットワーク部32bit、ホスト部0bit IPマルチキャスト専用 ホストアドレスは無い 1 1 0 2^8=256 1 1 1 0
12
クラスE IPアドレスの例外 この二つはホストアドレスとして使えない 将来のために予約されている 1111-で始まる ホストアドレスが全て1
⇒ブロードキャストアドレスとして使われる ホストアドレスが全て0 ⇒IPアドレスがわからない時に使われる この二つはホストアドレスとして使えない
13
サブネットマスク IPアドレスのうち、何bitをネットワークアドレスに割り振るかを定義する32bitの数値。
例えばサブネットマスクが2進数で 11111111 11111111 11111111 00000000 ならば、IPアドレスのうち上位24ビットがネットワークアドレス、下位8ビットがホストアドレスである
14
サブネットワーク ネットワークをサブネットマスクによって細かく分けた内の1つのネットワーク
15
トランスポート層 通信を行うプログラム間で使用する仮想的な回線の提供 通信相手にデータが確実に届いたかどうかの確認、再送信などの処理
データを確実に相手に届ける役割を担う
16
TCPとUDPの違い 低速だが、データ転送の信頼性を確保している TCP(Transmission Control Protocol)
コネクション型通信 相手との接続を確立したかどうかを確認してから通信を行う 届かなければ再送信を自動で行う 低速だが、データ転送の信頼性を確保している
17
TCPとUDPの違い 確実にデータが届くという保証はないが高速 UDP(User Datagram Protocol)
コネクションレス型通信 相手との通信を確立せずに通信を開始 データが抜け落ちても再送は行わない 使用例 skype、ストリーム形式での配信など 確実にデータが届くという保証はないが高速
18
セション層 セション(仮想的な回線の開始~終了間)の管理を行い、送受信の同期をとる機能を提供する
効率的にデータを送るための送信方法を決める、経路の確立・解放も(実際に行うのはトランスポート層)
19
送信方法の例 回線交換方式 A B 回線を設定し、占有して通信を行う 常に一定の帯域幅が保証されるが、相応のコストがかかる
A B 交換局 中継局 交換局 常に一定の帯域幅が保証されるが、相応のコストがかかる
20
パケット交換方式 データをパケット(小さなデータ)に分割して通信を行う 一部で障害が発生しても、経路変更が可能
あらかじめ回路を確立しておく必要がないため 回路交換方式に比べてネットワークを有効に利用できるのでコスト的に有利になる可能性が高い A B
21
プレゼンテーション層 ネットワーク上のアプリケーション間で意味を統一するため、文字コードなどのデータの表現形式を規定変換する
コンピュータによって対応する表現形式が違うため データの暗号化や圧縮などを行う機能を提供する
22
アプリケーション層 ネットワークを使ったサービスを他の人やプログラムに提供する
メッセージの転送、Webへのアクセス手順など用途に応じて様々なプロトコルがある
23
ちょっと休憩 ゼミのノートPCを、ネットに接続する方法は? この機会に是非覚えておこう!!
24
接続方法 1.コマンドプロンプトを起動 2.telnet 10.0.255.254 259 3.選択肢に1 4.学籍番号とパスワードを入力
うまくいかない場合 ipconfig/release でIPアドレスを解放 IPアドレスが重なっている場合があるため ipconfig/renew IPアドレスをDHCPで更新 3.選択肢に1 4.学籍番号とパスワードを入力
25
DHCPって? Dynamic Host Configuration Protocol インターネットに接続するコンピュータに
IPアドレスなどの情報を自動で割り当てる 通信が終わると回収される 利用者にとっては使いやすく 管理者にとっては管理しやすく
26
コマンドプロンプトで用いるネットワーク系統の命令
ipconfig TCP/IPに関する設定情報の表示 ネットワーク構成の確認 ipconfig(-all)だとより詳細に表示される netstat TCP/IPにおけるネットワークの通信状況を確認 netstat –a 有効なコネクションと、接続できるポートを全て表示する netstat –e イーサネット上にあるインタフェース情報を表示する アクセス制御はCSMA/CDが使われる netstat –n IP アドレスとポート番号を名前ではなく数字で表す
27
WinSock WindowsでTCP/IPの機能を備えたソフトウェアを開発するために用いるAPI Windows でネットワークを利用した
通信を行うプログラムが書ける
28
#inlcude(winsock2.h)を追加する
プログラムを組んでみよう 今回はC言語を用いる 『サーバ側』・『クライアント側』で二つのプログラムが必要 サーバプログラムのホスト名 or IPアドレスを、クライアントプログラムでわかるようにする必要がある #inlcude(winsock2.h)を追加する
29
大まかな流れ クライアント側 Winsockの初期化 ソケットを作る 接続先の設定 接続できたら通信開始 終了したら接続を切断
30
大まかな流れ サーバ側 ソケットって? ソケットを作る 接続待ちをするIPアドレスとポート番号の設定 ソケットにアドレス情報を結びつける
接続を待つ クライアントから要求が来たら受付 通信開始 ソケットって? IPアドレスとポート番号を組み合わせたネットワークアドレス
31
Winsockの初期化・終了 まずWSADATA型で変数を宣言 WSAStartup(MAKEWORD(2,0),&wsaData);
WSADATA wsaData; WSAStartup(MAKEWORD(2,0),&wsaData); WSAStartup(Winsockのバージョン, 初期化した状態を入れるための変数); WSACleanup(); Winsock機能の終了
32
ソケットの作成・破棄 Winsockでソケットは”SOCKET”という変数で表す
全ての通信はSocket()関数が返すSOCKET変数を使う まず変数の宣言 SOCKET sock; Socket関数 socket(アドレスファミリ,ソケットタイプ,プロトコル): アドレスファミリ:ネットワークアドレスの種類を表すもの INET=インターネット 作成 sock = socket(AF_INET,SOCK_STREAM,0); 破棄 closesocket()関数 closesocket( 破棄するソケット);
33
ソケットの設定 接続先のIPアドレス・ポート番号を指定 INADDR_ANY INADDR_NONE 相手を特に指定しない
サーバー側でよく用いられる(通信相手を探す時) INADDR_NONE IPアドレスが存在しない場合 クライアント側でよく用いられる(サーバを探してエラーが発生した時)
34
sockaddr_in構造体 ネットワークプログラミングを行う上で基本となる構造体
接続先のホストや自ホストのIPアドレス・ポート番号を指定するときに用いる 使用例(クライアント側) 接続先(サーバ)を指定 server.sin_family = AF_INET; server.sin_port = htons(123456); server.sin_addr.S_un.S_addr = inet_addr(“127.0.0.1");
35
ソケットの設定 接続先のアドレス情報を構造体にまとめる inet_addr()関数 htons()関数
文字列で表現されたIPアドレスを整数に変換 server.sin_addr.S_un.S_addr = inet_addr(“127.0.0.1”); htons()関数 ポート番号をネットワークバイトオーダーに変換する server.sin_port = htons(12345);
36
サーバに接続する connect()関数 こんな感じ サーバに接続要求を送る
connect(ソケット,接続先アドレス情報が入っている sockaddr_in構造体をsockaddr構造体にキャスト したもの,sockaddr_in構造体の大きさ); sockaddr構造体 ソケットプログラミングを行う上で基本となる構造体 こんな感じ connect(sock, (struct sockaddr*)&server, sizeof(server));
37
ソケットをアドレスとポートに結びつける(サーバ側)
bind()関数 bind(ソケット,アドレス入りのsockaddr_in構造体を sockaddr構造体にキャストしたもの, sockaddr_in構造体の大きさ); こんな感じ bind(sock, (struct sockaddr*)&addr, sizeof(addr));
38
接続リクエストの受付 listen()関数 こんな感じ ソケットを接続待ち状態にする listen( ソケット , 待機状態のリクエストが
listen(sock,10); listen( ソケット , 待機状態のリクエストが 格納されるキューの大きさ); こんな感じ if(!listen(sock,10)){ printf("listenに失敗"); exit(1); }
39
クライアントからの接続を確立する accept()関数 こんな感じ まずは接続先のアドレス情報の大きさを取得
len = sizeof(接続先のアドレス情報) accept(ソケット , 接続先のアドレス情報 , 接続先アドレス情報の大きさ); こんな感じ sock2 = accept(sock1, (struct sockaddr*)&client, &len);
40
データの送受信 送信 受信 send()関数 memset()関数 初期化するバイト数); recv()関数
送信するデータの長さ , 0 ); 受信 memset()関数 memset(バッファのポインタ,初期化に使う文字, 初期化するバイト数); recv()関数 recv( ソケット , 受信するバッファへのポインタ , 受信するデータの長さ , 0 );
41
課題 1.配布するサンプルプログラムを実際に打ってみて 動作を確認(面倒だけど) 2.五回連続で、クライアントから要求を出せるようにする
動作を確認(面倒だけど) 2.五回連続で、クライアントから要求を出せるようにする 3.「stop」とクライアントが入力したら、接続を解除できる ように改良 4.二つの整数を入力すると、サーバ側で和の計算を 行って計算結果をクライアントに返し、クライアント側で 計算結果を表示するプログラムを作成 5.自由課題 これまでの課題の改良(例外処理等)でもいいし、一から 作ってもいい どんなプログラムなのかの簡単な説明もtxtファイルで一緒に 提出してください
42
注意事項 課題2・3でまとめて一つ、課題4、課題5のサーバ側 クライアント側のファイルをフォルダに入れて提出
クライアント側のファイルをフォルダに入れて提出 作成したプログラムファイルは、学籍番号・名前をつけたフォルダの中にまとめる ファイル名は分かりやすいものをつける 全部とまでは言わないが、プログラムに説明のコメントをつける
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.