米グーグルは、WebサービスやモバイルOSのAndroidを事業の中心に据えているため、Webアクセスやモバイル端末向けにTCPを最適化する技術を活発に提案している。
その1つが、「TCPファストオープン」(TFO)である。これは、3ウェイハンドシェークの代替とされる新しいTCPコネクション確立手法である。
通常の3ウェイハンドシェークでは前述のように、(1)クライアント側からの接続要求、(2)その接続要求に対するサーバーの確認応答とサーバー側の接続要求、(3)クライアント側からの確認応答――という方法でコネクションを確立している。そのため、コネクション確立のたびにクライアントとサーバーの間で3回のやり取りが発生してしまう。
TFOでは、Cookieを使って確認応答のやり取りを減らしつつ、接続時の確認を実施する。Cookieとは、クライアントが以前に接続したかどうかサーバーが確認するために使うデータのこと。HTTPでよく使われるが、TFOもそれと同様の使い方をする▼。
最初の接続時は、通常のTCPと同様に3ウェイハンドシェークを行う。ただし、サーバーはSYN+ACKを返す際に、クライアントのIPアドレスから生成したCookieも一緒にクライアントに送る。クライアントが次にサーバーへ接続するときには、SYNだけではなく、サーバーから受け取ったCookieとアプリのデータを一緒に送る。サーバーはCookieを見てクライアントを確認し、正しければACKを返すことなくデータを受け取って処理する。Cookieにより、クライアントはコネクション確立とデータ送信を一度に行える▼。
HTTPのCookie(HTTP Cookie)は、TCPのデータ部分で運ばれるHTTPヘッダーに格納される。一方、TFOで使われるCookie(TFO Cookie)は、TCPヘッダーのオプションフィールドに格納される。
接続要求と確認応答の往復を省けることから「0-RTT」とも呼ばれる。
1つのコネクションで並行転送
グーグルは、TCP接続を集約してWebブラウジングを高速化する「SPDY」という仕組みも開発した。既に搭載したWebブラウザーもある。グーグルの「Google Chrome」や米モジラ・ファウンデーションの「Firefox」などだ。「HTTP/2.0」の基盤技術に取り入れられる。
Webブラウザーは通常、ページをできるだけ速く表示するために、複数のTCPコネクションをサーバーと結び、ページを構成する複数のデータを同時並行でダウンロードする。しかし、多数のコネクションを同時に張るのは、ブラウザーとサーバーの両方に負担がかかる。
そこでSPDYでは、1本のTCPコネクションに複数のHTTPリクエスト/レスポンスを集約する。そうすることで、少ない負担でサーバーからのレスポンスを高速化し、画面を素早く表示できる。サーバー側でも複数のTCPコネクションを1本で処理できるため、性能向上が見込める。逆に言えば、同じハードウエア性能でより多くのTCPコネクションを収容できる。