日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

我的网络编程之旅

發布時間:2024/4/11 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我的网络编程之旅 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先給大家推薦下Markdown,我想用過github的同僚一定很熟悉了,這篇文章的排版就是使用的markdown,以后我們不必再去適應各個博客系統自己繁雜的排版方式了。


網絡編程是什么?

給大家從招聘信息上截取幾段內容:

  • 熟悉Socket編程,熟悉Tcp/Ip協議棧;

  • 熟悉TCP/IP協議、UDP協議,有相關的協議開發經驗;

  • 熟悉網絡編程/多線程編程技術;

大家應該很清晰了吧,關鍵詞就是TCP/IP,Socket,我再附加一個多線程。下面開始我的網絡編程之旅。

tcp/ip協議分析

其實協議分析并不是大眾認為的網絡編程的范疇,現在網絡編程已經完全和socket等同了。socket是表面,TCP/IP協議是里,有了協議分析的經歷更會讓你的網絡編程之路更加平坦。

想必有些童鞋經歷過這樣的公司吧,對公司內部的上網行為進行監控:你訪問過哪些域名,上傳下載過哪些資源,你占用了多少帶寬流量,甚至你的郵件正文,附件都會呈現在監控系統上。這就是協議分析的杰作。經典的網絡四層模型構成了協議分析的基礎。


了解TCP/IP協議一本書足矣《TCP/IP詳解 卷1:協議》,進行協議分析并也不需要我們自己從頭做起,我們完全可以站在巨人的肩膀上,這個巨人就是pcap,另外還有非常知名的基于pcap實現的開源項目供我們參考,比如snort、tcpdump、wireshark特別是snort的功能模塊化設計和實現非常經典,應用在大型協議分析項目中極為合適。至于作為協議分析工具的tcpdump和wireshark,不會使用的話咱就別好意思說咱是干這行的了。

socket編程

socket的掃盲書籍及文章太多太多,咱在這就不廢話了。起初我有個疑問,對很多公司招聘信息上寫的熟悉Socket編程感到很不解,因為我覺得是很簡單的事情,無非就是調用幾個API,理解下三次握手、listen...等等幾個狀態。之后在真正做企業級的牽扯到多Client對單Server網絡編程和具體的網絡環境時才慢慢理解了那些招聘信息的含義和需求深度。(以下如不特殊指定均指TCP協議)

  • 局域網
    我們這個項目主要針對局域網用戶,相比廣域網的網絡環境,幾乎可以忽略帶寬考慮,用戶并發數也相對較小,對性能和效率要求較低,另外業務較復雜。在這種情況下最合適的就是采用RFC(遠程過程調用),于是我們首先想到了開源的RFC框架,經他人嘗試推薦采用了RCF,相當于我們只需要在此框架上套上業務邏輯即可,起初在我們實踐和小規模的測試中并未發現有問題,但是真正模擬到高并發情況時卻在網絡層出現了不可控的錯誤,初步判斷是RCF的線程模型和我們的使用場景不一致,于是決定開發一套自己的網絡庫,于是在一位以前有過網游經驗的研發人員的指導下,我們一起開發了一個基于boost asio的遠程過程調用框架,boost asio的網絡模型在windows下采用的完成端口,在類unix系統下采用的是相應的多路復用接口,由于在局域網環境下,用戶并發數也不多,也就是用好boost asio,設計好網絡傳輸協議,處理好數據封包解包就好了,并未遇到太大的問題。

  • 廣域網
    首先拋開廣域網復雜的網絡環境不談,這個產品是個互聯網項目,面向普通用戶,有些類似于IM軟件,由于有QQ這個優秀的采用UDP協議的例子,我們也曾經在TCP和UDP協議間猶豫過,但是鑒于UDP實現的難度太大,還是采用了TCP來實現C/S通信。客戶端(windows,linux,android),服務端(linux)網絡庫的設計編寫都由我負責,考慮到以后可能出現的海量并發,在服務端我采用了master——worker模型,一個事件循環一個線程的多線程網絡模型,這樣可以充分利用服務器的多核資源,客戶端和服務端的網絡庫都采用了libevent。服務端的設計思路及代碼實現可以參考我的github:highPerformanceNetworkServer(這只是個演示demo,離企業及應用還有許多需要自己完善的)。

前面說到了socket編程的簡單VS深度,其實你需要了解、注意、掌握的東西有很多,比如MTU,MSS,SO_LINGER,TCPNODELAY,TIMEWAIT,keepalive(最好用應用層心跳包),串話...,在實際的編寫和使用中你會慢慢知道的。

另外很重要的一點就是網絡傳輸協議的設計,這也進行socket編程的重中之重,可以參考我曾經的文章網絡傳輸數據格式的選擇。

擴展話題

  • UDP
    UDP也屬于socket編程的范疇,把他單拿出來是因為他的使用范圍相比較TCP還是有局限性的。在做可靠信息傳輸這種應用中,騰訊QQ的技術讓我們體會到了他的可靠和高效。業界也有相應的對UDP可靠傳輸的包裝,我仔細研究過的是UDT。在我們的產品應用中,主要是使用UDP來進行NAT穿透,我和同事一起使用過UDP和UDT進行NAT穿透,很有效,但依然有局限性:比如針對對稱nat。另外使用UDP來進行相對可靠的視頻傳輸,現在我的一個同事在專心搞這塊,我想以后從他那一定可以學到不少更深的技術。

  • 多線程
    如果搞網絡編程不掌握多線程就好像你只有一條腿一般。比如我前面說所的master——worker模型,一個事件循環一個線程,一些涉及到IO bound、CPU bound、心跳包、客戶端搶帶寬都可以利用線程來進行相應的解決。

  • Python
    用python來寫網絡測試腳本,事半功倍。

推薦書籍

  • 《TCP/IP詳解 卷1:協議》

  • 《UNIX網絡編程》
    這兩本書不用多說,大家肯定都鐵鐵的知道經典程度。

  • 《Linux多線程服務端編程》
    這本陳碩老師的書籍實戰性很強,講述的思維和問題都是和實戰緊密相聯的。我感覺代碼部分比較復雜,用了不少我不熟悉的c++特性,還需進一步學習理解

總結

以上是生活随笔為你收集整理的我的网络编程之旅的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。