連載第9回
|
|
確実だけれど…… |
最近、通販を利用したときのことです。いくつか注文した中の1つの入荷が遅れ、販売店がその品の入荷を待って商品一式を発送したため、在庫が十分にあった商品まで到着が遅れてしまいました。幸いそのときは大した遅れではなく、何の問題もなかったのですが、発送を確実にするために注文品一式をまとめるのも、客にとっては良しあしだなぁと感じました。
●確かなTCPのどこがいけないのでしょうか?
実は、正確な通信を実現するTCPにも、同じような性質があります。思い出してみてください。TCPは途中のデータが抜けたら、相手に再送を依頼し、抜けたデータが送られてくるのを待ちます。この間、先に到着したデータは、ずっと待たされているんです。
この様子を、データを受け取るプログラムから見ると「TCPって正しいデータを送ってくれるけど、いつデータが到着するかは予想できないなあ」ということになります。もし、プログラムの側から、相手からの再送を待っていることを見分けたり、それを止めさせることができれば話も違いますが、それもできません。
シンプル&きびきびを求めて |
●TCPが犠牲にしたものとは?
TCPのウリである「確かな通信を実現すること」は、基本的にどんなアプリケーションにとっても都合がいいはずです。ここで考えてみたいのは、確かな通信を実現するために、何か犠牲になっているものがないか、ということです。もし犠牲になってしまったものがアプリケーションにとって必要な機能だったら、いくら確かな通信を実現するTCPといっても、あまりうれしくないでしょう。
TCPが犠牲にしているもの。その1つは到着したデータの引き渡しの遅れです。始めにも書いたとおり、データを本来の順序どおり取りそろえようとするTCPは、途中のデータが再送待ちになってしまうと、それ以降のデータをしばらく蓄えています。
この様子をTCPのウィンドウの動きから考えてみましょう。連載第5回「それでも不正確なデータを受け取ったらどうするの?」にその説明があります。図3の(3)で2番のデータを受信し損なうと、3番、4番、5番のデータを受信しても、ウィンドウを移動できません。(7)で2番を受信したら、やっとウィンドウを動かすことができます。プログラムがデータを受け取ることができるのもこのタイミングになります。そのため、3〜5番のデータは受け取ったタイミングよりかなり遅れてプログラムに引き渡されたことになります。この遅れは、再送の仕組みを使う以上は、どうしても起こってしまいます。
もし、プログラムが定期的にデータを受信することを期待しているとしたら、この待ち時間はとても厄介です。むしろ、データが多少抜けたり誤ったりしてもいいから、その後に続くデータをどんどん渡してくれる方がありがたい場合もあるでしょう。
TCPが犠牲にしているものの2つ目は、通信を始めるときや終えるときの手間です。正確な通信を目指すTCPは、通信を始めるとき、相手と通信のコントロールに必要な情報をやり取りします。また終えるときにも、送り残しデータが発生しないよう、慎重に通信を終了します。
正確な通信をするためには、この確認作業はとても大切です。もしこの準備作業をしなければ、相手が通信できる状態ではないのにデータを送ってしまう可能性もあり、正確な通信どころではありません。
しかし、非常にたくさんの相手からデータを受け取って処理しなければならない場合には、これらの手間もばかになりません。データの処理能力を高めるために、多少、通信の信頼性が下がっても、開始と終了の手間を減らしたいという場合もあるはずです。
データが定期的に届かない場合がある、通信の開始に手間が掛かる、といったTCPの特性が邪魔になる場合、こういった特性を持たないもう1つのトランスポートプロトコルUDPを使う方法があります。
今回取り上げるこのUDPは、複雑な処理で正確な通信を目指すTCPとは正反対に、シンプルな処理できびきび機能する通信を目指しています。UDPは再送などの仕組みを一切持っていません。そのため再送待ちのデータの遅れは起こらず、定期的にデータを受け取りやすくなります。また通信を始めるときの準備作業も不要で、いきなり相手にデータを送ることができます。
|
関連リンク | |
連載:TCP/IPアレルギー撲滅ドリル【超実践編】(上位レイヤ編) 連載:インターネット・プロトコル詳説 連載:ルータの仕組みを学ぼう ホストのネット接続は正しく行われているか? 〜netstatによるネットワーク設定の確認〜 |
「Master of IP Network総合インデックス」 |
- 完全HTTPS化のメリットと極意を大規模Webサービス――ピクシブ、クックパッド、ヤフーの事例から探る (2017/7/13)
2017年6月21日、ピクシブのオフィスで、同社主催の「大規模HTTPS導入Night」が開催された。大規模Webサービスで完全HTTPS化を行うに当たっての技術的、および非技術的な悩みや成果をテーマに、ヤフー、クックパッド、ピクシブの3社が、それぞれの事例について語り合った - ソラコムは、あなたの気が付かないうちに、少しずつ「次」へ進んでいる (2017/7/6)
ソラコムは、「トランスポート技術への非依存」度を高めている。当初はIoT用格安SIMというイメージもあったが、徐々に脱皮しようとしている。パブリッククラウドと同様、付加サービスでユーザーをつかんでいるからだ - Cisco SystemsのIntent-based Networkingは、どうネットワークエンジニアの仕事を変えるか (2017/7/4)
Cisco Systemsは2017年6月、同社イベントCisco Live 2017で、「THE NETWORK. INTUITIVE.」あるいは「Intent-based Networking」といった言葉を使い、ネットワークの構築・運用、そしてネットワークエンジニアの仕事を変えていくと説明した。これはどういうことなのだろうか - ifconfig 〜(IP)ネットワーク環境の確認/設定を行う (2017/7/3)
ifconfigは、LinuxやmacOSなど、主にUNIX系OSで用いるネットワーク環境の状態確認、設定のためのコマンドだ。IPアドレスやサブネットマスク、ブロードキャストアドレスなどの基本的な設定ができる他、イーサネットフレームの最大転送サイズ(MTU)の変更や、VLAN疑似デバイスの作成も可能だ。
|
|