使用パワーポイント - 医療情報システム研究室

ネットワーク入門
廣安知之 + クラスタ研究グループ
同志社大学
ネットワーク
通信
•パラレルプログラミングには直接関係無い
•現在のシステムでは不可欠 電子メイル,web
•各種設定
•PCクラスタの構築
•分散メモリ型マシンでの並列・分散処理
•無線LAN,ネットワークストレージ,ネットワークブート
プロトコル
TCP/IP
プロトコル
通信をする上での約束ごと
FTP, SMTP, telnet, TCP/IP, AppleTalk, ….
こんにちは
Hello
IP
何を規定すれば通信が行えるのか?
AからBへ“Hello”を送るには
あて先の指定
ネット上で一つ
Hello
A
Hello
B
Hello
IPアドレス
インターネットなどのネットワークに
接続されたコンピュータの識別番号
202.23.129.104
202.23.129.101
202.23.129.102
202.23.129.103
10111111 11001000 11111110 11111110
AからCへ“Hello”を送るには
Hello
B
Hello
A
Hello
Hello
Hello
C
Hello
•ネットワークの表示
•ネットワークを橋渡すマシンの表示
ネットワークアドレス
ネットマスク
ネットワーク部とホスト部の切れ目を示す
IPアドレス:192.168.6.121
11000000 10101000 00000110 01111001
ネットワーク部
ホスト部
サブネットマスク:255.255.255.0
11111111 11111111 11111111 00000000
ネットワーク部
ホスト部
クラス
ネットワークの規模によりIPアドレスは
3つのクラスに分かれる
クラスA
224=約1600万台
クラスB
216=約65000台
クラスC
28=約250台
ネットワーク部
ホスト部
ゲートウェイ
2つのネットワークを結ぶ働き
ゲートウェイ
192.168.0.系統
192.168.1系統
ブロードキャストアドレス
ネットワークに接続されている全ての
コンピュータと通信するためのアドレス
ドメイン名
IPアドレスのかわりに用いる識別名
www.doshisha.ac.jp
-サーバの種類
-組織名称
-組織種別
-国
ピリオドで分かれている
DNS
ドメイン名とIPアドレスを対応付ける
doshisha.ac.jpの
IPアドレスは?
192.168.6.12です
コンピュータ
DNSサーバ
DNS②
DNSの仕組み
doshisha.ac.jpの
IPアドレスは?
192.168.6.12です
了解!
192.168.6.12
名前解決して下さい
jpのDNSなら分かる
名前解決し acのDNS
て下さい
なら分かる
acのDNS
名前解決
して下さい
jpのDNS
ルートDNS
IP version4の問題点(1)
アドレス空間32bit
PCユーザの増化
232≒43億
(地球の人口約55億)
≪ デバイスの増加
IPアドレス枯渇の危機!
IP version4の問題点(2)
セキュリティの不備
経路情報増大によりルータへの負担大
簡単な設定の要求が高まる
新しいIPが必要
IP version6の改良点
アドレス空間128bit
128bit≒340澗=3.4×1038
大
ほぼ無限
アドレス枯渇問題解消!
セキュリティ技術の導入
アドレス自動生成機能
フローラベルの導入
IPv6ヘッダの改良点
除去
オプションフィールド
ルータ処理の
ヘッダチェックサム
負担軽減
分割制御フィールド
高速化!
導入
フローラベル
高品質な
マルチメディア通信が可能
MACアドレス
Media Access Control Addressの略
ネットワークカードに割り当てられる固有の番号
Ethernet上の機器間の物理的な通信を行う
3bytes
3bytes
00-a0-de
00-00-01
製造会社を示す番号
メーカーが独自に割り
当てる番号
IPアドレスとの違い
IPアドレス
ネットワーク層におけるアドレス
ソフトで設定可能
MACアドレス
データリンク層におけるアドレス
ネットワークカードによって固定
ARP
Address Resolution Protocolの略
例えば
IPアドレスが(1.1.1.1)のホストが,(1.1.1.2)のホストに
対して通信を行うとする
Broadcastアドレスに対して,ホスト(1.1.1.2)を尋ねる
1.1.1.1
1.1.1.2
1.1.1.3
1.1.1.4
ARP
Address Resolution Protocolの略
例えば
IPアドレスが(1.1.1.1)のホストが,(1.1.1.2)のホストに
対して通信を行うとする
ホスト(1.1.1.2)は,MACアドレスを返す
1.1.1.1
1.1.1.2
1.1.1.3
1.1.1.4
ARP
Address Resolution Protocolの略
例えば
IPアドレスが(1.1.1.1)のホストが,(1.1.1.2)のホストに
対して通信を行うとする
MACアドレスを使用して,通信を行う
1.1.1.1
1.1.1.2
1.1.1.3
1.1.1.4
パケット通信
長いデータは通信できない
小さな複数の情報に
分割
データM
データm1 データm2 データm3
パケット通信の問題点
パケットの順番
3
4
1
2
4 3 2 1
4 2 3 1
パケットの欠落
3
4
1
2
3
4 3 2 1
4
2 1
UDP
UDP : User Datagram Protocol
正しく相手に届いたかの確認をしない
不確実であるが高速な通信を実現
・・・・・
TCP
TCP : Transmission Control Protocol
インターネットの通信プロトコルとして最も普及
※プロトコル
×
こんにちは。
Bonjour.
こんにちは。
○
こんにちは。
TCP
送信したデータが正しく相手に届いたかを確認
届いてなければ再送する
もう1度お願いします!
了解!
TCPとUDP③
TCPとUDPの違い
TCP
UDP
高信頼
低信頼
転送速度
低速
高速
転送形式
コネクション型
コネクションレス型
その他
端末間同士の
データ転送
上位レイヤからの
送信要求が簡潔
信頼性
ソケット通信
UNIXでの通信
ソケットを使ってデータの送受信
ソケットを使った通信
ソケット通信
ソケット
意味: 「接続の端点」
コンピュータとTCP/IPを
つなぐ出入り口
ソケット
TCP/IP
ソケット通信
ソケットを使って通信を行うには
2つのプログラムが必要
クライアントプログラム
ソケットを用意して
サーバに接続要求を行う
サーバプログラム
ソケットを用意して接続要求を待つ
ソケット通信とは
接続待ちのサーバを
クライアントが探す
接続待ち
サーバを探す
サーバ側
クライアント側
ソケット通信とは
サーバが見つかったら
接続して通信
接続を受信
サーバを見つけて接続
サーバ側
クライアント側
ソケット通信の流れ 1
ソケット生成
(socket)
ソケット生成
(socket)
クライアント
サーバ
ソケット通信の流れ 2
サーバを探す
(gethostbyname)
クライアント
接続の準備
(bind/listen)
サーバ
ソケット通信の流れ 3
接続要求
(connect)
クライアント
接続受理
(accept)
OK!
サーバ
ソケット通信の流れ 4
通信
(send/recv)
通信
(send/recv)
こんにちわ
クライアント
こんにちわ
サーバ
ソケット通信の全体の流れ
クライアント
サーバ
ソケット生成(socket)
ソケット生成(socket)
サーバを探す
(gethostbyname)
接続の準備(bind)
接続待機(listen)
接続要求(connect)
識別情報
接続受信(accept)
データ送受信(send/recv)
データ送受信(send/recv)
ソケットを閉じる(close)
ソケットを閉じる(close)
識別情報
正しくデータを受け渡しするために
通信する相手を識別する
IPアドレス
コンピュータのアドレス
コンピュータを識別
ポート番号
プログラムを識別
プログラムの識別番号
ウェルノウン ポート
よく使われているプログラムの
ポート番号は決まっている
ポート番号 プログラム
21
ftp
22
ssh
23
telnet
80
http(web)
1024番以下は全て決められている
クライアントプログラム(C)
//client.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include<string.h>
#define PORT (u_short)10000
#define BUF_LEN 100
char hostname[]="localhost";
char buf[BUF_LEN];
main()
{
struct hostent *servhost;
struct sockaddr_in server;
int s;
servhost = gethostbyname(hostname);
bzero((char *)&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = PORT;
bcopy(servhost->h_addr,
(char *)&server.sin_addr,servhost->h_length);
s = socket(AF_INET,SOCK_STREAM,0);
connect(s,(void *)&server,sizeof(server));
read(s,buf,BUF_LEN);
printf(buf);
close(s);
}
サーバプログラム(C)
//server.c
me.sin_family = AF_INET;
me.sin_port = PORT;
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include<string.h>
#define PORT (u_short)10000
char hostname[] = "localhost";
bcopy(myhost->h_addr,
(char *)&me.sin_addr,myhost->h_length);
s_waiting = socket(AF_INET,SOCK_STREAM,0);
bind(s_waiting,(void *)&me,sizeof(me));
main()
listen(s_waiting, 1);
{
s = accept(s_waiting, NULL, NULL);
struct hostent *myhost;
close(s_waiting);
struct sockaddr_in me;
int s_waiting, s;
write(s, msg, strlen(msg));
char msg[] = "Hello World!!\n";
close(s);
myhost = gethostbyname(hostname);
bzero((char *)&me, sizeof(me));
}
クライアントプログラム(Java)
import java.io.*;
import java.net.*;
import java.lang.*;
//サーバ側から送信された文字列を受信
byte[] buff = new byte[1024];
int a = is.read(buff);
System.out.write(buff, 0, a);
public class Client{
public static void main( String[] args ){
//ストリーム,ソケットをクローズ
is.close();
socket.close();
try{
//ソケットを作成
String host="localhost";
Socket socket = new Socket( host, 10000 );
//入力ストリームを作成
DataInputStream is = new DataInputStream (
new BufferedInputStream(
socket.getInputStream()));
}catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
サーバプログラム(Java)
//Server.java
import java.net.*;
import java.lang.*;
import java.io.*;
//ストリーム,ソケットをクローズ
os.close();
cliSocket.close();
svSocket.close();
}catch( Exception e ){
System.out.println(e.getMessage());
e.printStackTrace();
}
public class Server{
public static void main( String[] args ){
try{
//ソケットを作成
ServerSocket svSocket = new ServerSocket(10000);
//クライアントからのコネクション要求受付
Socket cliSocket = svSocket.accept();
//出力ストリームを作成
DataOutputStream os = new DataOutputStream(
new BufferedOutputStream(
cliSocket.getOutputStream()));
//文字列を送信
String s = new String("Hello World!!\n");
byte[] b = s.getBytes();
os.write(b, 0, s.length());
}
}
サーバプログラム(Java)
ソケット作成,コネクション要求受付待機
ServerSocket svSocket =
newServerSocket(10000);
Socket cliSocket = svSocket.accept();
出力ストリーム作成
DataOutputStream os =
new DataOutputStream(
new BufferedOutputStream(
cliSocket.getOutputStream());
クライアントプログラム(C)
アドレス設定
servhost = gethostbyname(hostname);
bzero((char *)&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = 10000;
bcopy(servhost->h_addr,
(char *)&server.sin_addr,
servhost->h_length);
クライアントプログラム(C)
ソケット通信
s = socket(AF_INET,SOCK_STREAM,0);
connect(s,(void
*)&server,sizeof(server));
read(s,buf,BUF_LEN);
printf(buf);
close(s);
サーバプログラム(C)
アドレス設定
myhost = gethostbyname(hostname);
bzero((char *)&me, sizeof(me));
me.sin_family = AF_INET;
me.sin_port = 10000;
bcopy(myhost->h_addr,
(char *)&me.sin_addr,myhost>h_length);
サーバプログラム(C)
ソケット通信
s_waiting = socket(AF_INET,SOCK_STREAM,0);
bind(s_waiting,(void *)&me,sizeof(me));
listen(s_waiting, 1);
s = accept(s_waiting, NULL, NULL);
write(s, "Hello World!!\n", 14);
close(s);
クライアントプログラム(Java)
ソケットを作成
Socket socket = new Socket(
“hoge.com”, 10000 );
入力ストリームを作成
DataInputStream is =
new DataInputStream (
new BufferedInputStream(
socket.getInputStream()));
クライアントプログラム(Java)
サーバ側から送信された文字列を受信
n = is.read(buff);
System.out.write(buff, 0, n);
ストリーム,ソケットをクローズ
is.close();
socket.close();
サーバプログラム(Java)
ソケット作成,コネクション要求受付待機
ServerSocket svSocket =
newServerSocket(10000);
Socket cliSocket = svSocket.accept();
出力ストリーム作成
DataOutputStream os =
new DataOutputStream(
new BufferedOutputStream(
cliSocket.getOutputStream());
サーバプログラム(Java)
文字列を送信
String s = new String("Hello World!!\n");
byte[] b = s.getBytes();
os.write(b, 0, s.length());
ストリーム,ソケットをクローズ
os.close();
cliSocket.close();
svSocket.close();
MPIメッセージパッシングライブラリ
MPIとは
並列プログラミングのための通信ライブラリ
三つの利用形式(C,C++,Fortran)がある
様々なプラットフォームで利用できる優れた
フリーウェアもある
MPIフォーラムという任意参加の会議で
作成されたAPI仕様
APIとは
ソフトウェアの持つすべての機能を
逐次開発するのは非効率的
ソフトウェアでよく使われる機能を提供
機能の使い方(関数の名前や引数)を定義
実装はハードウェアによって異なる
mpich
P4
TCP/IP
Ethernet
メッセージ通信を行うためには….
OSの知識(プロセス間通信など)が必要
通信プロトコルの知識が必要
多くの関数(socket,bind,listenなど)を
必要とする
MPIを用いるメリット
ベースとなる言語(C,C++,Fortran)にMPI
の関数を加えるだけで,並列プログラムを
書くことができる
様々な実装に容易に移植することができる
例えばMPI_SENDという関数を用い
るだけで送信できる
ネットワークアプリケーション
(クラスタ構築のためのツール)
クラスタに必要なツール
全てのマシンを操作しなければいけない
rsh
実行ファイルなどを全てのマシンが共有しな
ければいけない
NFS
アカウントの一貫性を保たなければいけない
全てのマシンにログインできなければいけない
NIS
rsh
Remote SHellの略
リモートホストに接続して,指定されたコマンド
を実行する
通信内容がそのままIPパケットに格納されて,
送られる
仕事を要求
接続する
rsh
ー実行例ー
以下のコマンドをcherry01という名前のマ
シン上で実行する
rsh cherry02 cc test1.c
これは,「cherry01からcherry02に対して,
ファイルtest1.cのコンパイルを依頼する」,
ということである.
NFS
Network File Systemの略
ファイルを共有するシステム
あるホストがエクスポートしたファイルシステ
ムを別のホストがマウントする
D
A
B
E
C-1
C-2
F
G
NIS
Network Information Serviceの略
クラスタ全体の情報を管理する
 分散データベース サービス
コピー
database
マスタ
クライアント
NIS
●NISで提供される主な情報
ログイン名
パスワード
ホームディレクトリ
グループ名
クラスタ構築に必要なツール
rsh
全てのマシンを操作するため
NFS
マシン全体でファイルを共有するため
NIS
アカウントに一貫性を持たせるため
自由に全てのマシンにログインするため
NFS
Network File Systemの略
ファイルを共有するシステム
あるホストがエクスポートしたファイルシステ
ムを別のホストがマウントする
D
A
B
E
F
G
ハードウエアの紹介
Ethernet (1)
• Xerox社が開発したLANの規格
• のちにEthernet 2.0として制定
– DEC, Intel, Xeroxによる(DIX仕様)
• 現在はISOプロトコル層を考慮して
IEEE802.3として規定
• LANの規格として最も普及
Ethernet (2)
•
•
•
•
~10BASE-T
伝送速度: 10Mbps
ケーブル: UTP
CSMA/CD方式
スター型のネットワークトポロジ
Fast Ethernet
~100BASE-TX
• Ethernetを高速化する目的で標準化
– Ethernetとの互換性を維持
•
•
•
•
伝送速度 : 100Mbps
ケーブル : UTP(カテゴリー5)
CSMD/CD方式
スター型のネットワークトポロジ
Gigabit Ethernet
•
•
•
•
•
~1000BASE-T
Ethernet,Fast Ethernetの拡張版
伝送速度 : 1000Mbps
ケーブル : UTP(カテゴリー5)
CSMD/CD方式
スター型のネットワークトポロジ
ATM(Asynchronous Transfer Mode)
• セルと呼ばれる固定長のフレームを転送する
通信方式
• 転送するデータがあるときだけセルを送信
• データ、音声、動画などの情報を1つのネット
ワークで扱えるようにするため開発された
• LAN Emulationの技術でLANとして利用可能
– 伝送速度 : 25Mbps
ATMセル
HiPPi(High Performance Parallel Interface)
• スーパーコンピュータ間,
高速ネットワークなどへの接続
• 伝送速度:1600Mbps
(64ビットパラレル通信)
• ケーブル : 光ケーブル
• 最大10kmまで伝送可能
• スター型ネットワークトポロジ
Myrinet
• Myricom社が開発
• PCクラスタコンピューティングの
デファクト・スタンダードとして期待
– EthernetやATMなどより優れた
性能,コストパフォーマンスを発揮
各ネットワークの性能比較(1)
各ネットワークの性能比較
(2)
TCP以外のプロトコル
ゼロコピー通信とは
速さを最優先させた通信方法
クラスタの処理速度のボトルネックは通信
データのコピーをなくすことによって速くする
Scoreなどのシステムで実現できる
従来の通信
通信デバイスはカーネルが扱う
プログラムは通信デバイスを直接使用できない
通信機能が階層化されている
プロトコル間で何度もコピーされる
⇒通信のオーバーヘッドが大きい
従来の通信②
送信側
ユーザ
アドレス空間
受信側
ユーザ
アドレス空間
データ
データ
コ
ピー
コ
ピー
データ
データ
カーネル
アドレス空間
カーネル
アドレス空間
データ
データ
NIC
NIC
ゼロコピー通信
通信速度を最優先にした通信方式
コピー回数を減らして通信速度を向上
ゼロコピー通信②
送信側
ユーザ
アドレス空間
受信側
ユーザ
アドレス空間
データ
データ
カーネル
アドレス空間
カーネル
アドレス空間
データ
データ
NIC
NIC