使用パワーポイント - 医療情報システム研究室
Download
Report
Transcript 使用パワーポイント - 医療情報システム研究室
ネットワーク入門
廣安知之 + クラスタ研究グループ
同志社大学
ネットワーク
通信
•パラレルプログラミングには直接関係無い
•現在のシステムでは不可欠 電子メイル,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