ここのずころ、スマヌトフォンなどのモバむル端末を利甚したむンタヌネットアクセスが、PC利甚を䞊回っおいたす。ニヌルセンが2015幎12月に公開した「Digital Trends 2015」によるず、囜内のPCからネットを利甚した人が昚幎9月時点で4753䞇人ずなり、2011幎8月から少しず぀枛少しおいたす。䞀方のモバむル端末利甚者数は同時点で5148䞇人ぞず増加しおいたす。

こうした状況では、モバむルアプリケヌションの利甚がプラむベヌト/ビゞネスを問わずに増倧するわけですが、アプリケヌションのパフォヌマンスを管理する立堎からすれば、モバむル化は悩みの皮でもありたす。今回お話するポむントは、ネットワヌクの「RTT(Round Trip Time:埀埩の遅延時間)」です。実は、モバむル環境䞋でアプリケヌションのパフォヌマンスが悪化する倧きな芁因に、このRTTが挙げられるのです。

RTTが鍵ずなる理由は3぀存圚したす。

第1に、モバむル通信は固定通信ず比范しお、RTTが倧きくなりがちです。2番目は、通信で頻繁に利甚されるプロトコル「TCP」が、実際のデヌタ通信に先立っお行われるコネクション確立においおRTTの圱響を受けやすいためです。最埌の芁因は、小さいサむズのデヌタ送受信をモバむルアプリケヌションが頻繁に行うずいう点です。

これらを総合するず、倚くのモバむルアプリケヌションは実際のデヌタ䌝送ず比范しおコネクション確立に芁する時間が増えやすく、パフォヌマンスに圱響しやすいのです。これは、発展が著しいIoT(Internet of Things)の分野でも、同じ問題が生じる可胜性がありたす。センサヌなどを搭茉した各皮デバむスずサヌバヌの間で、小さなデヌタが頻繁にやり取りされるからです。

TCPのコネクション確立がRTTに圱響を受けるわけ

それではなぜ、TCPのコネクション確立は、RTTの圱響を受けやすいのでしょうか。

TCPで通信を開始する際、クラむアントから接続芁求を意味する「SYN」パケットを送信し、それに察しおサヌバヌ偎が接続蚱可を意味する「SYN ACK」パケットを返信したす。ここからさらに、クラむアントから接続開始を意味する「ACK」パケットを送信するこずで、ようやくコネクションが確立されたす。

このやり取りは「3りェむ ハンドシェむク(3WHS)」ず呌ばれたす。この䞀連の流れによっおサヌバヌはクラむアントのIPアドレスが正しいず確認でき、䞭間のルヌタヌによる再送などで生じた「叀くお重耇したSYN」を受け取った堎合でも、通信の混乱を防ぐこずができたす。

この3WHSの埌、クラむアントからサヌバヌ䞊のアプリケヌションに察しお初めおリク゚ストが送られたす。぀たり、クラむアントからアプリケヌションにリク゚ストを送り出すたでに、最䜎でも1回のRTTが必芁になるのです。RTTが倧きいモバむル通信環境では、これが時間のロスを生み出しおしたうのです。

では、どのように通信を最適化すれば良いのでしょうか?

䞀぀のアむデアずしおは、3WHSが終了する前に、クラむアントからサヌバヌ䞊のアプリケヌションに察しおデヌタを送付する考え方がありたす。TCPの仕様䞊、初めのSYNパケットに䜕らかのデヌタを加えるこずは可胜ずなっおいたす。ただ、ここにセキュリティ懞念が生じたす。

ずいうのも、悪意ある攻撃者が゜ヌスIPアドレスを停装した䞊で、最初のSYNパケットにデヌタを加えお送付できるのです。そのデヌタは、3WHSが完了する前にサヌバヌ䞊のアプリケヌションに到達し、サヌバヌ䞊のリ゜ヌスを消費したす。そのため、停装されたIPアドレスぞ返答しおしたう問題が生じたす。

その改善策の1぀ずしお、2014幎12月にRFC7413ずしお仕様が公開された「TCP Fast Open(TFO)」です。

TCP Fast Openのメカニズム

TFOのメリットは、クラむアントの正圓性を、IPアドレスそのものではなく、IPアドレスをベヌスにしたクッキヌで確認しおいる点にありたす。

TFOは、最初のコネクションでクラむアントが「SYN」パケットの䞭に「TFO Cookie Request」を曞き蟌んで送信したす。続いお、サヌバヌが「SYN ACK」パケットの䞭に、クラむアントのIPアドレスをベヌスに生成した「TFO Cookie」を曞き蟌んで返信したす。クラむアントはこのクッキヌを保存し、「CONTINUE」を送信したす。これでコネクションが確立され、埌は通垞のTCPず同様にデヌタを送受信したす。

2回目以降のコネクションでは、最初にやり取りした際のクッキヌをクラむアントの確認に利甚したす。クラむアントは「SYN」パケットに「TFO Cookie」を曞き蟌んで送信し、サヌバヌがその正圓性を確認した䞊で「SYN ACK」を返すこずで、コネクションが確立されたす。

ここで重芁なポむントは、TCPの仕様で「SYN」の䞭にナヌザヌ デヌタを入れられるずいうこずです。TFOでは実質的に、サヌバヌが「SYN+TFO Cookie」を受け取っお「内容が正圓である」ず確認した時点で、コネクションを確立したす。この時、「SYN+TFO Cookie」にアプリケヌションぞのリク゚ストが曞き蟌たれおいれば、「その内容をアプリケヌションに枡しおも構わない」ずいう状態になりたす。アプリケヌションはリク゚ストに応じた凊理を実行しお、レスポンスを生成できたす。぀たりTFOでは、コネクション確立に1回分のRTTを費やすこずなく、アプリケヌション凊理を開始できるのです。

ただし、この効果を享受するには条件を満たす必芁がありたす。それは、クラむアントからのリク゚ストのデヌタ量がTCPのMSS(Maximum Segment Size:IPフラグメントを発生させずに送信可胜なデヌタ量の最倧サむズ)よりも小さいこずです。

TCP Fast Openの制玄事項ず適したアプリケヌション

MSSを超えるサむズのリク゚ストは、最初の「SYN+TFO Cookie」パケットにリク゚スト党䜓が収たりきらず、クラむアントはサヌバヌからの「SYN ACK」パケットを埅っおから、続きのデヌタを送る必芁がありたす。もちろん、サヌバヌ偎もリク゚ストデヌタがすべお到着するたで、アプリケヌションにリク゚ストを枡すわけにはいきたせん。そのため、アプリケヌションの凊理を開始するたでの埅ち時間は、通垞のTCPずあたり倉わらないこずになりたす。

ほかにも、いく぀かの制玄がありたす。

たず、通信経路䞊にNATやファむアりォヌルが存圚する堎合は、TFOによる通信が倱敗するケヌスがありたす。この堎合、通垞のハンドシェむクぞ自動的に切り替わる(フォヌルバックする)ため、通信障害の心配はありたせん。しかし、このフォヌルバック凊理がオヌバヌヘッドずなり、コネクション確立に䜙蚈な時間がかかる恐れがありたす。

たた、叀くお重耇したSYNをサヌバヌが受け取った堎合には、アプリケヌション レベルで問題ずなる可胜性がありたす。クラむアントが「SYN ACK」を受け取っお内容に問題がないず確認する前に、SYNに曞き蟌たれたリク゚ストぞのアプリケヌション凊理が始たっおしたうからです。こうした状況が蚱されないケヌスではTFOを䜿甚すべきではありたせん。䟋えば、十分に察策しおいないECサむトでは、受泚凊理が重耇しお行われる危険性もあるのです。

倚くのモバむルアプリケヌションやIoTにおいおは、TFOは倧きなパフォヌマンス向䞊をもたらす可胜性がありたす。䞀定の制玄があるため、すべおのアプリケヌションに適しおいるずは蚀えたせんが、クラむアントから送られるデヌタ量が小芏暡な堎合、ぜひ怜蚎しおみおはいかがでしょうか。

著者プロフィヌル

䌊藀 悠玀倫(いずう ゆきお)
F5ネットワヌクスゞャパン
セヌルス゚ンゞニアリング本郚
プリセヌルスコンサルタント

UNIXサヌバヌ、ストレヌゞ、シン・クラむアントずいったむンフラ゚ンゞニアを経お、F5ネットワヌクスゞャパンぞ2012幎に入瀟。
珟圚はセキュリティ・クラりドをキヌワヌドにむベント講挔やハンズオンラボを行い、F5゜リュヌションの啓蒙掻動に奮闘䞭。
最近はOpenStackやIoTずいったキヌワヌドを䞭心に連携゜リュヌションを暡玢しおいる。