Windows Network Programming

Slides:



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

TCP / IP の基礎 ネットワーク管理者入門. インターネットを支える技術 ISO の 7 階層プロトコルと TCP / IP の実装 階層機能関連する TCP / IP プロ トコル アプリケーション層電子メールやファイルの転送 といった、具体的なアプリ ケーションが使用する規約 TELNET.
イーサアドレスとはなにか? 情報塾( ) IPアドレスとの関係は? ARP,DHCP?
情報基礎A 情報科学研究科 徳山 豪.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
ネットワークと コミュニケーション技法 第7回 - インターネット(1) -.
インターネットと プロトコル(TCP/IP)
インターネットのプロトコル階層 ネットワーク層(IPアドレス)
第1回.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
コンピュータ基礎(10) 11章 通信ネットワーク.
前回の課題 IPv6アドレス IP ARP ICMP NAT インターネット層 2003年12月4日 情報ネットワーク論 新村太郎.
2004年度 情報システム構成論 第2回 TCP/IPネットワーク
ネットワーク層.
TCP (Transmission Control Protocol)
「コンピュータと情報システム」 07章 インターネットとセキュリティ
情報教員のためのサーバ管理技法 3日目 インターネット プロトコル 柴田 功.
30分でわかるTCP/IPの基礎 ~インターネットの標準プロトコル~ 所属: 法政大学 情報科学研究科 馬研究室 氏名: 川島友美
WindowsNTによるLAN構築 ポリテクセンター秋田 情報・通信系.
インターネット メールサーバ DNSサーバ WWWサーバ ファイアウォール/プロキシサーバ クライアント.
TCPソケットプログラミング ソケットプログラミング TCP-echoのデータ通信手順
Copyright Yumiko OHTAKE
トランスポート層.
ネットワークと コミュニケーション技法 第6回 -コンピュータネットワーク-.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満
コンテンツ配信 エンコード (符号化) CBR (Constant Bit Rate) VBR (Variable Bit Rate)
ネットワーク機器接続 2SK 情報機器工学.
コンピュータ基礎(10) 11章 通信ネットワーク.
ま と め と 補 足 ネットワークシステムⅠ 第15回.
パケットの流れ ブラウザ OS TCP IP LANアダプタ ハブ ルータ HTTPメッセージ TCP HTTP断片 TCP HTTP断片
第5回ネットワークプログラミング 中村 修.
第2章 第1節 情報通信の仕組み 1 ネットワークの仕組み 2 通信プロトコル 3 認証と情報の保護
Ibaraki Univ. Dept of Electrical & Electronic Eng.
イーサネット.
インターネット概論第3回 kudo担当分.
情報検索概説II(99秋) 第3回 1999/10/21 インターネットの仕組み(2).
Copyright Yumiko OHTAKE
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Linux リテラシ 2006 第4回 ネットワーク CIS RAT.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
TCP/UDP プロセス間の通信のためのプロトコル TCP:信頼性高、処理時間大 UDP:信頼性低、処理時間小 ftp SMTP HTTP
第7回ネットワークプログラミング 中村 修.
インターネットの基礎知識 その3 ~TCP・UDP層編~
ソケットプログラム(TCP,UDP) EasyChat開発
岡村耕二 トランスポート層 ソケットプログラミング 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
ネットワーク技術II 第9.1課 TCP/IPプロトコルスイート
ソケットプログラム(TCP,UDP) EasyChat開発2
ネットワークの基礎知識 電子制御設計製図Ⅰ   2014年5月2日 Ⅲ限目.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
TCP/IP入門          櫻井美帆          蟻川朋未          服部力三.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
第16章 BOOTP:ブートストラップ・プロトコル
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
岡村耕二 トランスポート層 岡村耕二 情報ネットワーク.
TCP制御フラグの解析による ネットワーク負荷の推測
最低限インターネット ネットワークにつなぎましょ!
LAN(TCP/IP) インターネットワーキング編
情報実験 第五回 最低限 internet ~ネットワークの仕組みを知ろう~
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満
4.3 IPとルーティングテーブル 国際産業情報学科 2年 大竹 雅子.
ネットワーク・プログラミング TCPサーバ.
IPアドレス 平成14年7月9日 峯 肇史 牧之内研究室「UNIX とネットワーク基礎勉強会」Webページ
TCP/IPの通信手順 (tcpdump)
ソケットの拡張によるJava用分散ミドルウエアの高信頼化
第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール
岡村耕二 TCP通信プログラム 岡村耕二 情報ネットワーク.
Presentation transcript:

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

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

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

OSI基本参照モデル OSI基本参照モデル ネットワーク・プロトコル ネットワーク機器 第7層 アプリケーション層 HTTP, SMTP, FTP 第6層 プレゼンテーション層 第5層 セション層 SSL 第4層 トランスポート層 TCP, UDP ゲートウェイ 第3層 ネットワーク層 IP, ICMP, ARP ルータ 第2層 データリンク層 ブリッジ 第1層 物理層 リピータ

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

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

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

IPに関するプロトコル ARP(Address Resolution Protocol) IPアドレスからMACアドレスを求めるプロトコル ⇔RAPR(Reserve ARP) ICMP(Internet Control Message Protocol) IPのエラー・制御メッセージを転送する エラー通知や診断などの問い合わせ

IPアドレスについて IPアドレスはIPv4プロトコルに基づく32bitのアドレス空間 しかし、最近IPアドレスの枯渇問題が浮上している ネットワーク部+ホスト部で構成されている A~Eの5つのアドレスクラスに分けられている 10101100.00010000.11111110.00000001    172   .  16   .  254 .   1

IPアドレスのクラス Aクラス 0-から始まる Bクラス 10-から始まる ネットワーク部8bit、ホスト部24bit 2^24=1600万 1 0 2^16=65536

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

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

サブネットマスク IPアドレスのうち、何bitをネットワークアドレスに割り振るかを定義する32bitの数値。 例えばサブネットマスクが2進数で  11111111 11111111 11111111 00000000 ならば、IPアドレスのうち上位24ビットがネットワークアドレス、下位8ビットがホストアドレスである

サブネットワーク ネットワークをサブネットマスクによって細かく分けた内の1つのネットワーク

トランスポート層 通信を行うプログラム間で使用する仮想的な回線の提供 通信相手にデータが確実に届いたかどうかの確認、再送信などの処理 データを確実に相手に届ける役割を担う

TCPとUDPの違い 低速だが、データ転送の信頼性を確保している TCP(Transmission Control Protocol) コネクション型通信 相手との接続を確立したかどうかを確認してから通信を行う 届かなければ再送信を自動で行う 低速だが、データ転送の信頼性を確保している

TCPとUDPの違い 確実にデータが届くという保証はないが高速 UDP(User Datagram Protocol) コネクションレス型通信 相手との通信を確立せずに通信を開始 データが抜け落ちても再送は行わない 使用例 skype、ストリーム形式での配信など 確実にデータが届くという保証はないが高速

セション層 セション(仮想的な回線の開始~終了間)の管理を行い、送受信の同期をとる機能を提供する 効率的にデータを送るための送信方法を決める、経路の確立・解放も(実際に行うのはトランスポート層)

送信方法の例 回線交換方式 A B 回線を設定し、占有して通信を行う 常に一定の帯域幅が保証されるが、相応のコストがかかる A                           B        交換局 中継局      交換局 常に一定の帯域幅が保証されるが、相応のコストがかかる

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

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

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

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

接続方法 1.コマンドプロンプトを起動 2.telnet 10.0.255.254 259 3.選択肢に1 4.学籍番号とパスワードを入力 うまくいかない場合 ipconfig/release でIPアドレスを解放 IPアドレスが重なっている場合があるため ipconfig/renew IPアドレスをDHCPで更新 3.選択肢に1 4.学籍番号とパスワードを入力

DHCPって? Dynamic Host Configuration Protocol インターネットに接続するコンピュータに IPアドレスなどの情報を自動で割り当てる 通信が終わると回収される 利用者にとっては使いやすく 管理者にとっては管理しやすく

コマンドプロンプトで用いるネットワーク系統の命令 ipconfig TCP/IPに関する設定情報の表示 ネットワーク構成の確認 ipconfig(-all)だとより詳細に表示される netstat TCP/IPにおけるネットワークの通信状況を確認 netstat –a 有効なコネクションと、接続できるポートを全て表示する netstat –e イーサネット上にあるインタフェース情報を表示する アクセス制御はCSMA/CDが使われる netstat –n IP アドレスとポート番号を名前ではなく数字で表す

WinSock WindowsでTCP/IPの機能を備えたソフトウェアを開発するために用いるAPI Windows でネットワークを利用した    通信を行うプログラムが書ける

#inlcude(winsock2.h)を追加する プログラムを組んでみよう 今回はC言語を用いる 『サーバ側』・『クライアント側』で二つのプログラムが必要 サーバプログラムのホスト名 or IPアドレスを、クライアントプログラムでわかるようにする必要がある #inlcude(winsock2.h)を追加する

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

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

Winsockの初期化・終了 まずWSADATA型で変数を宣言 WSAStartup(MAKEWORD(2,0),&wsaData); WSADATA wsaData; WSAStartup(MAKEWORD(2,0),&wsaData); WSAStartup(Winsockのバージョン,              初期化した状態を入れるための変数); WSACleanup(); Winsock機能の終了

ソケットの作成・破棄 Winsockでソケットは”SOCKET”という変数で表す 全ての通信はSocket()関数が返すSOCKET変数を使う まず変数の宣言 SOCKET sock; Socket関数 socket(アドレスファミリ,ソケットタイプ,プロトコル): アドレスファミリ:ネットワークアドレスの種類を表すもの INET=インターネット 作成 sock = socket(AF_INET,SOCK_STREAM,0); 破棄 closesocket()関数 closesocket( 破棄するソケット);

ソケットの設定 接続先のIPアドレス・ポート番号を指定 INADDR_ANY INADDR_NONE 相手を特に指定しない サーバー側でよく用いられる(通信相手を探す時) INADDR_NONE IPアドレスが存在しない場合 クライアント側でよく用いられる(サーバを探してエラーが発生した時)

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");

ソケットの設定 接続先のアドレス情報を構造体にまとめる inet_addr()関数 htons()関数 文字列で表現されたIPアドレスを整数に変換 server.sin_addr.S_un.S_addr = inet_addr(“127.0.0.1”); htons()関数 ポート番号をネットワークバイトオーダーに変換する server.sin_port = htons(12345);

サーバに接続する connect()関数 こんな感じ サーバに接続要求を送る connect(ソケット,接続先アドレス情報が入っている sockaddr_in構造体をsockaddr構造体にキャスト したもの,sockaddr_in構造体の大きさ); sockaddr構造体 ソケットプログラミングを行う上で基本となる構造体 こんな感じ connect(sock, (struct sockaddr*)&server, sizeof(server));

ソケットをアドレスとポートに結びつける(サーバ側) bind()関数 bind(ソケット,アドレス入りのsockaddr_in構造体を   sockaddr構造体にキャストしたもの,   sockaddr_in構造体の大きさ); こんな感じ bind(sock, (struct sockaddr*)&addr, sizeof(addr));

接続リクエストの受付 listen()関数 こんな感じ ソケットを接続待ち状態にする listen( ソケット , 待機状態のリクエストが listen(sock,10); listen( ソケット , 待機状態のリクエストが 格納されるキューの大きさ); こんな感じ if(!listen(sock,10)){ printf("listenに失敗"); exit(1); }

クライアントからの接続を確立する accept()関数 こんな感じ まずは接続先のアドレス情報の大きさを取得 len = sizeof(接続先のアドレス情報) accept(ソケット , 接続先のアドレス情報 , 接続先アドレス情報の大きさ); こんな感じ sock2 = accept(sock1, (struct sockaddr*)&client, &len);

データの送受信 送信 受信 send()関数 memset()関数 初期化するバイト数); recv()関数             送信するデータの長さ , 0 ); 受信 memset()関数 memset(バッファのポインタ,初期化に使う文字, 初期化するバイト数); recv()関数 recv( ソケット , 受信するバッファへのポインタ ,                    受信するデータの長さ , 0 );

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

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