1、流式儲存**
前向糾錯( fec, forward error correction )適用於應用程式級的簡單糾錯編碼。整個資料報的奇偶校驗提供了乙個範例:每傳送4 個資料報,就據此構造第5 個奇偶包,組成一組一起傳送。如圖所示中的資料報a 、b 、c 和d。奇偶包p 包含了冗餘位,這些冗餘位取自4 個資料報中每個資料位的奇偶或「異或」和。我們希望對於大多數5 個包組成的組中所有資料報都能到達接收端。如果果真如此,那麼接收器只需簡單地丟棄奇偶包。否則,如果只是丟失了校驗包,也沒有什麼損害。
上面的交錯方案只適用於未壓縮的取樣值。然而,交錯傳送方式也可以用於壓縮後的樣本值,只要有一種方法能找到壓縮資料流的取樣邊界。rfc 3119 給出了乙個針對壓縮音訊的交錯方案。交錯編碼是乙個有吸引力的技術,使用它時無須增加額外的頻寬,這點和fec 不同:然而,與fec 一樣,交錯編碼增加了傳輸延遲,因為需要等待一組資料報都到達(才能被解交錯〉。
不幸的是,這種場景是不現實的。這裡存在兩方面的原因。首先,通過網路路徑的頻寬變化很大,因此,**伺服器通常不清楚在它嘗試流出**之前是否有足夠的頻寬。乙個簡單的解決方法是以多種解析度來編碼**,並讓每個使用者選擇乙個由他internet 連線所支援的解析度。也就是說以1.5 mbps或更高速率的編碼能帶來高質量的**,而以512 kbps 或更少速率編碼的**質量較差。
表中列出了rtsp 協議所提供的主要命令。這些命令有乙個簡單的文字格式,類似於http 訊息,並且通常通過tcp 來傳遞命令。rtsp 也可以在udp 上執行,但每個命令都需要確認(並且,如果沒有獲得確認,就必須重新傳送〉。
儘管tcp 似乎不太適合實時流量的傳輸,但在實際上它還是經常被採用。最主要的原因是它比udp 更容易穿過防火牆,尤其是在通過http 埠執行時。大多數管理員把防火牆配置成保護他們的網路被不受歡迎的訪客訪問。他們幾乎總是允許來自遠端埠80 的tcp 連線,以便http 和web 流量通過,因為阻塞該埠將迅速引發校園網的不滿。然而,大多數其他埠還是被封鎖的,其中包括rstp 和rtp ,它們分別使用埠554 和埠5004 。
tcp 的缺點是增加了啟動延遲(因為tcp 啟動需要時間),同時也增加了更高的低水位標記。然而,只要網路頻寬超過**速率相當多個量級,這點只是很少的乙個懲罰。
2、流式直播**
其他重要的區別在於流**直播事件通常擁有數百或數千個同時**相同內容的觀眾。在這種場景下,流**直播很自然的解決方案是使用組播。組播流**的方案以如下方式工作。伺服器將每個**包通過ip 組播一次發給乙個組位址。網路給每個組成員傳遞乙份包的副本。要想接收**流的客戶必須加入該組。客戶使用igmp 就可做到這一點,而不必向**伺服器傳送乙個rtsp 訊息。這是因為**伺服器早就已經在傳送實時流了(之前第乙個使用者加入情況除外)。我們所需要的就是安排在本地接收流。
由於組播是乙個一對多的傳遞服務,**被rtp 包攜帶,並通過udp 傳輸。tcp 僅用在單個傳送者和單個接收者之間。由於udp 不能提供可靠性,可能會丟失一些資料報。為了把**丟失水平降低到可接受的水平範圍內,我們可以使用前面所述的fec 和交錯編碼技術。
對於擁有大量客戶的伺服器來說,以rtp 和udp 資料報來組播流**無疑是最有效的運營方式。否則,伺服器有n 個客戶時必須傳送n 個流,對於同時需要處理大量流事件的伺服器來說將需要非常大的網路頻寬。實際上internet 不是這樣工作的,看到這裡你可能會大吃一驚。通常發生的情況是每個使用者與伺服器建立乙個單獨的tcp 連線,**流通過該連線傳給使用者。對客戶端來說,這與**流儲存**的方式是相同。至於流儲存**,之所以有這個看似糟糕的選擇存在以下幾個原因。
第乙個原因是ip 組播在internet 上並沒有真正獲得部署。一些isp 和網路僅在自己內部支援它,但它通常不支援跨越其網路邊界的組播。其他原因還在於tcp 相比udp 具有某些優勢,正如前面所討論的那樣。基於tcp 傳輸的**流幾乎能到達internet 上所有的客戶,尤其是當偽裝成http 後可穿越防火牆,而且可靠的**流傳遞允許使用者執行倒帶回放。
返回到internet 的情形,在tcp 上面直播流**的缺點是伺服器必須為每個客戶端傳送乙個單獨的**副本。這對於使用者中等數量的客戶群是可行的,特別是傳輸音訊流。這裡的訣竅在於找到乙個具有良好internet 連線的位置放置**伺服器,使得它有足夠的頻寬。通常,這意味著向託管服務提供商租用一台資料中心的伺服器,而不是使用家裡一台只有寬頻internet 連線的伺服器。託管服務提供商的市場競爭力非常激烈,因此租用一台伺服器不會很昂貴。
然後,在pc 上捕獲的音訊流通過internet 被送入乙個**伺服器,作為播客的儲存檔案流或直播**流。該**伺服器具有良好的網路連線,它處理大量通過tcp 連線分發**的任務。同時該伺服器還承擔前端web 站點的角色,提供電台的介紹頁面以及指向可用流**內容的鏈結。所有這些事情都可利用商業軟體包來負責管理,也可利用開源軟體包來實施,比如icecast 。
然而,針對乙個擁有非常大量客戶群的電台來說,一台伺服器使用tcp 將流**傳送到每個客戶端的做法就變得不可行了。簡單地說,一台伺服器根本沒有足夠的頻寬來做這件事情。對於大型流****,流**的分發使用了一組伺服器來完成的,而且這組伺服器在地理上是分散的,從而使客戶端可以連線到最近的伺服器。這就是內容分發網路。
54 內容分發之二(應用層)
對等網路 bittorrent dht 分布式雜湊表 應用層總結 電子郵件是internet 的原始撒手鐗應用。世界上絕大多數電子郵件系統都使用由rfc 5321 和rfc 5322 定義的協議。郵件都有簡單的ascii 頭,而且通過陽me 可以傳送許多態別的內容。郵件被提交給郵件傳輸 由它作進一步...
第二章 應用層
一 網路應用程式體系結構 1 客戶機 伺服器體系結構 2 p2p體系結構 其實在這種體系結構中也有客戶機和伺服器,只是每個主機既充當了客戶機,又充當了伺服器的角色。發起主動連線的是客戶機,被動連線的是伺服器。二 套接字 程序是通過稱為套接字的軟體介面在網路上傳送和接受資料。打個比方 程序是一座房子,...
網路基礎二之應用層
1.套接字 也就是我們通常所說的 如 1 帶層次的檔案路徑又稱為訪問資源 2 查詢字串又稱為引數 3 埠號與名稱對等,所以埠號一般省略。3.http格式 空行 將報頭和有效載荷 正文 進行分離 4.http方法 1 get方法 獲取資源,傳參在url中,不安全,並且長度有限 2 post方法 傳參在...