Lecture_ver2

Lecture (Network)
中京大学
情報理工学部 情報システム工学科
H106118 森川 隆史
目次



ネットワーク
コマンドプロンプトで用いる命令(ネット
ワーク関連)
Winsock
~Network~
プロトコルって何?

ネットワークを介してコンピュータ同士が
通信を行なう上で、相互に決められた約束
事の集合。通信手順、通信規約などと呼
ばれることもある。
(IT用語辞典 e-Words 参照)
OSI 参照モデル
第7層
第6層
第5層
第4層
第3層
第2層
第1層
アプリケーション層
プレゼンテーション層
セッション層
トランスポート層
ネットワーク層
データリンク層
物理層
HTTP,SMTP,FTPなど
TCP , UDP
IP , ARP , ICMP
おおまかな役割を
決定しているだけ
アプリケーション層


ネットワークを使ったサービスをほかの
人やプログラムに提供する
ex:
– メールの送受信を行う手順を定める
– Web へアクセスする手順を定める
プレゼンテーション層

データを相手側が読み込むことができる表
現形式に変換する
– コンピュータによって対応する表現形式が異
なるため
翻訳機のようなもの?
セッション層



データ通信を行うための経路を確立、解
放する
効率的にデータを送るにはどうするか、
データの送信方法を決める
ただし、タイミングを決めるだけで実際に
転送するのは下の層が行う
経路の確立方法

コネクション型

コネクションレス型
2種類の方法がある。説明は後で
データ通信方式

パケット交換方式
– データをパケットにして分割
– 複数で使え、回線を占有しない
– 一部で障害が発生しても、経路変更が可能

回線交換方式
– 回線を設定し、占有して行う通信方式
トランスポート層 (1)




データを確実に相手へ届ける役割
実際にコネクションの確立、解放を行う
データ転送の信頼性を提供
届かなかった場合には再送処理をする
トランスポート層 (2)

TCP ( Transmission Control Protocol )
– 低速だが、データ転送の信頼性を確保
– 届かなければ再送信を自動で行う
– Ex. Youtube , ニコニコ動画

UDP ( User Datagram Protocol )
信頼性○
リアルタイム○
– 高速
– 相手へ確実にデータが届く保証はない
– Ex. skype , IP電話
コネクション型



通信を行う際に、相手と接続を確立した
のを確認してから通信を行う
処理が複雑で管理が大変
正しい順番でデータが届く信頼性あり
「電話」のイメージ
コネクションレス型



相手と接続したのを確認せずにいきなり通
信を行う
確実にデータが届くかどうかは保証しない
ストリーミングやリアルタイムな映像が必要
な場合などに使われる
「郵便(速達)」のイメージ
ネットワーク層 (1)




パケットの伝送
経路の選択と宛先の管理
送信元から目的地まで通信可能にする
IP (Internet Protocol)
–
–
ネットワーク間で通信するために使う約束事
OSI基本参照モデルの第3層(ネットワーク層)に位置し、ネット
ワークに参加している機器の住所付け(アドレッシング)や、相互
に接続された複数のネットワーク内での通信経路の選定(ルー
ティング)をするための方法を定義している。
– コネクションレス型のプロトコルであるため、確実にデータが届
くことを保証するためには、上位層のTCPを併用する必要がある。
– (IT用語辞典 e-Words 参照)
ネットワーク層 (2)

ARP (Address Resolution Protocol)
– TCP/IP ネットワークにおいてIPアドレスから
MACアドレスを求める
– IPアドレスを手がかりとして、次にパケットを
受け取るもののMACアドレスを知りたいとき
に使う
– ⇔RARP( Reverse ARP )
ネットワーク層 (3)

ICMP ( Internet Control Message Protocol )
– IPのエラーや制御メッセージを転送する
– TCP / IP でつながれたコンピュータで互いの
状態を確認するために使う
– エラー通知や診断などの問い合わせ
ICMP の一例

TTL ( Time To Live )
– この値はルータを1つ通過するたびに1減る
– 0になるとそのパケットは破壊され、ルータは
その旨をICMP を利用して送信元へ伝える
– パケットがネットワーク上にいつまでも残らな
いようにするため(残っていると邪魔になる)
データリンク層・物理層

データリンク層
– ケーブルなどで繋がれた機器間でのデータ
通信をできるようにする
– 相手への通信経路を確保し、エラーが出た
場合は検出する
– フレームの判別と転送

物理層
– 0と1のデジタルデータを電圧などに変換し、
実際に通信機器へ送る
IP アドレス と MAC アドレス

IPアドレス
– 通信を行う際に、宛先を判別するために使う
– PC や通信機器1台1台に固有のものがある

MACアドレス
– 各Ethernetカードにある固有のID番号
– これを利用してカード間でデータの送受信を
行う
IP アドレス

IPアドレス ・・・ ネットワーク部 + ホスト部
– IP アドレスは32bit
–
–
–
クラスがA~Eまである
ネットワーク部は同じデータリンク内では同じ
インターネットに接続されているネットワークの中で
重ならないように
– ホスト部は同じリンク内で重ならないように
– ホストアドレスが全て0または1のものは使えない
– Ex: 192.168.144.0
クラスA,B
ネットワーク部

クラスA
– ネットワーク部:8bit , ホスト部:24bit
– ホストアドレスは2^24 ≒ 1600万
0
8bit

24bit
クラスB
– ネットワーク部:16bit , ホスト部:16bit
– ホストアドレスは2^16 = 65536
1 0
16bit
16bit
ホスト部
クラスC,D

クラスC
– ネットワーク部:24bit , ホスト部:8bit
– ホストアドレスは2^8 =256
1 1 0
24bit

8bit
クラスD
– ネットワーク部:32bit , ホスト部:0bit
– マルチキャストに使用
1 0 0 0
– ホストアドレスは無し
32bit
IPアドレスの例外

ホストアドレスが全て0
– IPアドレスがわからないときに使われる

ホストアドレスが全て1
– ブロードキャストアドレスとして使われる

この2つはホストアドレスとして使えない
サブネットマスク





インターネットのような巨大なTCP/IPネットワークは、複数の小さな
ネットワーク(サブネット)に分割されて管理されるが、ネットワーク内
の住所にあたるIPアドレスのうち、何ビットをネットワークを識別する
ためのネットワークアドレスに使用するかを定義する32ビットの数値。
ネットワークアドレス以外の部分が、ネットワーク内の個々のコン
ピュータを識別するホストアドレスである。
サブネットマスク値からIPアドレスとビットの論理積を計算すること
によって、IPアドレスのネットワークアドレス部を取得できる。
例えば、サブネットマスクが2進数で 11111111 11111111 11111111
00000000 ならば、IPアドレスのうち上位24ビットがネットワークアドレ
ス、下位8ビットがホストアドレスである。
111.18.10.2というIPアドレスを255.255.240.0というサブネットマスク
値を使って分割すると、このIPアドレスは、111.18.0というネットワーク
上の、ホストアドレス10.2のホストという意味になる。
(IT用語辞典 e-Words 参照)
サブネットマスク (2)


サブネットワーク:ネットワークを細かく分
けた1つのネットワーク
大きなネットワークから不要部分を隠す
ネット
ワーク
サブ
ネット
ワーク
コマンドプロンプトで用いる
ネットワーク系統の命令
ipconfig (1)


TCP / IP に関連する設定情報を表示する
ネットワーク構成の確認
– ipconfig
• 上記の情報(簡易)を表示する
– ipconfig –all
• 上記の情報(詳細)を表示する
ipconfig (2)

ipconfig/release
– IPアドレスを解放する
– IPアドレスが重なってしまった場合などに有効
– ただし、DHCP を有効にしていないと効果なし

ipconfig/renew
– IPアドレスを DHCP によって更新する
DHCP ?

Dynamic Host Configuration Protocol
– インターネットに接続するコンピュータに、IP
アドレスなどの情報を自動で割り当てる
– 通信が終わると回収される
– 利用者にとって→使いやすくなる
– 管理者にとって→管理しやすくなる
ipconfig (3)

ipconfig/displaydns
– DNS キャッシュの確認

ipconfig/flushdns
– DNS キャッシュをクリアする
netstat (1)

netstat
– TCP / IP におけるネットワークの通信状況を
確認
– LAN における組織内ネットワーク環境、イン
ターネットに接続している環境で用いる
netstat (2)

netstat –a
–

netstat –e
–
–

有効なコネクションと、接続できるポートを全て表示
する
イーサネット上にあるインタフェース情報を表示する
アクセス制御はCSMA/CDが使われる
netstat –n
–
IP アドレスとポート番号を名前ではなく数字で表す
WinSock
WinSock ?

Windows で TCP/IP の機能を使ったソフ
トウェアを開発するために使う API
Windows でネットワークを利用した
通信を行うプログラムが書ける!
APIとは


Application Program Interface
あるプラットフォーム(OSやミドルウェア)向けのソフト
ウェアを開発する際に使用できる命令や関数の集合のこ
と。また、それらを利用するためのプログラム上の手続き
を定めた規約の集合。個々のソフトウェアの開発者がソ
フトウェアの持つすべての機能をプログラミングするのは
困難で無駄が多いため、多くのソフトウェアが共通して利
用する機能は、OSやミドルウェアなどの形でまとめて提
供されている。個々の開発者は規約に従ってその機能を
「呼び出す」だけで、自分でプログラミングすることなくそ
の機能を利用したソフトウェアを作成することができる。
(IT用語辞典 e-Words 参照)
プログラムを組む前に




基本はC言語、でも・・・
『サーバ』、『クライアント』の2つのプログ
ラムが必要!
#include <winsock2.h> を追加する
サーバプログラムのホスト名またはIPア
ドレスをクライアントプログラムでわかるよ
うにする必要あり
プログラムの流れ(サーバ側)

サーバ・・・クライアントからの接続待ち
–
–
–
–
–
–
ソケットをつくる
接続待ちをするIPアドレスとポート番号の設定
ソケットにアドレス情報を結びつける
接続待ち状態
クライアントから要求があれば受け付ける
通信する
プログラムの流れ(クライアント側)

クライアント
–
–
–
–
–
WinSock の初期化
ソケットをつくる
接続相手の設定を行う(ポート番号も設定)
接続要求が成功すると通信スタート
用事が済んだら接続を切断する
ソケットとは?



通信経路の端に結びついているもの
ユーザにとってデータの出入口
ソケットにデータの読み込み、書き込みを
行う関数を呼び出すことで通信可能となる
『糸電話』みたいなもの
WinSock の初期化

WSAStartup( MAKEWORD( 2 , 0 ) ,
&wsaData );
– MAKEWORD(2,0) ・・・WinSock ver2.0 要求
– &wsaData ・・・WSADATA 構造体型の変数
のアドレス
ソケットの作り方


socket()関数
SOCKET sock;
– sock = socket( AF_INET , SOCK_STREAM ,
0);
• AF_INET・・・自分自身を除いた利用可能なアドレス
一覧を取得。インターネットを対象とするときに用いる
アドレスファミリ(ネットワークアドレスの種類)
• SOCK_STREAM・・・TCP を示すソケットの特性
ソケットの設定

接続先のIPアドレス、ポート番号を指定
– IPアドレス
• INADDR_ANY (0.0.0.0)
–
–
相手を特に指定しない。誰でもよい。
サーバ側でよく使われる(サーバが通信相手を探す時)
• INADDR_NONE (255.255.255.255)
–
–
IPアドレスが存在しない場合
クライアント側でよく用いられる(サーバを探していてエ
ラーが発生したとき)
ソケットの設定 (2)

inet_addr() 関数
– 文字列で表現されたIPアドレスを整数に変
換する

ポート番号
– htons() 関数
•
16bitの整数に対して、ポート番号をネットワーク
バイトオーダーに変換する(ネットワーク上で使える
ようにするため)
サーバへ接続(クライアント)

connect()関数
– サーバへ接続要求を出す
– connect( ソケット , 接続先アドレス情報の※を
■にキャストしたもの , ※の大きさ);
※・・・SOCKADDR_IN構造体
■・・・SOCKADDR構造体
ソケットにアドレス情報を結びつけ


bind()関数
ソケットにアドレス情報を結びつける
– bind( ソケット , アドレス入りの※を■にキャスト
したもの , ※の大きさ );
※・・・SOCKADDR_IN構造体
■・・・SOCKADDR構造体
接続リクエストの受付準備


listen()関数
ソケットを接続待ち状態にする
– listen( ソケット , 何接続まで受け付けるか );
クライアントからの接続を確立

accept()関数
– 接続先のアドレス情報の大きさを格納する
num = sizeof( 接続先のアドレス情報 );
– 接続を確立させる
sock = accept( ソケット , 接続先のアドレス情
報 , 接続先アドレス情報の大きさ );
データの送信、受信

送信・・・send()関数
– send( ソケット , 送信するデータへのポインタ ,
送信するデータの長さ , 0 );

受信・・・recv()関数
– memset( バッファへのポインタ , 初期化に使う
文字 , 初期化するバイト数 ); //バッファの初期化
– recv( ソケット , 受信するバッファへのポインタ ,
受信するデータの長さ , 0 );
ソケットの破棄、終了処理

ソケットの破棄・・・closesocket()関数
– closesocket( 破棄するソケット);

Winsock の終了処理
– WSACleanup();
課題(ネットワーク)


コマンドプロンプトでネットワークの構成、
通信状況を見てみよう(それぞれが何を表
しているかを確認する)
CSMA/CD とは何?
課題(サブネットマスク)
IPアドレスが「212.172.46.88」
サブネットマスクが「255.255.255.224」
この場合に利用できるホスト数はいくつ?

課題(WinSock)
1.
2.
3.
4.
5.
サンプルプログラムを作って動かしてみる
サーバに何回も接続できるようにする
5回クライアントから続けて接続要求を出せる
ようにする
“quit”とクライアントから入力したら接続を解
除できるようにする
自由に改良する(エラー処理、追加機能をつ
ける・・・etc)
課題に関する注意




説明をする問題は、自分の言葉で書くこ
と。(参考にするのはO.K.)
WinSock の課題は、プログラムファイル
を課題2~4で1つ、課題5で1つ提出(フォル
ダは別々に分ける)
プログラムには説明のコメントを忘れない
ように
ファイル名はわかりやすいものをつける