asn淺析–協議的設計

來源:互聯網
上載者:User

協議是分層的,但是它原本就是分層的嗎?或者說它只有分層這一種形式嗎?作為一種替代方案,基於訊息的模型也一樣能工作的很好,不一定要分層,就像很多應用程式層的協議比如http或者sip那樣,基於訊息的協議模型中,空間上縱向的層次化為了時間上橫向的不同訊息,比如有專門定址的訊息,有專門差錯控制的訊息等等,基於訊息的協議同樣可以適配各種不同的網路結構以至於最終適配不同的網路裝置,只要這些裝置都能處理特定的訊息即可,但是現在除了應用程式層外,基本沒有基於訊息的協議,這裡面除了osi分層模型的強大勢力以至於分層模型深入人心外還有另一個原因,那就是分層模型是為傳輸而產生的,而不是為應用產生的,訊息模型適合於應用而不適合於傳輸。
     在說更具體的技術原因之前我們先看一個現實中的例子,現實中的交流也是一種通訊,我們交流同樣需要協議,那麼我們看一下我們交流時使用的是什麼模型,分層模型還是訊息模型,交流無非就是打電話交流,信件交流,面對面交流等等,我們以打電話交流作為例子來看一下,電話的作用就是跨越空間,對於每一路通話,電話的作用就是將一個人語音傳輸給另一個人,這是固定不變的,但是每一路通話的內容卻不一樣,電話的最終目的不是傳輸語音而是使電話一端的人看起來像與另一端的人面對面交流一樣,因此電話線路更像一個服務,電話能接通依賴於通訊公司,電信局,省級或者國際監管機構,這看起來是一個分層協議,但是當人們“喂”了一聲以後,協議就成為基於訊息的了,基本採用一問一答的形式,一方能繼續說下去的前提是另一方聽懂了前一句,如果不是為了特意監聽,監聽電話通常沒有現實意義,因此通話時間以及通話內容基本是屬於兩個人的,他們倆也沒有必要採用一種特殊的語言和語氣來讓第三人聽懂,反觀電信局或者監管機構就不是僅僅屬於通訊雙方的,電信傳輸局並不是僅僅和對端的電信傳輸局通訊,它必須提供可靠傳輸才能保證運營公司的良好運營,因為它上面還有一個運營公司,所以它不但要與對等端通訊,還要對運營公司負責。如果你悟出了這裡面的一些東西,那就不必往下看了。
     現在看看電腦網路通訊協定。首先看一下電腦網路最重要的兩個特性,也是必須實現的兩個功能,第一就是傳輸位元,第二就是位元格式解析,也就是解析位元成需要的訊息格式,這就是分層模型的淵源,我們知道網路的最終目的就是異地的終端可以互相通訊,那麼終端只在乎能否解析位元格式,而不在乎具體怎樣傳輸,於是位元傳輸對於這個最終目的就不再重要,你可以設計不同的傳輸線路和規程,只要能使終端解析出位元格式即可,於是就可以實現不同的傳輸線路,只要它們的實現者能實現一種一致的提供給解析器的位元即可,這就是最初的二層模型,這就是分層協議模型的鼻祖,理解了這個也就理解了最終的osi理論模型以及tcp/ip實際模型,無非就是一個分權分立的過程,從職能角度將通訊過程分成了若干部分,每一部分完成特定的功能,為別的功能提供一個特定的,有效,可靠的,承諾的傳輸環境,這就是分層模型的重要概念--介面,這種按功能分化一直提供到具體應用,因此可以看出,應用程式層協議和其下面的協議有著本質的不同,下面的協議本質上是傳輸協議,除了和對等層通訊還要和上層對接,而應用程式層協議僅僅和對端通訊,但是別急,也有例外。
     當今的電腦網路編程幾乎都是應用程式層以上的,就協議的數量和靈活性以及語義多樣性方面,應用程式層協議要比底層協議複雜得多,為了可擴充性,另外還有經濟方面的原因,人們有自由選擇不同的程式設計語言,這就出現了問題,這是編寫底層協議不會面對的問題,底層協議一般整合於OS核心的協議棧中,基本都是用c或者彙編寫好的,除了一些驅動程式編寫者或者愛好者會偶爾擴充一下外,幾乎不需要做改動,由於它們只是傳輸協議,因此只要它們能提供承諾的服務幾乎沒有人去理睬它們,你不會為了和戀人通話而去電信局上班為了可以打免付費電話吧,即使你去了也不一定能聽懂她和另一個男人的通話,看看應用程式層協議,非常多樣,非常複雜,而且非常不穩定,如果你想繼續在某一個應用程式層協議上繼續摞新的協議,那麼就要考慮一下是繼續用分層模型還是用訊息模型了,由於不穩定,如果用分層模型,那麼如果有一個層次改變了,那麼所有的層次都要改,並且協議規範會很複雜,原本就不是服務化的協議非要用固定服務的協議來規範,豈不是自找苦吃?傳輸協議的格式可以固定,而應用協議的格式多變,固定格式很難協商,訊息是一個很好的方式。如果說osi分層模型最佳的產品是tcp/ip的話,那麼訊息模型最佳的產品就是asn1,asn1通過分離文法規程和協議編碼簡化了協議的設計和開發,正是協議定義規程和協議編碼的一體化才使得應用程式層開發變得困難,因為應用程式層協議往往由技術能力扁平化的大部分人員(包括我在內的很多烏合之眾)採用無窮多的程式設計語言來編寫,那麼如何保證這個協議的開發最簡化,bug最少,將編碼工作轉嫁給asn1編譯器是一個解放勞動力的絕佳方式,而這一切之所以能完成,完全是因為asn1定義了一套完整的抽象文法規程,各種語言只要按照規程編碼就可以了,然後將代碼交給該語言的asn1編譯器就可以了,這實際上還是用一個抽象層屏蔽了複雜,如果不理解這一點,那就想一下c語言代替組合語言從而解放特定機器的編碼工作那件事,這裡c語言就是特定語言的asn1代碼,而組合語言就是編碼好的基於位元組的asn1編碼。事實證明,asn1非常適合定義訊息,因為它是可以自解釋的,自解釋的原因不是它有智能,而是因為人們定義了一套叫做OID的東西,這個OID也是一個國際標準,它就是自解釋時需要查閱的字典,這種基於字典的自
解釋完美瞭解決了分層模型實現複雜多變的應用程式層協議時所遇到的各種問題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.