Download presentation
Presentation is loading. Please wait.
Published byLiani Budiman Modified 約 6 年前
1
岡村耕二 http://okaweb.ec.kyushu-u.ac.jp/lectures/in-ng/
トランスポート層 ソケットプログラミング 岡村耕二 情報ネットワーク
2
階層とプロトコル (OSI 参照モデル) アプリケーション層 プレゼンテーション層 セッション層 トランスポート層 ネットワーク層
階層とプロトコル (OSI 参照モデル) 物理層 データリンク層 ネットワーク層 アプリケーション層 トランスポート層 プレゼンテーション層 セッション層 プロトコル 情報ネットワーク
3
7層の概略(IT辞典 http://e-words.jp)
アプリケーション層 データ通信を利用した様々なサービスを人間や他のプログラムに提供する。 プレゼンテーション層 第5層から受け取ったデータをユーザが分かりやすい形式に変換したり、第7層から送られてくるデータを通信に適した形式に変換したりする。 セッション層 通信プログラム同士がデータの送受信を行なうための仮想的な経路(コネクション)の確立や解放を行なう。 トランスポート層 相手まで確実に効率よくデータを届けるためのデータ圧縮や誤り訂正、再送制御などを行なう。 ネットワーク層 相手までデータを届けるための通信経路の選択や、通信経路内のアドレス(住所)の管理を行なう。 データリンク層 通信相手との物理的な通信路を確保し、通信路を流れるデータのエラー検出などを行なう。 物理層 データを通信回線に送出するための電気的な変換や機械的な作業を受け持つ。ピンの形状やケーブルの特性なども第1層で定められる。 情報ネットワーク
4
トランスポート層 セッション層より上位では,個々の応用プロセスが処理を実現するのに必要な情報が、メッセージ単位まで分割される。トランスポート層以下は、このメッセージを通信相手の応用プロセスまで、詳細な伝達手段を意識せずに、確実に送り届ける機能を果たしている。 トランスポート層では、両端のコンピュータシステム内で機能してるアプリケーションプロセス間で、データ送信の保証をすることができる。データ通信の保証のために、通信エラーの検出や回復の機能を持つ。また、上位層が要求するスループットや伝送遅延などのサービス品質(QoS: Quality of Service) を保証する。 代表的なプロトコルに、インターネットにおける誤りのないコネクション型サービス TCP (Transmission Control Protocol) や、動画像などを伝送するための効率の良いコネクションレス型サービス UDP (User Datagram Protocol) などがある。 情報ネットワーク
5
トランスポート 一度に複数の人としゃべったり 相手によってゆっくりしゃべったり、一度にたくさんしゃべったり 情報ネットワーク
6
典型的な構成(近距離) アプリケーション プレゼンテーション セッション トランスポート ネットワーク データリンク 物理 情報ネットワーク
7
典型的な構成(長距離) アプリケーション プレゼンテーション セッション トランスポート ネットワーク データリンク・物理
情報ネットワーク
8
トランスポート層 プロセスとプロセスの通信 TCP (Transmission Control Protocol )
信頼性があるが、速度が不定 メール、WEBアクセス UDP (User Datagram Protocol) 信頼性がないが、 速度は一定 マルチメディア通信 情報ネットワーク
9
トランスポート層 IPアドレスだけでは識別子が足りない ポート番号 特定のサービスを固定的に割り当てる
ホスト内でもっと細かく識別できる必要がある プロセス ウインドウ IP Address + Port = トランスポートアドレス ポート番号 16bit 特定のサービスを固定的に割り当てる 25: 電子メール 80: WWW 情報ネットワーク
10
ネットワーク層とトランスポート層 アプリケーション プレゼンテーション セッション トランスポート ネットワーク データリンク・物理
情報ネットワーク
11
決められたポート番号 情報ネットワーク
12
信頼性のある TCP 通信の実現と工夫 Slow Start Sliding Window 遅延時間に弱い なかなかスピードが出ない。 送信
受信 送信 受信 Slow Start Sliding Window 遅延時間に弱い なかなかスピードが出ない。 スループット 時間 情報ネットワーク
13
通信アプリケーション 電子メール WWW DNS VoD テレビ会議 SMTP/POP/IMAP HTTP/FTP DNS RTSP RTP
情報ネットワーク
14
岡村耕二 http://okaweb.ec.kyushu-u.ac.jp/lectures/in-ng/
UDP通信プログラミング 岡村耕二 情報ネットワーク
15
UDP通信プログラム(ソケットの準備) 情報ネットワーク #include <stdio.h>
#include <strings.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> main(narg,arg) int narg; char **arg; { int sock; int s_addr; unsigned short port; struct sockaddr_in saddr; char ch; s_addr=inet_addr(arg[1]); port=atoi(arg[2]); bzero(&saddr,sizeof(struct sockaddr_in)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = s_addr; saddr.sin_port = htons(port); sock=socket(AF_INET,SOCK_DGRAM, IPPROTO_UDP); if(connect(sock, (struct sockaddr *)&saddr,sizeof(saddr)) < 0) perror("bind "); getchar(); } 情報ネットワーク
16
送信、受信の準備 if(connect(sock, (struct sockaddr *)&saddr, sizeof(struct sockaddr_in))<0){ perror("connect"); return -1; } if(bind(sock, (struct sockaddr *)&saddr, sizeof(struct sockaddr_in))<0){ perror("bind"); return -1; } 情報ネットワーク
17
岡村耕二 http://okaweb.ec.kyushu-u.ac.jp/lectures/in-ng/
TCP通信プログラミング 岡村耕二 情報ネットワーク
18
TCP通信プログラム(基本接続) 情報ネットワーク #include <stdio.h>
#include <strings.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> main(narg,arg) int narg; char **arg; { int sock,sock2,saddr2_len; int s_addr; unsigned short port; struct sockaddr_in saddr,saddr2; s_addr=inet_addr(arg[1]); port=atoi(arg[2]); bzero(&saddr,sizeof(struct sockaddr_in)); bzero(&saddr2,sizeof(struct sockaddr_in)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = s_addr; saddr.sin_port = htons(port); sock=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); switch (arg[3][0]){ case 'b': if(bind(sock, (struct sockaddr *)&saddr,sizeof(saddr)) < 0){ perror("TCPbind "); return -1; } listen(sock,8); saddr2_len = sizeof(saddr2); sock2=accept(sock,(struct sockaddr *)&saddr2,&saddr2_len); printf("connected from %s.\n",inet_ntoa(saddr2.sin_addr)); break; case 'c': if(connect(sock, (struct sockaddr *)&saddr,sizeof(saddr)) < 0){ perror("TCPconnect "); getchar(); close (sock); 情報ネットワーク
19
TCP通信プログラム(基本送受信) 情報ネットワーク #include <stdio.h>
#include <strings.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> main(narg,arg) int narg; char **arg; { int sock,sock2,saddr2_len; int s_addr; unsigned short port; struct sockaddr_in saddr,saddr2; char buf[1024]; s_addr=inet_addr(arg[1]); port=atoi(arg[2]); bzero(&saddr,sizeof(struct sockaddr_in)); bzero(&saddr2,sizeof(struct sockaddr_in)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = s_addr; saddr.sin_port = htons(port); sock=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); switch (arg[3][0]){ case 'b': if(bind(sock, (struct sockaddr *)&saddr,sizeof(saddr)) < 0){ perror("TCPbind "); return -1; } listen(sock,8); saddr2_len = sizeof(saddr2); sock2=accept(sock,(struct sockaddr *)&saddr2,&saddr2_len); printf("connected from %s.\n",inet_ntoa(saddr2.sin_addr)); bzero(buf,1024); read(sock2,buf,1024); printf("receive %s\n",buf); break; case 'c': if(connect(sock, (struct sockaddr *)&saddr,sizeof(saddr)) < 0){ perror("TCPconnect "); write(sock, arg[4], strlen(arg[4])); perror("weite"); close (sock); 情報ネットワーク
20
TCP と UDP の違い(bind) UDP: TCP bind したソケットIDから直接受信を行う
bind したソケットはID は accept により、接続要求受け付けに用いられ、accept 後、通信用のソケットIDが生成され、その ID を用いて通信が行われる。 情報ネットワーク
21
bind で与えるべきIPアドレス saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = s_addr; saddr.sin_port = htons(port); sock=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(bind(sock, (struct sockaddr *)&saddr,sizeof(saddr)) < 0){ perror("TCPbind "); 接続は誰が行うかわからない。つまり、 予想はできないし、指定できる場合は少ない。そのため、誰とでも接続が行えるように を指定する。ただし、サービスを識別するためのポート番号は適切な値にする必要がある。 情報ネットワーク
22
TCP と UDP の違い(connect) UDP: TCP 通信相手が bind していなくても connect の発行は可能
connect するためには、通信相手が先に予め、 bind/listen/accept しておく必要がある。 情報ネットワーク
23
送信、受信する関数は同じ TCP も UDP と同じく write() 関数によるソケットへの書き込みで送信を行い、read()関数によるソケットからの読み出しで受信を行う。 ただし、TCP は bind したソケットIDではなく、accept したソケットID。 int sock; char ch; read(sock,&ch,sizeof(ch)); write(sock,&ch,siezof(ch)); 情報ネットワーク
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.