衡阳派盒市场营销有限公司

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>數值算法/人工智能>

從SimpleChat分析VPN技術

大小:0.6 MB 人氣: 2017-09-28 需要積分:2

  SimpleVPN寫好了以后,感覺比較簡單,我覺得只有簡單的東西才經得起折騰,才能全民折騰,所以說SimpleVPN還不夠簡單,本文來一個更加簡單的——展示一個超級簡單的點對點聊天程序,而且還帶簡單加密。順便,我們再來看下,到底什么是VPN以及怎樣實現它。

  QQ如今才剛剛行過成年之禮,典型的90后00前,卻早已到了后浪把前浪拍到岸邊的砍兒,果不其然,被10后的微信給逆襲了。好在都是騰訊的,這就把競爭收斂到了公司內部,不然這將意味著一個巨人的倒下,太可怕了。多年前,很多人逆向過QQ的協議,然后做了各種各樣的第三方客戶端,這在騰訊看來是在搞根據地搶飯碗,這是無法接受的,所以加強了各種安全措施,讓你第三方無法接入這個私有化的QQ系統。此后,第三方的QQ軟件漸漸消失了,只剩下了“騰訊QQ”。不過,在我看來,騰訊封閉QQ協議不見得是件好事,你能指望一個QQ終端能做出什么大動作呢?充其量騰訊QQ是一個非常棒的產品,但是微信出來之后呢?如果微信不是T家的呢。。.所以說啊,讓所有人都接受T家的通訊協議才是真正的霸道,從業務側不一定是這般,至少從網絡側看是這樣的。這樣一來,即便哪天阿里做出了新的社交產品,還是“基于騰訊的XXX協議,兼容QQv.。版本,兼容微信v.。。版本”,你看那些偉大的公司,很多都貢獻了一個協議或者規范,比如HTTP、HHTPS、SSL/TLS、Android……

  除了QQ之外,還有一類軟件是我們熟悉的,那就是迅雷和電驢。不管是QQ,還是迅雷、電驢,它們的共同點都是在TCP/IP網絡之上重新構建了一個新的點對點網絡,即P2P網絡。所謂的P2P網絡指的是網絡中的節點都是對等關系,任意兩個節點之間,一個節點和多個節點之間均可以對等通信。事實上,P2P根本就沒有什么神奇的,我們最底層的IP網絡就是一個P2P網絡,任意兩個節點之間都可以實現沒有主從關系的單播通信,而一個節點和多個節點之間則可以用組播進行通信,只是IP名稱早已有之,因此P2P就特指應用層的組網模式了。簡單點說,如果說IP網絡是在各種互通的鏈路層之上構建的一個點對點網絡的話,那么P2P網絡就是構建于TCP/IP之上的對點對網絡。至于說這個點對點上跑什么,那就取決于網絡構建者的意愿了。

  如果在點對點網絡上跑人與人之間互發的消息,那它就是個聊天軟件,比如QQ,微信這種,如果在點對點網絡上跑文件數據,那就是P2P下載,那它就是個P2P下載軟件,比如迅雷,電驢這種,類似的,如果在點對點網絡上跑IP數據報文或者以太幀,那它就是個Overlay技術,比如VXLAN、GRE這種,如果將以上這些Overlay數據進行加密,那它就是VPN。不管怎樣,名稱并不重要。

  以上這些都不是本文的核心——本文的核心在于展示一下從VPN到聊天程序的過渡是多么簡單。

  在我之前的文章《假期跟我一起寫一個點對點VPN-SimpleVPN詳解》(http://blog.csdn.net/dog250/article/details/70945840)中,我展示了一個非常簡單的點對點VPN框架,本文中,我來將它改成一個非常簡單的聊天程序。功能如下:

  用戶登錄可以獲取在線用戶列表;

  用戶登錄后可以通知其它在線用戶該用戶登錄;

  登錄用戶可以隨時獲取在線用戶列表;

  登錄用戶可以給指定在線用戶發送消息;

  支持在線用戶間的群聊。

  基本上,除了不支持留言,基本該有的都有了。我們來看下怎么改。

  其實,TCP/IP任何層的對等通訊都是在“聊天”,只是類似社交軟件中的聊天是在人與人之間進行的,而TCP/IP對等層“聊天”是協議與協議之間進行的。協議與協議之間的聊天需要一個尋址的過程,不管是DNS,IP路由,ARP解析,MAC/端口查找。。.都是為了確認并找到要把消息發給誰。而人與人之間的聊天在發消息之前也要在頭腦中經過一個類似的過程,也就是說,當你按下回車鍵的那一刻,你已經很明確這條消息是發給誰的了,這與網絡協議之間的對等通信完全不同,后者需要協議來完成尋址,而人則在自己的大腦中完成尋址過程,所以說,改法很簡單:

  1. 添加消息的發送和接收

  chat程序直接接收用戶的輸入,而不是從TAP中讀取以太幀,所以不需要tap_fd,改為con_fd了,其實就是console,因此需要將read_from_tap和write_to_tap改為

  read_from_console和write_to_console:

  從SimpleChat分析VPN技術

  2. 刪除尋址和學習機制

  由于尋址已經在人的大腦中完成,故不再需要尋址,因此去掉了以下的handler:

  從SimpleChat分析VPN技術

  3. 增加在線用戶列表顯示功能

  詳見1的用戶輸入解析。當輸入list的時候,會顯示在線用戶。

  現假設有ID為1,2,3的3個用戶登錄系統,用戶3輸入list時,以下是輸出:

  ID:1 online

  ID:2 online

  然后同樣在用戶3的終端前輸入2:aaaaaaaaaaaaaaaa,那么用戶2的終端將顯示:

  From 3:aaaaaaaaaaaaaaaa

  也許你會覺得這不像個聊天程序,那是因為它少一個漂亮的GUI,而我并不擅長這個。

  ------------------------

  此時應該知道frame中sid,did這兩個ID的作用了,它可以用來支持群聊,就跟它在VPN中支持組播一樣。。.

  關于這個的代碼,我已經放進了github的SimpleVPN那個目錄:https://github.com/marywangran/SimpleVPN/blob/master/SimpleChat.c

  通過以上,我們可以看出,這類技術可以改頭換面叫做任何不同的名稱,關鍵還是看你怎么用它了。不管它叫VPN,管它叫chat,管它叫overlay吧,或者直接overlaychat。

  其實,要什么VPN,如果你和你的QQ好友能把自己的QQ輸入輸出和本地的一個TAP網卡字符設備的輸入輸出對接起來,那大QQ就可以當成是一個VPN客戶端,同樣的,如果你用迅雷,電驢什么的來對接一個虛擬網卡傳輸以太幀或者IP報文而不是傳輸文件,那么迅雷,電驢構建出來的P2P網絡就是一個VPN網絡。

  讓我們來暢想一下如何來應景。在裝了QQ的Windows機器上,有一個文件,它是“C:/Tap.frame”,針對它的讀寫實際上就是在讀寫TAP虛擬網卡設備,這個用Windows驅動非常容易辦到。此時,我們把這個文件用QQ傳送給好友,并且好友那邊也有一個這樣的文件,會怎樣?我們豈不是通過QQ搭建了一條隧道嗎?Overlay?嗯,是的,這叫做IP over QQ吧,或者Everything over APP?管它呢,名詞不重要!

  這是分層模型給我們帶來的好處!只要你的IP報文或者以太幀在本地形成了,除了直接發送到網線上之外,還有別的運輸方式,比如你可以用UDP將其送出,可以用一個新的IP,當然這些都是常規的。本文中,我們看到,你還可以用QQ、迅雷、電驢之類的軟件將其送出,甚至,你可以用集裝箱將其送出,這就是IP over集裝箱技術。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      尊龙备用网址| 牡丹江市| 新葡京官网| 百家乐官网2号死机| 百家乐赢钱面面观| 衡山县| 皇冠网百家乐官网啊| 百家乐平一直压庄| 盈禾娱乐| 广州百家乐官网娱乐场开户注册| 百家乐视频麻将游戏| 百家乐网址| 百家乐官网代理在线游戏可信吗网上哪家平台信誉好安全 | 最新百家乐游戏机| 华盛顿百家乐的玩法技巧和规则| 瑞丰娱乐城| 百家乐官网电话投注怎么玩| 百家乐视频表演| 百家乐牌壳| 圣淘沙百家乐官网娱乐城| 百家乐任你博娱乐场| 百家乐官网怎么会赢| 澳门百家乐庄闲的玩法| 大发888在线开户| 至尊百家乐官网奇热网| 百家乐投注方法投资法| 半岛棋牌游戏| 威尼斯人娱乐场开户注册 | 做生意带什么招财| 云鼎百家乐代理| 百家乐官网赌博赌博平台| A8百家乐赌场娱乐网规则| 交口县| 百家乐在线小游戏| 京城国际| 百家乐大赢家客户端| 宁波市| 百家乐连跳趋势| 百家乐官网9点直赢| 大发888亚洲游戏 网页| 百家乐官网正品地址|