2008年5月30日 星期六晴
近來一直很少些關於技術方面的文章,一來是被工作和生活所累,沒有很多閑暇多余的時間,二來呢是覺得一直沒有好的case,或則有好的case,但覺得目前在這個case方面,自己還不算很professional。今天心情不錯,感覺也很好,就把我近一年來在“協議棧”開發方面的一些經驗寫下來,算是對自己這一階段的一個終結,也希望能對后來者能有所幫助。
首先,不要以為做協議棧開發很難(誠然,商用穩定的協議棧開發的確也不容易^_^),所以首先一定要有足夠的信心,其次如果有前輩帶你上手那就好很多,如果沒有,自己一個人去“專研”,那么你做的首要的事情還是要有信心,不要有“懼怕”的思緒。好了,開始進入正題,如下:
一,閱讀協議棧相關文檔
關於單個協議的定義,權威的自然是IETF(互聯網工程任務推進組織)的"rfc"文檔,雖然是一大堆的英文(呵呵,我英文也一般),開始不太看的明白,不過沒關系,先去網絡上用"baidu"或則"google"搜索一下關於你要做的這個協議的中文說明,雖然絕大數介紹都很膚淺,但這么做的在於去了解該協議的目的和用途,心中有個大的概念,而后在大致的閱讀下該協議"rfc"文檔的大體描述和結構。
需要說明的是在大多數情況下,一個完整的協議棧都有好幾個協議組成,所以也有1個或若干個"rfc"文檔要去學習和了解,但切記不用把所有"rfc"文檔都讀的相當仔細和完全明白后再去做,我們的目的在於只把握協議棧的框架和大概信息。
所以,這個階段是基礎准備階段。
二,設計協議棧結構
這個階段也是最核心、最重要的一個階段,可以說,開發成功與否的關鍵也全在這個階段。我們在第一個階段的基礎上,明白了要開發的協議棧的功能及其相關協議后,我們就要來設計這個協議棧框架的實現,一般有注意如下幾方面:
1,功能性:這個很自然,如能實現功能還做什么
2,可擴展:協議棧最好划分出內核和外圍模塊,利於將來擴展和維護
3,模塊獨立:協議棧內核和外圍模塊盡量獨立,減少耦合
這個階段雖然說起來容易,但做起來去要看個人的能力和水平,包括代碼的機構、風格、易維護、易移植、穩定、健壯性等等。所以,如果連基本程序都寫不好,沒有好的代碼風格和沒有把握大結構能力的,最好還是請別人幫忙。
注釋:協議棧的設計要看協議棧的特點,比如有的協議棧是對稱的(比如rtsp流控協議),有些是不對稱的(比如http協議),各有各特點,所以在把握大結構的同時要針對各自的特點來設計。
三,編碼開發
框架完成后,開始豐滿核心模塊和構建基本的外圍模塊。通常這階段需要搭建好開發環境,便測試便修改。
注釋:很重要的工作,ethereal(抓包軟件),做協議這個是一定要用熟的。
四,測試與維護
基本上到這個階段,協議棧的開發工作就OK了,剩下的就是測試、維護,調整代碼,加強協議棧的穩定性和健壯性。
五,后記
由於文字表達上的局限和本人水平的問題,上述只是簡要描述了一下開發協議棧的一般常規步驟,算是對自己的一個總結,也希望對讀者有所幫助,不當之處,請多包含。
個人已做過的協議棧(簡要說明):
1, SIP
會話發起協議,關聯SDP/RTP/RTCP等協議
2, TR069
終端網管協議,關聯HTTP/SOAP/XML/TR-111(STUN NAT穿越)/TR-106(外圍數據模型)
3, 流控
多媒體流控協議,管理RTSP/RTP/SDP/MP2T等
終於寫完了~~真累,哎,中午了,吃飯去,呵呵~~