閉眼編程
㈠ 怎樣算得上熟悉 TCP/IP 協議編程
抓包
先從熟悉的下手,HTTP,ftp。
封裝包
自己封裝包,和現有協議通信。TCP/IP協議作為一個底層協議,不僅可以編寫聊天程序,很多高層協議都是基於TCP/IP編寫的。
自己造輪子,這樣也有助於理解其它協議,比如連接、查詢MySQL(用Socekt函數而不是庫函數),自己封裝一個memched函數庫…
以前我大學時用perl發送「飛鴿傳書」包,經常上課的時候同學們集體收到彈出信息,卻不知道發送者是誰,很有成就感。如果你做已經事沒有成就感,就很快會失去動力。
他山之石
經常去github。
源碼
讀讀TCP/IP協議的實現代碼,去翻翻 Linux 1.0 源碼。
能進行網路編程
1.如果你說你會select,epoll,iocp模型,那會讓對方覺得更靠譜
2.如果你說出你做過im,下載之類那會讓對方來興趣.
3.如果你說設計了通訊協議,會讓對方覺得更貼切
4.如果你說做過,熟悉, ftp http snmp smtp 這些簡單的老古董協議,會加分,但不大.
5.如果你說熟悉bt,emule,udt等協議,那會對你很有好感.
6.如果你說你破解過某大牌 qq,360內某通訊協議,那會對你加分很大.
目測樓主在0.5的位置,嘿嘿
我對熟悉的定義是:閉著眼能想起原理和實現,能和其他人侃侃而談,能在搜索的幫助下,不慢的整出來.
精通的定義是:觀點一針見血,實現一揮而就.
1)熟悉TCP/IP協議族的基本原理
IP地址的分類,定義,獲得,大概的管理方法
TCP、UDP等主要協議的特點,主要格式,以及重要欄位在協議交互中起到的作用。
2)對於簡單的TCP/IP協議導致的問題,有基本的判斷
熟悉網路問題的解決方法,一個問題,應該是由上而下(top-button),還是由下而上(button-top)來分析?
3)基本的編程知識。
在系統內,構建簡單通信。
在系統間,構建簡單的通信。
熟悉系統內的API,知道在什麼時候,改使用哪些API協調工作。
能夠熟練使用這些API,在系統間傳遞信息,文件。
能夠熟練使用這些API,實現自己的簡單的私有協議。
4)進階編程知識
知道一兩個已經封裝好的框架(framwork),它們之間的差別。
使用一個框架,寫過能正常工作的程序。
知道網路協議處理也是要講究性能的,知道性能的瓶頸會在什麼地方產生。
能有較好的設計技巧,將私有協議設計得更加具有彈性,優雅。
熟悉系統間協議處理的細微的差異,以及將會對業務造成的影響,時延、狀態不一致、自定義欄位、、、、、
5)熟練階段的知識
針對業務的需求,快速選型,定框架。
不再認為多線程是萬能的。
知道穩定性比性能更加重要。
數據包去了哪兒,不用看代碼,也能預估出來。
6)源代碼是最好的老師,永遠都是。
