TCP は暗号化されていない。
無線LAN など、途中経路上でパケットを覗き見られると、通信内容が分かる。
TLS は TCP 通信路上に暗号通信路を構築できる。
(分かっている人も多いとは思いますが)同じ暗号通信路が使える SSH と TLS は別物です。
SSH は(主に) PC へのログインに使用するために開発されました。
なので、使用するためには、サーバー側のアカウント情報が(一般的には)必要になります。
TLS は汎用的な暗号通信路を提供します。
(唐突ですが)以下のような話を聞いたことはありませんか?
TCP の性質と違うことない?
送った情報すべてに番号を割り振る。
受け取った情報をチェックして、送った順番通りに並べ、順番に受け取る。
情報が正しいか、毎回 CRC チェックを行っている。
途中抜けている番号やエラーがあれば、再送を要求する。
通信開始までに 3 handshake & 鍵交換と、何往復ものパケット交換が必要。
パケット消失やデータ化けがあると、パケットの再送要求しか復元方法がない。
(触れてないけど) OS のカーネルレベルで実装されているため、一般アプリでカスタマイズすることはほぼ不可能。
同じサーバーで条件があえば、 3 handshake すらも必要なし。
エラー訂正符号を使用しているのは確実なのですが、どの程度の復元能力があるのかはまだ把握していません。
たくさんの数学的知識を使うので、ライブラリを使用するのでなければ、現実的ではありません。
プロトコルは大変難しく、普通のプログラマが組めるものではなさそう。
通信品質が安定している環境下では TCP よりもはるかに遅いし、 CPU パワーも必要。
規格にまだ若干の揺れがあり、使うライブラリ同士によって通信できないことがある。
gQUIC(Google 製)と iQUIC(IETF勧告)には互換性がない。
(最近の QUIC は)ALPN に対応している。
大きめの UDP が疎通出来ないといけない。
QUIC を使おう!
$theme: gaia template: invert