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