網絡.流媒體的,以後或許用的到!

g729 和 Speex的壓縮率是一樣的?

準備知識:
IP頭大小:20 個固定bytes + 4 可選 bytes
TCP頭大小:20個固定bytes + 4可選 bytes
UDP頭大小:8個固定bytes
RTP頭大小:12個固定bytes
Ethernet頭大小:26個固定bytes + 46 ~1500 bytes; (最小值:46,最大值:1500)

原始數據:

8000hz 16bit mono 的RAW PCM 數據壓縮。

G729 好象是把 160 bytes 壓縮成 10 bytes。
speex 好象是把 320 bytes 壓縮成 20 bytes。

好象都是 16:1?

一秒鐘的 8000hz 16bit mono 的RAW PCM數據 就是 8000 * (16/8) = 16000。壓縮後g729和speex都是 1000bytes.

 

那麼我攢一秒的數據後才用TCP發送,那麼1秒的帶寬就是
1秒的帶寬 = Ethernet頭+IP頭+TCP頭+有效載荷(1000)
1秒的帶寬 = 28            +20    +20       +有效載荷(1000)
                    = 1068 bytes
                    = 1068 * 8 bit
                    = 1068 * 8 / 1024 kbps;
                    = 8.3 Kbps

是不是這樣啊。真暈。

 

4種類型的以太網幀:
  1.Ethernet II
  2.IEEE 802.2
  3.IEEE 802.3
  4.SNAP

Ethernet II幀:

  1.前導碼字段(8Byte):交替的1和0組成.5Mhz的時鐘頻率,包含7字節的起始幀分界符(SFD),SFD是10101011,最後1個字節同步(sync).

  2.目標地址(6Byte):目的MAC地址.

  3.源地址(6Byte):源MAC地址.

  4.類型字段(2Byte):用於辨別上層協議.

  5.數據和填充(46Byte-1500Byte):當數據字段小於46字節時,則在填充區填充.

  6.幀校驗序列(FCS)(4Byte):存儲CRC值,該值由發送設備產生,並在接受設備重新計算用來檢查幀是否被損壞.


802.3 Ethernet幀:

  1.前導碼字段(8Byte):交替的1和0組成.5Mhz的時鐘頻率,包含7字節的起始幀分界符(SFD),SFD是10101011,最後1個字節同步(sync).

  2.目標地址(6Byte):目的MAC地址.

  3.源地址(6Byte):源MAC地址.

  4.長度字段(2Byte):不能辨別上層協議.

  5.數據和填充(46Byte-1500Byte):當數據字段小於46字節時,則在填充區填充.

  6.幀校驗序列(FCS)(4Byte):存儲CRC值,該值由發送設備產生,並在接受設備重新計算用來檢查幀是否被損壞.

=============================

(802.3Ethernet幀沒有鑑別上層協議的能力(使用的是長度字段),因此需要IEEE定義的802.2LLC標準來實現這個功能。一個802.2幀是由802.3Ethernet幀加上

LLC信息組成的,這樣就可以辨別上層協議.)

========================

802.2(SAP)幀:

  在 802.3的長度字段和數據字段加入以下3個部分:

  1.目標服務訪問點字段(DSAP)(1Byte)

  2.源服務訪問點字段(SSAP)(1Byte)
  3.控制字段:(1Byte)

  **共同構成了LLC的首部.

802.2(SNAP)幀:

  SNAP幀與SAP幀的區別:

  1.DSAP與SSAP的內容被固定爲oxAA.

  2.控制字段內容被固定爲ox03.

  3.增加SNAP字段:1.OUIID字段(3Byte):MAC地址的前3字節.

          2.類型字段(2Byte):標識Ethernet攜帶的上層數據類型.

========================================================================
 

假如我用TCP發送了一個 3000 bytes的數據。
 
那麼加上TCP頭的數據就是 20 + 3000;(TCP頭長度爲20)
再加上IP頭的數據就是 20 + (20 + 3000);(IP頭的長度纔來一個20);

那麼IP頭+TCP頭+裸數據 = 3040 bytes。是吧?

這個總共 3040 bytes的數據並不是一塊被 以太網發送。因爲以太網的最大數據長度 1500.

那麼實際上 總共的 3040 bytes的數據,是被分了 3個以太網包?分別是 1500 + 1500 + 40???

那麼再加上 802.3 Ethernet幀: 的頭數據


  1.前導碼字段(8Byte):交替的1和0組成.5Mhz的時鐘頻率,包含7字節的起始幀分界符(SFD),SFD是10101011,最後1個字節同步(sync).

  2.目標地址(6Byte):目的MAC地址.

  3.源地址(6Byte):源MAC地址.

  4.長度字段(2Byte):不能辨別上層協議.

  5.數據和填充(46Byte-1500Byte):當數據字段小於46字節時,則在填充區填充.

  6.幀校驗序列(FCS)(4Byte):存儲CRC值,該值由發送設備產生,並在接受設備重新計算用來檢查幀是否被損壞.

那麼最後 以太網的 三個包就是:

1、26 + 1500
2、26 + 1500
3、26 + 46(剩了個40,但是 數據段最小是 46,所以 40字節的數據實際佔用 46 字節。)


 

轉自:http://blog.vckbase.com/zaboli/archive/2010/04/15/41654.html

 

 

 

 

 

發佈了17 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章