by shigemk2

当面は技術的なことしか書かない

今夜わかるTCP/IP 3 トランスポート層

前回はこちら
今夜わかるTCP/IP 2 ネットワーク層 - by shigemk2

データ通信の品質管理と送受信結果のチェックを行う部分。
主なプロトコルとしてTCP(Transmission Control Protocol)と、
UDP(User Datagram Protocol)の2種類がある。

また、TELNETやHTTP、FTPなどを区別するために、ポート番号を用いる。

TCP
コネクション型サービスで、

  • 再送(時間内に受信されたという応答がなければ再送を行う)
  • チェックサム(転送途中にヘッダとデータが変化していないかチェックする)
  • フロー制御(データ通信量が一定範囲を越えないように受けとれるデータ量(ウィンドウサイズ)をやりとりし、バッファを節約する)
  • シーケンス番号(分割されたデータを元通りに戻せるよう番号をつけておく)

流れとして、

  1. クライアントからSYNセグメント(初期シーケンス番号とポート番号)をサーバに送る
  2. サーバはサーバ側で生成したSYNセグメントと、ACK(確認応答番号:SYNセグメント+1の値)を返す
  3. クライアントはサーバのSYNセグメントのACK(SYNセグメント+1の値)を返す

以上の流れを3 way hand shakeと呼ぶ。
また、一定時間セグメントはコピーされ、
ACKが返ってこなければコピーを再送する。
同じシーケンス番号のセグメントは受けとられても廃棄するので、
シーケンス番号が被ったり、セグメントが足りないという状況を防いでいる。

通信を終了したいときは、FINをやりとりすればいい。

また、TCPにはいくつかのタイマーが備わっていて、

  • 再送タイマー(ACKのタイムアウト)
  • 持続タイマー(ウィンドウサイズが0のとき、0でなくなるまで通信を停止する)
  • キープアライブタイマー(相手が通信できるかどうかを確認する時間の間隔)
  • 2MSLタイマー(コネクションがTIME_WAIT状態となっている時間を測定する)

なお、セグメントの交換数を削減するT/TCPも存在する。

UDP
コネクションレス型サービスで、チェックサムだけ行う。こちらのほうが通信速度は速いっちゃあ速いが、
信頼性は低い。

ただし、どちらもリアルタイム通信には不向きなので、
RTP(Real-Time Protocol)やRTCP(RTP Control Protocol)を利用してUDPのパケットに
タイムスタンプとシーケンス番号をつける。これによりUDPの早さに多少の正確さが保証される。

また、プライベートIPアドレスグローバルIPアドレスに変更する
NAT(Network Address Translator)やNAPT(Network Address Ports Translator)が存在する。
この技術により送信元のプライベートIPアドレスグローバルIPアドレスに変換する。
これによりグローバルIPアドレスを節約し、かつ外部からのアクセスを制御出来る。

ところで、挿絵がだんだんおかしくなっているのは気のせいだろうか?

今夜わかるTCP/IP (Network)

今夜わかるTCP/IP (Network)