• 検索結果がありません。

ネットワーク接続の手続き

N/A
N/A
Protected

Academic year: 2021

シェア "ネットワーク接続の手続き"

Copied!
7
0
0

読み込み中.... (全文を見る)

全文

(1)

ネットワーク接続の手続き

山本昌志

2007 年 10 月 31 日

概 要 ネットワークを接続するための手続きの内容を示す.

1 本日の学習内容

コンピューターをネットワークに接続する場合,さまざまな手続きが必要である.ひとつひとつその手続 きの内容を示す.教科書 [1] では,p.258–276 である.以下,学習のゴ ールを示す.

通信の手続きの内容が分かる.

2 コンピューターをネット ワークを使って通信する方法

2.1 通信を行うプログラムの例

先週と同じ,チャットプログラムをリスト 1 とリスト 2 に示す.本日は,これを改造して,インターネッ ト通信のプログラムの学習を進める.

リスト 1: テキストを送信するクライアントプログラム

1 #include <s t d i o . h>

2 #include <s t r i n g . h>

3 #include <s y s / t y p e s . h>

4 #include <s y s / s o c k e t . h>

5 #include <n e t i n e t / i n . h>

6 #include <a r p a / i n e t . h>

7

8 i n t main (i n t a r g c , char a r g v [ ] )

9 {

10 s t r u c t s o c k a d d r i n s e r v e r ;

11 char m e s s a g e [ 8 0 ] , i p a d d r e s s [ 1 6 ] ; 12 i n t f d ;

13

14 s t r c p y ( i p a d d r e s s , a r g v [ 1 ] ) ; // コ マ ン ド ラ イ ン 引 数 のI Pア ド レ ス の コ ピ ー

15 f d=s o c k e t ( PF INET , SOCK STREAM, 0 ) ; // ソ ケ ッ ト の 作 成

16

17 memset ( (char ) &s e r v e r , 0 , s i z e o f( s e r v e r ) ) ; // ア ド レ ス 構 造 体 の 初 期 化

独立行政法人  秋田工業高等専門学校  電気情報工学科

(2)

18 s e r v e r . s i n f a m i l y=AF INET ; 19 s e r v e r . s i n p o r t = h t o n s ( 5 3 2 0 ) ;

20 s e r v e r . s i n a d d r . s a d d r=i n e t a d d r ( i p a d d r e s s ) ;

21 c o n n e c t ( f d , (s t r u c t s o c k a d d r ) &s e r v e r , s i z e o f( s e r v e r ) ) ; 22

23

24 while( 1 ){

25 p r i n t f ( ” m e s s a g e : ” ) ;

26 f g e t s ( message , 8 0 , s t d i n ) ;

27 i f( strncmp ( message , ” bye ” ,3)==0)break; 28 s e n d ( f d , message , s t r l e n ( m e s s a g e ) , 0 ) ;

29 }

30

31 c l o s e ( f d ) ; 32

33 return 0 ;

34 }

リスト 2: テキストを受信するサーバープログラム

1 #include <s t d i o . h>

2 #include <s t r i n g . h>

3 #include <s y s / t y p e s . h>

4 #include <s y s / s o c k e t . h>

5 #include <s y s / s o c k e t . h>

6 #include <n e t i n e t / i n . h>

7 #include <a r p a / i n e t . h>

8

9 i n t main (void)

10 {

11 s t r u c t s o c k a d d r i n c l i e n t , s e r v e r ; 12 char r e a d s t r [ 8 0 ] ;

13 i n t f d s , f d a , l e n g t h ;

14 f d s=s o c k e t ( PF INET , SOCK STREAM, 0 ) ;

15 memset ( (char ) &s e r v e r , 0 , s i z e o f( s e r v e r ) ) ; 16

17 s e r v e r . s i n f a m i l y=AF INET ;

18 s e r v e r . s i n a d d r . s a d d r = h t o n l (INADDR ANY ) ; 19 s e r v e r . s i n p o r t = h t o n s ( 5 3 2 0 ) ;

20 b i n d ( f d s , (s t r u c t s o c k a d d r ) &s e r v e r , s i z e o f( s e r v e r ) ) ; 21

22 l i s t e n ( f d s , 1 ) ; 23

24 l e n g t h=s i z e o f( c l i e n t ) ; 25

26 f d a=a c c e p t ( f d s , (s t r u c t s o c k a d d r ) &c l i e n t , &l e n g t h ) ; 27

28 while( 1 ){ 29 i n t r n ;

30 r n = r e c v ( f d a , r e a d s t r , 8 0 , 0 ) ; 31 p r i n t f ( ”%s ” , r e a d s t r ) ;

32 }

33

34 c l o s e ( f d a ) ; 35 c l o s e ( f d s ) ; 36

37 return 0 ;

38 }

(3)

2.2 通信の順序

ここでの通信は,以下の順序で行われている.

クライアント(client) サーバー(server)

socket() ソケットの作成

socket() ソケットの作成

bind()

ソケットにアドレスを設定

listen() ソケット接続準備

recv() データ受信

close()

ソケット記述子をクローズ

close() ソケット切断 connect()

接続要求

send() データ送信

close() ソケット切断

accept() 接続要求待ち

SYN SYN+ACK

ACK 3 way handshake

図 1: 通信の順序

(4)

3 通信の手続き

3.1 システムコール

通信の様々な処理は,OS; 諸君の学習環境では linux の仕事である.OS にその処理を任せることにより,

通信のプログラムは格段に簡単になる.なぜならば,コンピューター間で通信を行うためには,かなり煩雑 な処理が必要で,それをいちいちプログラム中に記述すると,とてもプログラムが長くなる.OS に一括し て処理をお願いするのである.

この OS に処理を依頼する命令をシステムコールと呼ぶ.システムコールは普通の関数と似ており,ほと んど 区別できない.しかし , 「 man socket」

1

とすると,

SOCKET(2) Linux Programmer s Manual SOCKET(2)

名前

socket - 通信のための端点 (endpoint) を作成する 書式

#include <sys/types.h>

#include <sys/socket.h>

後は長いので省略

と表示され,最初の行は SOCKET(2) となっており,この 2 からシステムコールと分かる.一方,普通の 関数の場合, 「 sin」とすると,

SIN(3) Linux Programmer s Manual SIN(3)

名前

sin, sinf, sinl - 正弦 (サイン) 関数 書式

#include <math.h>

double sin(double x);

float sinf(float x);

long double sinl(long double x);

-lm でリンクする。

後は長いので省略

と表示され,最初の行は sin(3) となっており,この 3 から通常の関数と分かる.

(5)

3.2 通信方法

インターネットを使った通信では,普通,クライアントプログラムとサーバープログラムのプログラムの 2 つのプログラムを実行させる.ここでの例では,データを送る方をクライアント,受け取り表示する方を サーバーとしている.大体は,接続を待っている方がサーバーで,接続要求をする方がクライアントとなる.

ここでの例のクライアントとサーバーの通信の手続きをまとめると,図??のようになる.大体,インター ネットを使ったプログラムは,これと似たような手続きを行う.

それでは,これから通信手続きの具体的な内容を見よう.

3.2.1

ソケット 作製

ソケットは,通信のための端点 (endpoint) のことである.

socket() システムコールを使うことによりソケットを作製できる.このシステムコールの戻り値と引

数は,

ファイルディスクリプター

(

整数値

)=socket(domain, type, protocol)

となっている.

戻り値は,ファイルディスクリプターと呼ばれる整数値である.この整数値により,複数のソケットを区 別している.ソケットどころか,入出力はすべてこのファイルデ ィスクリプターで区別している.

引数の domain では,通信のプロトコルファミリーを指定する.プロトコルとは通信規約のことである.

通常のインターネットの通信であれば,PF INET を指定する.

第 2 引数の type は,通信方式をを決める.次に示す 2 通りの指定ができる.

SOCK STREAM 信頼性の確保された通信が必要なとき. SOCK DGRAM 信頼性は無 いが,リアルタイムのデータを送るのに適している.

第 3 引数の protcol には,0 を指定する.すると,TCP か UDP の適した方が選択される.

3.2.2

その他のシステムコール

その他のシステムコールの内容は課題とする.

4 プログラム作成の練習

[練習 1] リスト 1 とリスト 2 を実行させて,自分自身と会話せよ.二つターミナル (端末) を開い て,その間で通信を行う.

[練習 2] 通信に使ったファイルディスクリプターの番号を調べよ.socket() と accept() システム

コールの戻り値である.

(6)

[練習 3] accept() システムコールの第 2 引数を調べることにより,接続要求を行ってきたクライ アントのアドレスファミリーと IP アドレス,ポート番号を調べよ.

[練習 4] send() と recv() システムコールではなく,write() と read() システムコールを使った プログラムに書き直せ.

[練習 5] 複数のクライアントから,受信できるようにプログラムを改良せよ.これはかなり難しい.

[練習 6] 時間の余った者は,教科書を読み,課題のレポートを作成せよ.

5 課題

5.1 内容

以下の課題を実施し ,レポートとして提出すること.

[問 1] (復予) 教科書 [1]7 章「ネットワークプログラミング 」 pp.247–312 を 1 回読め.そして,以 下について,答えよ.

システムコール プロトコル パケット

[問 2] 次のシステムコールのも動作内容を述べ,戻り値と引数を示せ.

bind() listen() connect() accept() send() recv() close()

5.2 レポート 提出要領

期限 11 月 7 日 (水) AM 8:45

用紙 A4 のレポート用紙.左上をホッチキスで綴じて,提出のこと.

提出場所 山本研究室の入口のポスト

表紙 表紙を 1 枚つけて,以下の項目を分かりやすく記述すること.

授業科目名「情報処理応用」

課題名「課題   ネットワーク接続の手続き」

提出日

2E 学籍番号 氏名

(7)

参考文献

[1] 内田智史監修, (株) システム計画研究所編. C 言語によるプログラミング   応用編   第 2 版. (株) オー

ム社, 2006.

参照

関連したドキュメント

 仮定2.癌の進行が信頼を持ってモニターできる

※年 1 回の認証ができていれば、次回認証の時期まで Trend Micro Apex One (Mac) サーバーと 通信する必要はありません。学内ネットワークに接続しなくても Trend Micro Apex

この課題のパート 2 では、 Packet Tracer のシミュレーション モードを使用して、ローカル

題が検出されると、トラブルシューティングを開始するために必要なシステム状態の情報が Dell に送 信されます。SupportAssist は、 Windows

システムの許容範囲を超えた気海象 許容範囲内外の判定システム システムの不具合による自動運航の継続不可 システムの予備の搭載 船陸間通信の信頼性低下

このような状況の下で、当業界は、高信頼性及び省エネ・環境対応の高い製品を内外のユーザーに

すべての Web ページで HTTPS でのアクセスを提供することが必要である。サーバー証 明書を使った HTTPS

・条例手続に係る相談は、御用意いただいた書類 等に基づき、事業予定地の現況や計画内容等を