青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

陳碩的Blog

Muduo 網絡編程示例之十:socks4a 代理服務器

Muduo 網絡編程示例之十:socks4a 代理服務器

陳碩 (giantchen_AT_gmail)

Blog.csdn.net/Solstice  t.sina.com.cn/giantchen

這是《Muduo 網絡編程示例》系列的第十篇文章,本系列暫告一段落。

Muduo 全系列文章列表: http://blog.csdn.net/Solstice/category/779646.aspx

本文介紹用 muduo 實現一個簡單的 socks4a 代理服務器,代碼見 http://code.google.com/p/muduo/source/browse/trunk/examples/socks4a/

TCP 中繼器

在實現 socks4a proxy 之前,我們先寫一個功能更簡單的網絡程序—— TCP 中繼器 (TCP relay),或者叫做窮人的 tcpdump (poor man's tcpdump)。

一般情況下,客戶端程序直接連接服務端,如下圖。有時候,我們想在 client 和 server 之間放一個中繼器 (relay),把 client 與 server 之間的通信內容記錄下來。這時用 tcpdump 是最方便省事的,但是 tcpdump 需要 root 權限,萬一沒有 root 密碼呢?窮人有窮人的辦法,自己寫一個 relay,讓 client 連接 relay,再讓 relay 連接 server,如下圖中的 T 型結構,relay 扮演了類似 proxy 的角色。

relay

TcpRelay 是我們自己寫的,可以動動手腳。除了記錄通信內容,還可以制造延時,或者故意翻轉 1 bit 數據以模擬 router 硬件故障。

TcpRelay 的功能(業務邏輯)看上去很簡單,無非是把連接 C 上收到的數據發給連接 S,同時把連接 S 上收到的數據發給連接 C。但仔細考慮起來,細節其實不那么簡單:

  • 建立連接。為了真實模擬 client,TcpRelay 在 accept 連接 C 之后才向 server 發起連接 S,那么在 S 建立起來之前,從 C 收到數據怎么辦?要不要暫存起來?
  • 并發連接的管理。上圖中只畫出了一個 client,實際上 TcpRelay 可以服務多個 clients,左右兩邊這些并發連接如何管理,如何防止串話(cross talk)?
  • 連接斷開。Client 和 Server 都可能主動斷開連接。當 Client 主動斷開連接 C 時,TcpRelay 應該立刻斷開 S。當 Server 主動斷開連接 S 時,TcpRelay 應立刻斷開 C。這樣才能比較精確地模擬 Client 和 Server 的行為。在關閉連接的剎那,又有新的 client 連接進來,復用了剛剛 close 的 fd 號碼,會不會造成串話? 萬一 Client 和 Server 幾乎同時主動斷開連接,TcpRelay 如何應對?
  • 速度不匹配。如果連接 C 的帶寬是 100KB/s,而連接 S 的帶寬是 10MB/s,不巧 Server 是個 chargen 服務,會全速發送數據,那么會不會撐爆 TcpRelay 的 buffer?如何限速?特別是在使用 non-blocking IO 和 level-trigger polling 的時候如何限制讀取數據的速度?

在看 muduo 的實現之前,請讀者思考:如果用 Sockets API 來實現 TcpRelay,如何解決以上這些問題。

TcpRelay 的實現很簡單,只有幾十行代碼 http://code.google.com/p/muduo/source/browse/trunk/examples/socks4a/tcprelay.cc,主要邏輯都在 Tunnel class 里

http://code.google.com/p/muduo/source/browse/trunk/examples/socks4a/tunnel.h 。這個實現解決了前三個問題,第四個留給將來吧。

Socks4a 代理服務器

Socks4a 的功能與 TcpRelay 非常相似,也是把連接 C 上收到的數據發給連接 S,同時把連接 S 上收到的數據發給連接 C。它與 TcpRelay 的區別在于,TcpRelay 固定連到某個 server 地址,而 socks4a 允許 client 指定要連哪個 server。在 accept 連接 C 之后,Socks4a server 會讀幾個字節,以了解 server 的地址,再發起連接 S。

Socks4a 的協議非常簡單,請參考維基百科 http://en.wikipedia.org/wiki/SOCKS#SOCKS_4a

muduo 的 socks4a 代理服務器的實現在 http://code.google.com/p/muduo/source/browse/trunk/examples/socks4a/socks4a.cc,它也使用了 Tunnel class。與 TcpRelay 相比,只多了解析 server 地址這一步驟。

muduo 這個 socks4a 是個標準的網絡服務,可以供 Web 瀏覽器使用(我正是這么測試它的)。

n:1 與 1:n 連接轉發

云風在《寫了一個 proxy 用途你懂的》中寫了一個 TCP 隧道 tunnel,程序由三部分組成:n:1 連接轉發服務,1:n 連接轉發服務,socks 代理服務。

我仿照他的思路,用 muduo 實現了這三個程序。不同的是,我沒有做數據混淆,所以不能用來翻傳說中的墻。

有興趣的讀者可以把這三個程序級聯起來試一試。

Muduo 編程示例系列告一段落

Muduo 網絡編程示例》從今年2月初開始寫,到今天正好是四個月,我寫了十一篇博客,基本按計劃完成了任務。這個系列暫告一段落。

這個系列基本涵蓋了 muduo 為編寫單線程服務端和客戶端 TCP 網絡程序提供的功能,muduo 的能力不止于此:

  • 多線程,muduo::net::TcpServer 內置了一個簡單但適應性很強的線程模型。目前博客上的例子涉及的業務邏輯很簡單,沒有復雜的運算,瓶頸通常在 IO 上,多線程的優勢發揮不出來。
  • 高級應用。比方說用 muduo::net::Channel 配合 signalfd 來處理信號;其他非阻塞網絡客戶端庫(例如 ZooKeeper 的 C 客戶端,PostgreSQL 的客戶端 libpq)與 muduo EventLoop 的集成。

以上兩點在以后的文章里會提及,不會明珠暗藏。

Muduo 在 2010 年 8 月底發布 0.1.0 版,隨著這個編程示例系列文章的發表,迄今已發布了 14 次小升級,下載地址: http://code.google.com/p/muduo/downloads/list

接下來的計劃

接下來,我還會寫一系列博客,目前想到的有:

  1. 談一談我的網絡編程學習經驗。文章已經完成大半,端午節之后可以發布。
  2. muduo 設計與實現系列,介紹如何一步步實現一個非阻塞網絡庫。代碼已經準備得差不多了,在 https://github.com/chenshuo/recipes/tree/master/reactor
  3. 用 muduo 實現一些稍微復雜一些的網絡程序,比如小規模的分布式系統。計劃有:利用 Paxos 算法實現一個高可用的 in-memory key value 存儲,在此基礎上實現 naming service,然后實現我以前多次提到的簡單機群管理系統等等。目前 muduo 的示例程序都是簡單獨立的網絡程序,下半年我想多寫一寫由多個程序組成的系統,具體談一談分布式系統細節設計。

另外,我會逐步把已有的博客文章整理成 PDF 合集,方便下載保存,地址是: http://blog.csdn.net/Solstice/archive/2011/02/24/6206154.aspx

posted on 2011-06-02 23:02 陳碩 閱讀(2947) 評論(0)  編輯 收藏 引用 所屬分類: muduo

<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

導航

統計

常用鏈接

隨筆分類

隨筆檔案

相冊

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国内一区二区三区| 99国产精品久久久久老师| 亚洲电影网站| 精品不卡一区| 亚洲日韩欧美视频| 亚洲婷婷综合色高清在线| 亚洲专区在线| 亚洲欧美一区二区原创| 久久成人资源| 亚洲国产精品第一区二区| 亚洲国产成人在线视频| 一本久久综合亚洲鲁鲁五月天| 亚洲一区二区三区视频播放| 久久成人免费视频| 欧美经典一区二区三区| 国产精品人成在线观看免费 | 欧美成人网在线| 欧美三日本三级少妇三99| 国产一区二区| 亚洲人午夜精品| 欧美一区二区精品久久911| 欧美在线看片| 亚洲欧洲精品一区二区三区| 午夜精品一区二区在线观看| 美国成人毛片| 国产日韩欧美一区二区三区四区 | 欧美三级电影精品| 狠狠色狠狠色综合日日五| 一本色道久久综合亚洲精品不卡| 久久久精品日韩欧美| 亚洲精品一二三| 欧美一区国产在线| 国产精品wwwwww| 亚洲美女色禁图| 午夜久久影院| 免播放器亚洲一区| 国产精品亚洲综合天堂夜夜| 美女露胸一区二区三区| 妖精成人www高清在线观看| 久久精品一区| 夜夜嗨av一区二区三区免费区| 久久深夜福利免费观看| 国产精品久久久久国产a级| 亚洲日本欧美在线| 蜜臀va亚洲va欧美va天堂| 中文国产成人精品久久一| 欧美华人在线视频| 国内外成人免费激情在线视频| 欧美一区二区视频网站| 99国内精品久久| 欧美理论视频| 一本一道久久综合狠狠老精东影业 | 亚洲免费一在线| 亚洲国产精品一区二区www在线| 久久频这里精品99香蕉| …久久精品99久久香蕉国产 | 国产精品久久一区二区三区| 一区二区精品在线| 亚洲国内精品| 麻豆精品一区二区av白丝在线| 国产亚洲一区在线| 久久精品国产亚洲高清剧情介绍 | 亚洲欧美三级在线| 国产精品一区二区三区乱码| 欧美亚洲免费高清在线观看| 亚洲免费视频网站| 国产精品一区视频网站| 欧美在线一二三四区| 国内精品伊人久久久久av影院| 久久久777| 久久精品综合网| 永久域名在线精品| 老司机免费视频久久| 久久人91精品久久久久久不卡| 狠狠色丁香久久综合频道| 久久躁狠狠躁夜夜爽| 卡通动漫国产精品| 亚洲精品一区二区三区不| 模特精品在线| 欧美日产在线观看| 亚洲精品一二区| 亚洲图片在区色| 欧美视频一区二区三区四区| 性欧美大战久久久久久久久| 性高湖久久久久久久久| 亚洲高清一区二区三区| 亚洲国产精品福利| 亚洲一区二区在线视频| 欧美精品日本| 性欧美xxxx大乳国产app| 久久精品欧美日韩| 亚洲欧洲一区二区三区在线观看| 亚洲日本中文字幕区| 国产情侣久久| 亚洲日本在线观看| 国产日韩欧美中文在线播放| 欧美黄网免费在线观看| 欧美午夜精品久久久久久久| 久久精品欧洲| 欧美午夜宅男影院| 另类亚洲自拍| 国产精品任我爽爆在线播放 | 日韩午夜激情电影| 性欧美办公室18xxxxhd| 亚洲精品欧美日韩| 欧美一区二区三区视频免费| 亚洲激情精品| 久久久久国产精品www| 一道本一区二区| 久久一区激情| 性8sex亚洲区入口| 欧美日韩一区二区三区免费看| 欧美日韩伊人| 免费在线欧美视频| 国产精品一级| 在线中文字幕不卡| 日韩一级免费观看| 蜜桃久久精品乱码一区二区| 久久青青草原一区二区| 欧美视频在线不卡| 亚洲精品欧美日韩| 亚洲第一狼人社区| 久久福利影视| 新片速递亚洲合集欧美合集| 欧美啪啪成人vr| 亚洲第一精品影视| 亚洲激情偷拍| 久久久久久久综合狠狠综合| 久久一区二区三区国产精品| 国产美女扒开尿口久久久| 亚洲一二三区精品| 亚洲欧美在线一区二区| 欧美午夜精品久久久久久久| 99日韩精品| 午夜日韩在线观看| 国产欧美一区二区三区沐欲| 香蕉亚洲视频| 老司机67194精品线观看| 136国产福利精品导航网址应用 | 亚洲免费视频在线观看| 欧美一二三区在线观看| 国产一区二区电影在线观看| 午夜精品久久久久久久蜜桃app| 亚洲永久免费av| 国产精品成人一区二区艾草| 亚洲一区二区不卡免费| 性欧美超级视频| 激情欧美一区二区| 欧美 日韩 国产一区二区在线视频 | 午夜精品网站| 久久国产欧美| 国产亚洲精品aa午夜观看| 亚洲欧美日韩国产一区二区| 欧美一二三区在线观看| 亚洲高清免费| 一区二区三区视频在线看| 欧美亚一区二区| 亚洲天堂偷拍| 欧美14一18处毛片| 亚洲剧情一区二区| 国产精品xxxav免费视频| 亚洲影院在线| 久久先锋资源| 日韩一区二区精品视频| 国产伦精品一区二区三区视频黑人| 久久精品成人一区二区三区| 亚洲国产精品女人久久久| 亚洲欧美日韩一区二区三区在线观看 | 在线免费观看日本欧美| 欧美日韩国产区| 性欧美大战久久久久久久免费观看| 蜜臀av国产精品久久久久| 亚洲一区视频| 在线日韩视频| 国产精品久久久久久五月尺| 久久亚洲一区| 亚洲在线视频| 亚洲人成在线播放| 久久嫩草精品久久久久| 亚洲一区二区三区免费观看| 影音先锋亚洲电影| 欧美三级电影一区| 免费成人毛片| 久久九九精品| 亚洲一区二区三区高清不卡| 亚洲高清自拍| 老鸭窝毛片一区二区三区| 亚洲在线一区二区三区| 最新国产成人在线观看| 国产午夜精品全部视频在线播放| 欧美日本一区| 欧美 日韩 国产在线 | 亚洲一区二区黄| 亚洲欧洲精品一区| 久久婷婷av| 久久免费精品视频| 久久久国产精品一区| 性做久久久久久久免费看| 99精品国产高清一区二区| 亚洲国产裸拍裸体视频在线观看乱了|