最新のネットワーキングによるパフォーマンスとセキュリティの向上 – WWDC2020

Session概要

Appを高速化し最新のネットワークAPIを使用してAppをより高速、プライベート、かつセキュアにします。
IPv6、HTTP/2、TLS 1.3、Encrypted DNSなどのネットワークプロトコルについて学び、これらをAppとサーバに組み込むことで、パフォーマンスを高速化し、消費電力と熱の影響を軽減する方法について。
また、最新のセキュリティプロトコルを採用することで、App内のプライバシー保護をどのように改善できるかを説明します。 https://developer.apple.com/videos/play/wwdc2020/10111/

ネットワーク運用でパフォーマンスを最大化する方法

  • クライアント
    • 最新のネットワークAPIを使用していれば自動的に対応可能
      • 具体的にはURLSession, Networking Frameworks

パフォーマンス

  • IPv6
    • ネットワーク接続にIPv6を使用すると低遅延でありIPv4より高パフォーマンス
      • NATが減り最新のネットワーク機器が多くなることによりルーティングが改善するから
    • Macのインターネット共有をNAT64対応にし、IPv6のみのネットワークでAppの動作確認をすることはApp Storeに提出するための要件である
    • IPv6の利用率は増加傾向にあるが、IPv6接続出来てもServerが未対応だったケースも20%と多い



URLSession

  • HTTP/2 対応
    • 同一サーバへの複数リクエストを1つのコネクションで多重化する
    • コネクション結合によるパフォーマンス改善
    • ヘッダー圧縮対応による帯域幅をより活用する


ネットワークトランザクションのセキュリティ

  • TLS 1.3
    • ハンドシェイク時のパケット往復回数を1回減らすことで接続の確立を速くした
    • 形式検証による構成ミスの可能性の減少
    • iOS12, macOS mojaveからdefaultで有効
    • iOS13.4以降のURLSession, Networking Frameworkで有効化されている
    • 下記グラフはiOSでの使用率及びパフォーマンス

機動性(Mobility)

  • Multipath TCP
    • デバイスのネットワークが変わってもAppからの単一のTCP接続を継続可能。これによりAppの接続が不安定な時やユーザがネットワークに出入りした時でも接続を最初からやり直す必要がなくなる
    • クライアント側で対応するには、URLSessionConfigurationmultipathServiceType プロパティを設定する
    • Apple MusicはMultipath TCP対応により曲が途中で停止する現象は13%削減され、停止した場合でも停止中の時間が22%短縮した
  • Server側での対応

iOS 14での新たなプライバシー機能

  • ローカルネットワークの新たなプライバシー保護を入れることで向上する
    • Appやサードパーティライブラリ、SDKがネットワーク上の他のデバイスの存在を使って、ユーザの位置や身元を特定するのを防止する
      • AirPrint, AirPlay, HomeKitなど
    • ただし、マルチキャストやブロードキャストによるローカルネットワークのアクセス時はユーザの許可が必要となった
      • Appで使用する目的をAppのInfo.plistに含める必要がある
  • iOS 14とmacOS Big Surの新たな機能はセキュアなドメインの名前解決に対応している
    • DNS over TLS
    • DNS over HTTPS
  • NetworkExtensionを使ってAppを書くとDNS通信の暗号化をシステム全体で設定可能で、暗号化解決をAppの要件にすることが出来る

その他将来的な機能のプレビュー

  • HTTP/3
    • トランスポートプロトコルに新しいQUICを使用
    • Head of Lineブロッキングをさらに減らし、個別のリクエストやレスポンスの損失が無関係なメッセージを停滞させないようにする
    • モビリティサポート
      • ネットワークの変更時にセッションは途切れずスムーズに次のネットワークに接続可能
    • iOS14, macOS Big Surには試験的にHTTP/3対応のプレビューが含まれており、URLSessionを使うAppであればdeveloperの設定で有効化出来る

最新情報をチェックしよう!