當上世紀九十年代互聯網開始被廣泛使用的時候,其大部分的通訊只使用幾個協議:IPv4 協議路由這些數據包,TCP 協議轉發這些包到連接上,SSL(及后來的 TLS)協議加密連接,DNS 協議命名那些所要連接的主機,而 HTTP 協議是最常用的應用程序協議。
多年以來,這些核心的互聯網協議的變化幾乎是微乎其微的:HTTP 增加了幾個新的報文頭和請求方式,TLS 緩慢地進行了一點小修改,TCP 調整了擁塞控制,而 DNS 引入了像 DNSSEC 這樣的特性。這些協議看起來很長時間都一成不變(除了已經引起網絡運營商們的大量關注的 IPv6)。
因此,希望了解(甚至有時控制)互聯網的網絡運營商、供應商和決策者對這些協議采用的做法是基于其原有工作方式 —— 無論是打算調試問題、提高服務質量或施加政策。
現在,核心互聯網協議的重要改變已經開始了。雖然它們意圖與互聯網大部分兼容(因為,如果不兼容的話,它們不會被采納),但是它們可能會破壞那些在協議中沒有規定的地方,或者根本就假設那些地方不存在變化。
為什么我們需要去改變互聯網有大量的因素推動這些變化。
首先,核心互聯網協議的局限性越來越明顯,尤其是考慮到性能的時候。由于在應用和傳輸協議方面的結構性問題,網絡沒有得到高效使用,導致終端用戶認為性能不能滿足要求(特別是,網絡延遲)。
這就意味著人們有強烈的動機來演進或者替換這些協議,因為有大量的經驗表明,即便是很小的性能改善也會產生影響。
其次,演進互聯網協議的能力 —— 無論在任何層面上 —— 會隨著時間的推移變得更加困難,這主要是因為上面所討論的對網絡的非預期使用。例如,嘗試去壓縮響應的HTTP代理服務器使得部署新的壓縮技術更困難;中間設備中的TCP優化使得部署對TCP的改進越來越困難。
最后,我們正處在一個越來越多地使用加密技術的互聯網變化當中,首次激起這種改變的事件是,2015年Edward Snowden的披露事件(LCTT 譯注:指的是美國中情局雇員斯諾登的事件)。那是一個單獨討論的話題,但是與之相關的是,加密技術是最好的工具之一,我們必須確保協議能夠進化。
讓我們來看一下都發生了什么,接下來會出現什么,它對網絡有哪些影響,和它對網絡協議的設計有哪些影響。
HTTP/2HTTP/2(基于 Google 的 SPDY)是第一個重大變化 —— 它在2015年被標準化。它將多個請求復用到一個TCP連接上,從而避免了客戶端排隊請求,而不會互相阻塞。它現在已經被廣泛部署,并且被所有的主流瀏覽器和web服務器支持。
從網絡的角度來看,HTTP/2 帶來了一些顯著變化。首先,這是一個二進制協議,因此,任何假定它是HTTP/1.1的設備都會出現問題。
這種破壞性問題是導致HTTP/2中另一個重大變化的主要原因之一:它實際上需要加密。這種改變的好處是避免了來自偽裝的 HTTP/1.1 的中間人攻擊,或者一些更細微的事情,比如strip headers或者阻止新的協議擴展 —— 這兩種情況都在工程師對協議的開發中出現過,導致了很明顯的支持問題。
當它被加密時,HTTP/2 請求也要求使用 TLS/1.2,并且將一些已經被證明是不安全的算法套件列入黑名單 —— 其效果只允許使用短暫密鑰ephemeral keys。關于潛在的影響可以去看 TLS 1.3 的相關章節。
最終,HTTP/2 允許多個主機的請求被 合并到一個連接上,通過減少頁面加載所使用的連接(從而減少擁塞控制的場景)數量來提升性能。
例如,你可以對 www.example.com 建立一個連接,也可以將這個連接用于對 images.example.com 的請求。而未來的協議擴展也允許將其它的主機添加到連接上,即便它們沒有被列在最初用于它們的 TLS 證書中。因此,假設連接上的通訊被限制于它初始化時的目的并不適用。
值得注意的是,盡管存在這些變化,HTTP/2 并沒有出現明顯的互操作性問題或者來自網絡的沖突。
TLS 1.3TLS 1.3 剛剛通過了標準化的最后流程,并且已經被一些實現所支持。
不要被它只增加了版本號的名字所欺騙;它實際上是一個新的 TLS 版本,全新打造的 “握手”機制允許應用程序數據從頭開始流動(經常被稱為 ‘0RTT’)。新的設計依賴于短暫密鑰交換,從而排除了靜態密鑰。
這引起了一些網絡運營商和供應商的擔心 —— 尤其是那些需要清晰地知道那些連接內部發生了什么的人。
例如,假設一個對可視性有監管要求的銀行數據中心,通過在網絡中嗅探通訊包并且使用他們的服務器上的靜態密鑰解密它,它們可以記錄合法通訊和識別有害通訊,無論是來自外部的攻擊,還是員工從內部去泄露數據。
TLS 1.3 并不支持那些竊聽通訊的特定技術,因為那也是 一種針對短暫密鑰防范的攻擊形式。然而,因為他們有使用更現代化的加密協議和監視他們的網絡的監管要求,這些使網絡運營商處境很尷尬。
關于是否規定要求靜態密鑰、替代方式是否有效、并且為了相對較少的網絡環境而減弱整個互聯網的安全是否是一個正確的解決方案有很多的爭論。確實,仍然有可能對使用 TLS 1.3 的通訊進行解密,但是,你需要去訪問一個短暫密鑰才能做到,并且,按照設計,它們不可能長時間存在。
在這一點上,TLS 1.3 看起來不會去改變以適應這些網絡,但是,關于去創建另外一種協議有一些傳言,這種協議允許第三方去偷窺通訊內容,或者做更多的事情。這件事是否會得到推動還有待觀察。
QUIC在 HTTP/2 工作中,可以很明顯地看到 TCP 有相似的低效率。因為 TCP 是一個按順序發送的協議,一個數據包的丟失可能阻止其后面緩存區中的數據包被發送到應用程序。對于一個多路復用協議來說,這對性能有很大的影響。
QUIC 嘗試去解決這種影響而在 UDP 之上重構了 TCP 語義(以及 HTTP/2 流模型的一部分)。像 HTTP/2 一樣,它始于 Google 的一項成果,并且現在已經被 IETF 接納作為一個 HTTP-over-UDP 的初始用例,其目標是在 2018 年底成為一個標準。然而,因為 Google 已經在 Chrome 瀏覽器及其網站上部署了 QUIC,它已經占有了超過 7% 的互聯網通訊份額。
除了大量的通訊從 TCP 到 UDP 的轉變(以及隱含的可能的網絡調整)之外,Google QUIC(gQUIC)和 IETF QUIC(iQUIC)都要求全程加密;并沒有非加密的 QUIC。
iQUIC 使用 TLS 1.3 來為會話建立密鑰,然后使用它去加密每個數據包。然而,由于它是基于 UDP 的,許多 TCP 中公開的會話信息和元數據在 QUIC 中被加密了。
事實上,iQUIC 當前的 ‘短報文頭’ 被用于除了握手外的所有包,僅公開一個包編號、一個可選的連接標識符和一個狀態字節,像加密密鑰輪換計劃和包字節(它最終也可能被加密)。
其它的所有東西都被加密 —— 包括 ACK,以提高 通訊分析 攻擊的門檻。
然而,這意味著通過觀察連接來被動估算 RTT 和包丟失率將不再變得可行;因為沒有足夠多的信息。在一些運營商中,由于缺乏可觀測性,導致了大量的擔憂,它們認為像這樣的被動測量對于他們調試和了解它們的網絡是至關重要的。
為滿足這一需求,它們有一個提議是 ‘Spin Bit’ — 這是在報文頭中的一個回程翻轉的位,因此,可能通過觀察它來估算 RTT。因為,它從應用程序的狀態中解耦的,它的出現并不會泄露關于終端的任何信息,也無法實現對網絡位置的粗略估計。
DOH即將發生的變化是 DOH — DNS over HTTP。大量的研究表明,對網絡實施政策干預的一個常用手段是通過 DNS 實現的(無論是代表網絡運營商或者一個更大的權力機構)。
使用加密去規避這種控制已經 討論了一段時間了,但是,它有一個不利條件(至少從某些立場來看)— 它可能與其它通訊區別對待;例如,通過它的端口號被阻止訪問。
DOH 將 DNS 通訊搭載在已經建立的 HTTP 連接上,因此,消除了任何的鑒別器。希望阻止訪問該 DNS 解析器的網絡只能通過阻止對該網站的訪問來實現。
例如,如果 Google 在 www.google.com 上部署了它的 基于 DOH 的公共 DNS 服務,并且一個用戶配置了它的瀏覽器去使用它,一個希望(或被要求的)被停止訪問該服務的網絡,將必須阻止對 Google 的全部訪問(向他們提供的服務致敬!)(LCTT 譯注:他們做到了)。
DOH 才剛剛開始,但它已經引起很多人的興趣,并有了一些部署的傳聞。通過使用 DNS 來實施政策影響的網絡(和政府機構)如何反應還有待觀察。
僵化和潤滑讓我們返回到協議變化的動機,有一個主題貫穿了這項工作,協議設計者們遇到的越來越多的問題是網絡對流量的使用做了假設。
例如,TLS 1.3 有一些臨門一腳的問題是中間設備假設它是舊版本的協議。gQUIC 將幾個對 UDP 通訊進行限流的網絡列入了黑名單,因為,那些網絡認為 UDP 通訊是有害的或者是低優先級的。
當一個協議因為已有的部署而 “凍結” 它的可擴展點,從而導致不能再進化,我們稱它為 已經僵化了 。TCP 協議自身就是一個嚴重僵化的例子,因此,太多的中間設備在 TCP 協議上做了太多的事情,比如阻止了帶有無法識別的 TCP 選項的數據包,或者,“優化”了擁塞控制。
防止僵化是有必要的,確保協議可以進化以滿足未來互聯網的需要;否則,它將成為一個“公共災難”,一些個別網絡的行為 —— 雖然在那里工作的很好 —— 但將影響整個互聯網的健康發展。
有很多的方式去防止僵化;如果被討論的數據是加密的,它并不能被除了持有密鑰的人之外任何一方所訪問,阻止了干擾。如果擴展點是未加密的,但是通常以一種可以明顯中斷應用程序的方法使用(例如,HTTP 報頭),它不太可能受到干擾。
協議設計者不能使用加密的擴展點不經常使用的情況下,人為地利用擴展點——我們稱之為 潤滑 它。
例如,QUIC 鼓勵終端在 版本協商 中使用一系列的誘餌值,來避免假設它的實現永遠不變化(就像在 TLS 實現中經常遇到的導致重大問題的情況)。
網絡和用戶除了避免僵化的愿望外,這些變化也反映出了網絡和它們的用戶之間關系的進化。很長時間以來,人們總是假設網絡總是很仁慈好善的 —— 或者至少是公正的 —— 但這種情況是不存在的,不僅是 無孔不入的監視,也有像 Firesheep 的攻擊。
因此,當那些網絡想去訪問一些流經它們的網絡的用戶數據時,互聯網用戶的整體需求和那些網絡之間的關系日益緊張。尤其受影響的是那些希望去對它們的用戶實施政策干預的網絡;例如,企業網絡。
在一些情況中,他們可以通過在它們的用戶機器上安裝軟件(或一個 CA 證書,或者一個瀏覽器擴展)來達到他們的目的。然而,在網絡不擁有或無法訪問計算機的情況下,這并不容易;例如,BYOD 已經很常用,并且物聯網設備幾乎沒有合適的控制接口。
因此,在 IETF 中圍繞協議開發的許多討論,觸及了企業和其它的 “葉子” 網絡有時相互競爭的需求,以及互聯網整體的好處。
參與為了讓互聯網在以后工作的更好,它需要為終端用戶提供價值、避免僵化、讓網絡有序運行。現在正在發生的變化需要滿足所有的三個目標,但是,人們需要網絡運營商更多的投入。
如果這些變化影響你的網絡 —— 或者沒有影響 —— 請在下面留下評論。更好地可以通過參加會議、加入郵件列表、或者對草案提供反饋來參與 IETF 的工作。
感謝 Martin Thomson 和 Brian Trammell 的評論。
本文作者 Mark Nottingham 是互聯網架構委員會的成員和 IETF 的 HTTP 和 QUIC 工作組的聯席主席。
轉載自Linux中國,原文標題《互聯網協議正在發生變化》