takashi kono's blog

コーヒーとキーボードと共に何かを記録していくブログ

はじめてUNIXで仕事をする人が読む本 の備忘録 16 TCPとUDP

はじめてUNIX で仕事をする人が読む本 の備忘録 16

お世話になった本

この連載ブログを書くにあたり、お世話になった本がこちら。LPICと被っているところもありますが、実務での使い方なんかも扱っており、良書だと思います。

ネットワーク

第16章 TCPUDP

TCPUDPトランスポート層プロトコル

ポート番号

HTTP 80
HTTPS 443 とか有名ですよね。

UDP

UDPは単一のデータグラムを送受信する際に使用されるプロトコルである。
データの到達性などは保証しない。

TCP

TCPは連続するデータストリームの送受信をする際に使用されるプロトコル
連続性と到達性を保証する仕組みが組み込まれている。
信頼性が必要なアプリケーションにおいて使用される。

TCP のコネクション

TCPでは、まずはじめにコネクションの確率を行う。開始と終了の合図。
いわゆる、「3ウェイハンドシェイク」
終了するときは、FIN > ACK > FIN > ACK とやりとりして終わる。片方だけFINを送った状態をハーフクローズという。

TCP の通信

TCPでは切れ目のない連続したデータを扱えるが、実際のデータの送受信はIPレイヤにおいてパケット単位に分割される。これをTCPレイヤで結合し、連続するデータであるかのようにアプリケーションに提供していく。
キーワードは、シーケンス番号。これが付与されるので、パケットの順序性を保証できる。

TCP の通信の制御

基本は、データを送信して、ACKが帰ってきたら次のデータを送信する。という動き。
しかし、これでは高速にデータのやりとりが出来ない。そこで出てきた概念がウィンドサイズだ。
ある程度まとまって送信しても良いデータ量を決めておく。ACKが帰ってくる前に一気に送ってしまうのだ。
ACKの帰ってくるまでデータを送信側で保持しておくことで、再送要求に対応する。

この機能を利用して、一度に送信する量を変更させることで、輻輳制御も可能になる。

他にも一度にACKを返すほうが効率的ということで、遅延ACK等の制御もある

TCPUDP の使い分け

TCPだけで十分じゃないかという人もいるかもしれないが、リアルタイム性の要求されるパケットに再送されても意味があまりないので、その場合はUDPを使うことが多い。
例えば、音声・動画のストリーミング通信等である。
データ再送が不要で、むしろ通信の遅延のほうが問題になるようなアプリケーションの時にUDPが使われる。


以上で、第16章 TCPUDP を終わります。
次回は、第17章 アプリケーションプロトコル です。