WebRTC,P2P技術,IPv6的一些思考

本文涵蓋計算機網絡,軟件等多方面的知識。

不過放心,這篇文章不會只告訴你p2p”是什麼“,也不會僅僅告訴你”爲什麼“,而要深刻探討它的設計”是否合理“。

傳統計算機行業 = IT行業 + 軟件行業

作爲一個網絡工程出身的假工程師,我雖然半道轉行做軟件,但仍然持續關注着IT行業的發展。這不,近年來成熟起來的WebRTC技術更是將web與網絡這兩個毫不相關的科研方向結合了起來:web是什麼?web是軟件行業的主流方向,屬於互聯網應用技術,網絡呢?網絡是IT運維的一個方向,屬於互聯網建設技術。

然而,沒有完美的層次模型,任何人爲劃分的層次化系統都不可避免的需要層次之間的妥協,就像我們應用層編程仍然要考慮採用TCP還是UDP一樣。沒有網絡基礎的程序員們碰到WebRTC一定一頭霧水,甚至連p2p都不知道是啥,我來爲大家解惑。

稍微有點網絡常識的人都知道,在互聯網上通訊理應是很簡單的:一臺電腦訪問另一臺電腦的ip地址即可,根本不需要服務器。既然微信不會保留用戶的聊天記錄,爲啥還需要微信服務器呢?很顯然,我們聊天的時候並不是p2p的,而是通過服務器來交換消息。稍微有點常識的人都知道這種通過第三方服務器來代理“聊天”的方式遠不如2臺電腦直接聊天來的快,而且還能避免隱私泄露。

注:p2p指peer to peer,對等體到對等體:在網絡上2點之間直接交流而不走中間的服務器叫做p2p通訊。

去中心化通信的問題

那爲啥微信客戶端不能替你直接呼叫你的好友,非要讓微信服務器代你呢?有許多原因,原因之一是你不知道好友的ip地址。

。。。

這個理由看似合情合理,那如果知道呢?也不行,因爲IP地址是地理地址,每個省每個市都有不同的ip地址(比如南京市電信就有超過65536個地址),你可以做一趟地鐵,每過5站查一次stun服務,每次都能看到不同的ip地址。

stun服務可以查詢到自己在互聯網上的ip地址,是一種廉價的服務,效果等同於百度搜索”IP地址“關鍵字得到的結果。常用的stun服務器來自谷歌:stun:stun.l.google.com:19302

所以,一個人在地球上是不斷運動的,即使你們知道對方的ip地址,當好友走到了別的地方換了一個ip,你們的通訊就中斷了,好友也不可能在中斷前告訴你新的ip地址,因爲這樣的話他所有的好友都要通知一遍,顯然是不合理的。(當然,在網絡聊天出現之前真有人這麼做)

那怎麼辦呢,我們希望ip地址變化之後只要通知一個人”中心管理者“,辦法是在互聯網上設置一個不動的,或很少移動的服務器(如微信服務器)來維護所有用戶的ip地址(以及端口號),我們想知道好友的ip地址時就向管理者去詢問,同時還要隨時把自己的ip地址彙報給管理者,以便讓好友可以隨時找到自己。這樣一來,問題就解決了。這就是WebRTC的工作原理。

在端到端通信時代,在網絡上定位一個對等體除了ip地址還需要端口號,端口號是對地理地址的進一步劃分(比如一臺電腦有多個人使用)。所以必須知道對方的ip和端口號才能與之通信。

這幅圖描述了webRTC大致的原理,其中signalling就是交換ip和端口以及協議協商的過程。值得一提的是,signalling沒有強制的標準,並不一定得通過服務器來交換,你可以採用任何方式,通過其他網絡,郵件,信鴿,甚至順豐速運都行,只要達到交換地址的目的即可。

但是signalling推薦使用UDP傳輸,之前的stun服務也是基於UDP的,從這個趨勢可以看出,UDP正在走向主流,正在逐漸挑戰着TCP的地位。


講完了?感覺和其他教程說的不大一樣?是不是忘了談NAT了?事實上,WebRTC和NAT根本沒有關係,不信去webrtc.org上瞧瞧,官網都對NAT隻字未提。但爲啥許多介紹WebRTC的文章都說是爲了解決NAT的問題呢?主要是因爲NAT確實也破壞了端到端通信的能力:即使在互聯網上的位置不變,在NAT網關之後的主機地址仍然是動態變化的,因爲在這種情況下,即使IP地址不變,你的端口號會一直變化,p2p將無法進行。

爲什麼?

可能是因爲IPv4地址太貴了(注意我說了可能),你和你的朋友都購買了NAT上網服務(比如電信和移動5G)。在這種上網模式下,我們只能通過”代理“上網,這個”代理“就是NAT網關,與此同時,我們在邏輯上處於互聯網中的一個小型局域網當中:我們並沒有直接暴露在互聯網中,而是被一個局域網”保護“了起來。正是有了這層屏障,p2p被無情打破。可爲什麼IP地址這麼貴呢?

NAT技術:用端口資源來擴充IP資源?

事實上IP地址資源早在20年前就不夠用了,可爲啥這20年還可以上網?這主要是NAT技術來解決的。

注:

IPv4地址資源不足有2個原因,其一是IPv4地址是一個32位整數,理論上支持40多億個地址,這個數遠遠小於世界總人口數。其二是由於IP地址在地理位置上嚴重分配不均:美國富餘中國稀缺,佔世界人口56%的亞洲只分到9%的地址,中國人均只有0.06個地址,日本也嚴重不夠用,印度更慘,人均只有0.006個地址。

NAT技術的設計者們早就發現,我們個人電腦上同一時刻只有寥寥幾個端口號在工作,剩下幾萬個端口都處於閒置狀態,這不可謂不是一種浪費。既然ip地址快不夠用了,爲啥不利用這些閒置的端口號來擴充ip地址呢?這就是NAT技術的理論基礎。

虛擬化:對內僞裝,對外欺騙

如果給NAT下一個定義,NAT是一種虛擬化技術,用於將虛擬化的子網接入到父級網絡(通常就是互聯網)。什麼是虛擬化技術呢?虛擬化就是僞裝欺騙的藝術,比如在一臺電腦上開多臺虛擬機,每臺虛擬機都分配一個ip,那麼在外界看來就存在多臺電腦,但實際上只有一臺:虛擬機容器將一臺電腦虛擬成多臺電腦。

NAT則相反,NAT是將多臺電腦虛擬成一臺電腦,在外界看來你們只有一臺電腦(即NAT網關),但實際上你們有若干臺。雖然NAT網關只有1個公網IP,但是它有幾萬個端口號對應着子網內部幾萬個主機。

所以,從資源守恆的角度看,NAT是犧牲端口號資源來擴充稀缺的ip地址資源;從技術本質上看,NAT是一種虛擬化技術,實現了網絡的嵌套。

理論上NAT子網中可以再嵌套一個NAT子網,網絡嵌套的層數沒有理論限制,但是層數越多通訊效率將大打折扣。

有人問,如果一開始互聯網就使用IPv6,NAT技術就不會誕生了,上網的效率將大大提升?是這樣嗎?

IPv6能解決問題?怎麼可能!

雖然NAT一開始是爲了解決IP資源不足而流行開來的,但是剛剛說了,NAT本質上是虛擬化,是用來實現網絡嵌套的。雖然IPv6資源多如牛毛(128位地址,約3.4×10^38個,比世界上所有灰塵的數量還多),世界上的子網仍然無處不在:每一個公司,園區,軍事禁區幾乎都有自己的私有網絡。

之前也說了,IPv4地址太貴只是NAT被廣泛使用的原因之一,更深層次的原因是,互聯網誕生之初所構想的世界大同的格局根本不可能實現,從物理設備的角度思考,如果想讓人人平等地使用互聯網,想要人人都能隨時隨地獲得一個公網IP,就得在世界各地均勻地搭建類似蜂窩佈局的互聯網接入點(如5G基站),從而將互聯網絡覆蓋到地球每個角落,但只要國家和地區之間充斥着不信任,各種私人領地像釘子戶一般的存在,基站就不可能覆蓋全球。NAT仍將廣泛使用。

子網將一直存在,網關和防火牆像長城(你知道我指的是什麼)一樣堅不可摧。地球仍以一定的角速度轉動,互聯網卻面臨着命運莫測的未來。。

最近人在魂不在,產出效率偏低,多多海涵~

(完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章