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