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

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

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

機動性(Mobility)
- Multipath TCP
- デバイスのネットワークが変わってもAppからの単一のTCP接続を継続可能。これによりAppの接続が不安定な時やユーザがネットワークに出入りした時でも接続を最初からやり直す必要がなくなる
- クライアント側で対応するには、
URLSessionConfiguration
のmultipathServiceType
プロパティを設定する - Apple MusicはMultipath TCP対応により曲が途中で停止する現象は13%削減され、停止した場合でも停止中の時間が22%短縮した
- Server側での対応
- https://multipath-tcp.org に従い対応する必要がある
iOS 14での新たなプライバシー機能
- ローカルネットワークの新たなプライバシー保護を入れることで向上する
- Appやサードパーティライブラリ、SDKがネットワーク上の他のデバイスの存在を使って、ユーザの位置や身元を特定するのを防止する
- AirPrint, AirPlay, HomeKitなど
- ただし、マルチキャストやブロードキャストによるローカルネットワークのアクセス時はユーザの許可が必要となった
- Appで使用する目的をAppのInfo.plistに含める必要がある
- Appやサードパーティライブラリ、SDKがネットワーク上の他のデバイスの存在を使って、ユーザの位置や身元を特定するのを防止する
- 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の設定で有効化出来る

