計算機網路_CH7
26 April 2020
計算機網路 Chapter 9-1
Video、Audio特性
video
- high bit rate : 傳輸需要很大的頻寬
- compression : video是image的集合,因此可以做compression減少需要的頻寬
- spatial redundancy : 很多空白,可以用少數值代表多個pixel
- temporal redundancy : video圖片間可能有很多相似,可以兩張圖片共用很多pixel值
Audio
- 相較vedio需要較少bit rate
- 類比訊號(analog sampling)到數位訊號,取道的類比訊號round到附近整數(quantized)
- 錄音時將類比訊號轉成數位訊號(例如有256個值,那一個frame就用1 byte儲存),播放時再將數位訊號轉回類比訊號(失真),frame越小失真狀況越少
CBR(constant bit rate): video encoding每個frame需要固定的bit來存 VBR(variable bit rate): video encoding隨frame不同而需要的bit數量不同
Multimedia network application
streaming stored audio, vedio
就是預先錄好存起來的影片、音樂,存在server上,user request時回傳給user,user接收respons
- user邊接收傳來的資料邊播放影片,這樣就可以邊接收邊播放,不用全部下載在播放
- user也可以選擇在播放過程中暫停影片、音檔
- 那就是要保證穩定的接收檔案,不然播完後還沒接收到新的frame就產生lag
client buffering
目的是preload資料,並buffer住
- 減少network delay造成lag的問題
- 減少bandwidth突然驟降來不及load frame的問題
問題:
- video packet loss, retransmit造成delay
- client interactive, 包括client快轉造成buffer瞬間減少或pause造成buffer overflow
Prefetching
client試圖download影片速度比播的速度快,這樣才能buffer,如果塞滿client buffer,然後TCP socket buffer也滿,那就會停止傳輸,等到client繼續消frame buffer有空間才會繼續傳
可分成以下三類,主要都是利用client side buffering
UDP streaming
- 傳輸速度固定,send rate = encoding rate = constant(穩定傳輸固定量,依據client播放影片消耗frame的速度) -> 如果有network delay會造成lag,畢竟是等速傳輸,沒有congestion conrtol,但沒辦法handle network jitter
- small buffer
- 用RTP(real time transport protocol)傳送資訊給client
- control connection, client送目前的state給server(告訴server目前影片在play, pause….)
- 可能會被firewall擋下
HTTP streaming
影片存在HTTP server的file裡,可用url存取
- client要求影片時,發起GET request之類的TCP request
- server瘋狂送資料,不要congestion control就好
- client的buffer有一個最低位,buffer量超過最低位就開始播
- 因為TCP有congestion control跟resend的機制,所以buffer很重要,不然依定lag,傳送過程像鋸齒狀
- youtube,Netflix用這個
- 能過防火牆
- larger playout delay
- 有HTTP byte-range header決定client目前想播哪個片段的影片,對reposition HTTP streaming很好用。透過header能決定server要傳哪個片段的影片。但跳轉的話buffer住的frame就會在沒被看的情況下被清掉,造成waste,因此設定client buffer size很重要。
VoIP
Internet telephony, real-time conversational voice 網路是best-effort讓資料從sender送到receiver,但中途沒有保證多久會收到和data loss rate為多少,所以對一個real-time service沒辦法保證多久會收到資料是一個很大的問題,以TCP而言有congestion control或者封包會掉,那這都沒辦法確定封包多久後會收到 VoIP提出下列兩個問題解法
- 何時playback frame
- 如何處理沒收到的frame(packet loss)
- loss tolerance,VoIP本身能接受小程度的packet loss
他提供三個機制
- Fixed playout delay
End-to-end delay
因為router queuing、processing導致delay 如果end-to-end delay沒太嚴重(150ms以內),不會影響user 但delay太長會有問題,所以VoIP會把超過400ms的packet就不理他了
jitter
因為router queuing delay的關系,有的packet delay小有的大,這種不規則的packet到達時間 例如queue住的資料中間夾了很多其他的packet,那delay就長 減少jitter
- 每個packet加入timestamp
- 用上述buffer方法確保一直都有東西buffer
Fixed playout delay
- sender將每個資料timestamp t
- client端設定每筆封包在產生後q秒內要播,所以封包從產生後t+q秒後要播
- 假設收到時超過t+q秒,就discard
- q的選法
- 如果network jitter很大,那q要設大一點
- 如果network jitter還好而且封包到的時間標準差少,q可以設小一點,q設太小會容易discard packet
如圖packet產生後固定時間就是播放的底線,沒收到就blue了
Adaptive playout delay
前面的做法都是要buffer到一定量才開始播放,這會導致一開始很大的initial delay。因此改成adaptive方式來算delay來決定threshold設多少 基本上就是算出delay的平均+標準差為threshold 令
- $t_i$ : 第i個packet被generate的timestamp(第i個packet上的timestamp)
- $r_i$ : client收到第i個packet時間
- $p_i$ : 第i個packet被播放的時間
- $d_i$ : average network delay,跟之前的network delay和最新的packet的內差,u為隨意constant
- $v_i$ : 封包delay的標準差
$d_i = (1-u)d_i+u(r_i-t_i)$ $v_i = (1-u)v_{i-1}+u|r_i-t_i-d_i|$
first packet playout time = $t_i+d_i+uv_i$ u是constant
透過sequence number、timestamp來判斷談話內容有沒有小段的silence
- 沒packet loss : 兩個packet timestamp相差20ms以上代表有小段silence
- 有packet loss : 同上外sequence number要連續,則代表有小段silencecket的timestamp不會超過某個值 如果有packet loss要注意sequence number
Loss recovery scheme
retransmission在real time service沒有意義,所以不要retransmission,但要設法能recover
Forward error Correction(FEC)
- 傳一些能幫助recovery的redundant資料
每傳n筆資料再傳一比redundant資料(為那n比資料的xor),
這方法能忍受一筆的data loss,當n不要取太大時,這方法有效
- 傳原本audio外再傳low-resolution的audio - piggyback
如果某個frame loss可以用low-resolution那個代替
可以忍受多筆的data loss
缺點是相對上面那個耗頻寬
Interleaving
傳送data時不是照順序一一傳送,而是跳著傳,因此一個packet段弄丟,並不是弄丟一段連續的frame,而是數個有距離的frame,因此不會出現一段是空白的frame
- 優點:減少packet loss造成的損害
- 缺點:playout delay高,不適用於VoIP
Error concealment
自己復原loss packet 影片、音檔的變化是有連續的,因此可以interpolate或者複製前一個frame來求得loss frame low computational cost
VoIP case study - Skype
- 用UDP傳資料,但如果有防火牆會改用TCP,control packet用TCP
- 使用FEC來做資料recover
- node分成一般peer跟super peer,一個super peer負責多個peer,登入的user都會assign到一個super peer
- supernode(super peer)彼此會和其他super node相連,並且像name server,存其他user的IP location
- client和super peer產生連結,super peer幫忙forward訊息
沒NAT
透過Super node(super peer)找到對方的IP,直接交流傳訊息(不用透過Super node來傳)
NAT的問題(兩方都NAT)
在NAT下,兩個client如果只知道IP並沒有辦法互相溝通,沒辦法建立連線,根本不知道對方是在哪個port 如果只有一方有NAT,只有NAT那方能夠建立connection,不然要用super node peer A要和peer B溝通
- 透過peer A的super peer和peer B的super peer溝通
- 建立連結後另外選一個非NAT的super peer(relay peer)來當作溝通橋樑,原本的super peer告知user連到relay peer並用它來溝通
會議模式
- 如果人藏在NAT裡,那還是要用relay node
- 利用server來distribute,因為upload速度比download慢很多,所以統一傳到一個server distribute減少upload的量 多人視訊、音檔 音檔: n個user傳音檔到server(conference initiator),他在把所有人傳來的何在ㄧ起傳給n-1 user 影片:
- 每個user傳影片到server cluster,server cluster把他distribute給其他n-1個user