淺談p2p的打洞

淺談p2p的打洞

  • 爲何要打洞,最主要一個原因就是因爲nat,由於nat的存在,私網地址要訪問公網的資源,都是要先通過nat網關的公網出去的,那麼消息的進出自然就受到nat網關的控制

  • 一般p2p不是說就完全沒有了中間節點,其實中間節點還是有的,就是中間節點的任務沒有以前那麼重了,以前a想向b發送消息,都得通過中間節點的轉發,這樣的一個突出問題就是中間節點任務太重了,壓力過大,容易崩

  • 而p2p的出現就是說中間節點你不要負責轉發了,a想跟b通信,那麼你只要把a和b的地址信息互相發送給對方就行了,然後讓a和b自己建立連接去通信,中間節點就可以去喝茶休息了

  • 那麼問題就來了,由於nat的存在,一般a和b都是通過nat網關出去的,而nat爲了安全,不是誰發的數據包都接受的,如果是陌生人發過來的,nat直接就丟掉了,這種情況下,a和b要怎麼通信?

  • 既然a和b都是陌生的,那就讓他們熟悉起來,方式就是a往b的nat網關發送數據包,此時a的nat網關會記錄這些信息,後面從b的nat網關發送過來的就不是陌生的了(通俗一點講就是a對nat說,我和b的nat網關是好朋友,說完之後,a的nat網關就不會丟棄來自b的nat網關的數據包了),同理b也是這樣的,因此他們兩個要成爲熟人就是要各自往對方的nat網關發送數據包,這樣雙方的網關由於都記錄了對方的網關,後面就可以通過了,這也就是打洞的原理

  • 說到這裏,那麼肯定會有人疑惑,那a和b跟中間節點怎麼就不用打洞呢?

  • 對於這個問題,中間節點一般都是公網上的服務器,他已經有獨立的公網ip,其他人是可以直接和他建立連接的,而a和b不行的原因就是他們沒有公網ip,他們只能通過nat才能出去,假如a和b都直接有公網的ip,不需要通過nat,那就很簡單了,根本不需要打洞,他們直接就能通信

  • 說白了,打洞的罪魁禍首就是nat,這個傢伙有利也有弊,好的是他的出現讓短缺的ipv4又存活了幾十年,但同時對於雙方的通信也帶來了一些麻煩,打洞就是一個典型的麻煩

參考

NAT穿透(UDP打洞) - heaventouch - 博客園
https://www.cnblogs.com/GO-NO-1/p/7241556.html

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