前回はこちら
今夜わかるTCP/IP 2 ネットワーク層 - by shigemk2
データ通信の品質管理と送受信結果のチェックを行う部分。
主なプロトコルとしてTCP(Transmission Control Protocol)と、
UDP(User Datagram Protocol)の2種類がある。
また、TELNETやHTTP、FTPなどを区別するために、ポート番号を用いる。
TCP
コネクション型サービスで、
- 再送(時間内に受信されたという応答がなければ再送を行う)
- チェックサム(転送途中にヘッダとデータが変化していないかチェックする)
- フロー制御(データ通信量が一定範囲を越えないように受けとれるデータ量(ウィンドウサイズ)をやりとりし、バッファを節約する)
- シーケンス番号(分割されたデータを元通りに戻せるよう番号をつけておく)
流れとして、
- クライアントからSYNセグメント(初期シーケンス番号とポート番号)をサーバに送る
- サーバはサーバ側で生成したSYNセグメントと、ACK(確認応答番号:SYNセグメント+1の値)を返す
- クライアントはサーバの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アドレスを節約し、かつ外部からのアクセスを制御出来る。
ところで、挿絵がだんだんおかしくなっているのは気のせいだろうか?
- 作者: 上野宣
- 出版社/メーカー: 翔泳社
- 発売日: 2004/12/09
- メディア: 単行本
- クリック: 35回
- この商品を含むブログ (39件) を見る