1 / 42

Windows Network Programming

Windows Network Programming. 中京大学 情報理工学部 情報システム工学科 H 107002 秋田大輔. 目次. ネットワークとプロトコル Winsock 課題. プロトコルとは. ネットワークで通信を行うときの約束事   コンピュータ同士が正しく通信するために必要 例:電話のプロトコル 自分側 相手側. 受話器を取り、相手の番号をダイヤル. 受話器のベルが鳴る. 呼び出し音がとまる. 受話器を取る. 通話. 受話器を置く. 受話器を置く. OSI基本参照モデル. データリンク層・物理層. 物理層

walker
Download Presentation

Windows Network Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Windows Network Programming 中京大学 情報理工学部 情報システム工学科 H107002 秋田大輔

  2. 目次 • ネットワークとプロトコル • Winsock • 課題

  3. プロトコルとは • ネットワークで通信を行うときの約束事   コンピュータ同士が正しく通信するために必要 例:電話のプロトコル 自分側相手側 受話器を取り、相手の番号をダイヤル 受話器のベルが鳴る 呼び出し音がとまる 受話器を取る 通話 受話器を置く 受話器を置く

  4. OSI基本参照モデル

  5. データリンク層・物理層 • 物理層 • デジタルデータを電圧に変換し、機器へ送る • データリンク層 • ネットワーク上で繋がれた機器同士の通信方式を定める • 電気信号の誤り訂正や、再送信要求、フレームの判別などを行う

  6. ネットワーク層 • 経路の選択、宛先の管理 • 実際にパケットを送るのはココ • 同じネットワークだけでなく、異なるネットワーク媒体上に接続されているコンピュータ間でも通信を行えるようにする • ⇒IP(Internet Protocol) • ネットワークに参加している機器のアドレス付や経路選択を行うプロトコル。

  7. IPアドレス • 通信を行う際に、宛先を判別するために使う • MACアドレス(物理アドレス) • Ethernetにある固有番号 • カード間での送受信はこれを用いる

  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クラス • ネットワーク部8bit、ホスト部24bit • 0-から始まる • Bクラス • ネットワーク部16bit、ホスト部24bit • 10-から始まる 0 2^24=1600万 1 0 2^16=65536

  11. Cクラス • ネットワーク部24bit、ホスト部8bit • 110-で始まる • Dクラス • ネットワーク部32bit、ホスト部0bit • IPマルチキャスト専用 • ホストアドレスは無い 1 1 0 2^8=256 1 1 1 0

  12. クラスE • 将来のために予約されている • 1111-で始まる • IPアドレスの例外 • ホストアドレスが全て1 • ⇒ブロードキャストアドレスとして使われる • ホストアドレスが全て0 • ⇒IPアドレスがわからない時に使われる • この二つはホストアドレスとして使えない

  13. サブネットマスク • IPアドレスのうち、何bitをネットワークアドレスに割り振るかを定義する32bitの数値。 • 例えばサブネットマスクが2進数で  11111111111111111111111100000000 ならば、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        交換局 中継局      交換局 常に一定の帯域幅が保証されるが、相応のコストがかかる

  20. パケット交換方式 • データをパケット(小さなデータ)に分割して通信を行う • 一部で障害が発生しても、経路変更が可能 • あらかじめ回路を確立しておく必要がないため • 回路交換方式に比べてネットワークを有効に利用できるのでコスト的に有利になる可能性が高い A                         B

  21. プレゼンテーション層 • ネットワーク上のアプリケーション間で意味を統一するため、文字コードなどのデータの表現形式を規定変換する • コンピュータによって対応する表現形式が違うため • データの暗号化や圧縮などを行う機能を提供する

  22. アプリケーション層 • ネットワークを使ったサービスを他の人やプログラムに提供する • メッセージの転送、Webへのアクセス手順など用途に応じて様々なプロトコルがある

  23. ちょっと休憩 • ゼミのノートPCを、ネットに接続する方法は? この機会に是非覚えておこう!!

  24. 接続方法 • 1.コマンドプロンプトを起動 • 2.telnet 10.0.255.254 259 • うまくいかない場合 • 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. プログラムを組んでみよう • 今回はC言語を用いる • 『サーバ側』・『クライアント側』で二つのプログラムが必要 • サーバプログラムのホスト名 or IPアドレスを、クライアントプログラムでわかるようにする必要がある #inlcude(winsock2.h)を追加する

  29. 大まかな流れ • クライアント側 • Winsockの初期化 • ソケットを作る • 接続先の設定 • 接続できたら通信開始 • 終了したら接続を切断

  30. 大まかな流れ • サーバ側 • ソケットを作る • 接続待ちをするIPアドレスとポート番号の設定 • ソケットにアドレス情報を結びつける • 接続を待つ • クライアントから要求が来たら受付 • 通信開始 • ソケットって? • IPアドレスとポート番号を組み合わせたネットワークアドレス

  31. Winsockの初期化・終了 • まず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 • 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()関数 • 文字列で表現された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(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()関数 • send( ソケット , 送信するデータへのポインタ , 送信するデータの長さ , 0 ); • 受信 • memset()関数 • memset(バッファのポインタ,初期化に使う文字, 初期化するバイト数); • recv()関数 • recv( ソケット , 受信するバッファへのポインタ , 受信するデータの長さ , 0 );

  41. 課題 • 1.配布するサンプルプログラムを実際に打ってみて    動作を確認(面倒だけど) • 2.五回連続で、クライアントから要求を出せるようにする • 3.「stop」とクライアントが入力したら、接続を解除できる    ように改良 • 4.二つの整数を入力すると、サーバ側で和の計算を   行って計算結果をクライアントに返し、クライアント側で    計算結果を表示するプログラムを作成 • 5.自由課題 • これまでの課題の改良(例外処理等)でもいいし、一から   作ってもいい • どんなプログラムなのかの簡単な説明もtxtファイルで一緒に 提出してください

  42. 注意事項 • 課題2・3でまとめて一つ、課題4、課題5のサーバ側   クライアント側のファイルをフォルダに入れて提出 • 作成したプログラムファイルは、学籍番号・名前をつけたフォルダの中にまとめる • ファイル名は分かりやすいものをつける • 全部とまでは言わないが、プログラムに説明のコメントをつける

More Related