2010-04-04 38 views
3

我期待爲客戶端 - 服務器應用程序設計一個協議,並且需要一些指向可能幫助我的某些資源的鏈接。協議/數據包設計問題

大部分是我試圖創建我自己的「數據包」格式,所以我可以最大限度地減少發送的信息量。我正在尋找一些資源來剖析它們的協議,但它似乎完全缺乏數據包設計,例如SMTP(它只發送由CLRF終止的字符串)。在使用定製數據包的系統上使用SMTP等系統的優點/缺點是什麼? SMTP不能僅使用幾個字節來通過位標記覆蓋所有命令並節省帶寬/空間?

只是試圖讓我的頭繞過這一切。

回答

1

真正行使自己的協議,但是SMTP並沒有特別的優化空間,也不是它是基於分組的協議。它位於TCP之上,並使用TCP的流功能。您需要決定協議中的優點:性能是否敏感?潛伏?帶寬?

是否需要以超級用戶身份運行?如果沒有,你可能會想使用UDP或TCP。

您是否需要交付保證?如果是這樣,TCP可能是您的最佳選擇,除非您處理相當嚴重的性能或尺寸問題。

很少有協議,這些天設計單獨的數據包,雖然許多人使用TCP發送非常具體的數據結構,跨網,或者,不太常用,UDP。

如果你想真正優化空間或帶寬,考慮冷凝你的數據儘可能爲單個比特和字節,以及定義和包裝結構,以通過TCP發送。現代網絡適配器無論如何都對TCP進行了優化,其他策略往往沒有什麼優勢。

+0

我將要發送大量的數據,我想我試圖在它成爲問題之前進行微觀優化。我想我將不得不在TCP之上分層數據結構。但是,讓我們說我確實想要設計自己的基於數據包的協議,我會從哪裏開始?我將如何開始在C++中實現它? – cam 2010-04-04 15:01:03

+0

你會從佈局結構開始。然而,這是一件非常複雜的事情,你需要非常熟悉IP的內部,因爲如果你打算封裝它,你需要處理很多失敗案例:數據包可能會丟失,損壞,碎片化或無序發送。你只是設計一個算法來處理所有這些,並且你已經設置好了;) – WhirlWind 2010-04-04 15:06:02

+0

UDP爲你處理數據完整性問題,但你仍然需要處理其他事情。要實現這個東西,請看一下套接字層。 W. Richard Stevens有幾本書可能有幫助 – WhirlWind 2010-04-04 15:07:54

0

SMTP,HTTP和其他基於TCP的協議不關心數據包設計,因爲它們是基於流的。因此談談協議設計更有意義。

至於爲什麼使用基於文本的協議VS二進制協議...

Wireshark協議的數據包嗅探程序的可讀性是非常有用的。

此外,它往往是能夠簡單地遠程登錄到你的端口,並可以通過指定的純文本與服務器進行通信非常有用的。

而且與像HTTP協議的實際資源通常是通信的有效載荷,所述資源可以是二元或任何其它指定的格式。所以只需要純文本的標題和狀態並不是一件壞事。

0
  • TCP是一個基於協議,而不是基於數據包。
  • 使用與行文本使特設調試方便很多
  • 使用與行的文本能夠通過telnet
1

首先,你要實現的增強的傳輸協議(RTP等在UDP的頂部)或應用協議(如HTTP/SMTP)?

有你應該考慮在涉及您的協議的設計或應用程序的需求,這兩種情況下幾件事情:基於 流或數據包爲主, 單向/雙向, 狀態和sessionful或stateles, 可靠或盡力而爲, 時間要求, 流量/擁塞控制, 安全或平原。

邁向一個應用層協議,你也應該想想: 文本或二進制數據,應用數據映射到網絡數據單元/包,安全需求和完整性等