week 6 - zxc22273146/TCP-IP GitHub Wiki
區域網路可靠傳輸技術(Reliable Transmission)
-
封包後面的檢查碼為CRC(Cyclic Redundancy Check)
-
可靠傳輸:傳送ACK和等待Timeout
Automatic Repeat reQuest(ARQ)
Stop and Wait Protocol
利用1 bit sequence number可以解封包重複傳送的問題(Frame 0、ACK 0、Frame 1、ACK 1、Frame 0...)
-
Stop and Wait Protocol的缺點:效率不佳,因為每次傳送後必須等回應,且每次只能有一個frame傳送。
-
Sliding Window Protocol:一次送多個frame,並接收多個ACK。
-
Sending Window Size(SWS):一個可以送的封包量
Last Acknowledgement Received(LAR)
Last Frame Sent(LFS)
LFS-LAR<=SWS
-
當接收到序號為LAR+1的訊框的肯定回覆,傳送端滑動視窗。
當傳送端滑動視窗時,最多可以移動SWS個序號。
-
Receiving Window Size(RWS)
Largest Acceptable Frame(LAF)
Last Frame Received(LFR)
LAF-LFR<=RWS
-
當收到序號為LFR+1的訊框,接收端滑動視窗。
當接收端滑動視窗時,最多可以移動RWS個序號。
-
Cumulative Acknowledgement
接收端會設定LFR=SeqNumToAck-1與LAF=LFR+RWS
sequence number to ACK(編號是多少就表示之前的封包都已收到,但編號所指的還沒。例:收到1、3、4、5,但2還沒收到,所以編號會是2。)
-
Negative ACK:如果收錯封包正常都是丟掉並等timeout,但若是回覆NAK,速度會更快。
-
Additional ACK:如果封包2還沒收到,卻先收到封包1、3,也就是中間有空隙時,便多回一個ACK來反映。
-
Selective ACK:收到什麼封包就回什麼ACK,例如收到1、3就回1、3,這樣便可以得知2沒收到。
-
可用的sequence number一定要比允許同時傳送封包的量還大,否則號碼可能重複。
-
If RWS=SWS,SWS<(MaxSeqNum+1)/2:避免封包重複接收問題
例:MaxSeqNum=8,SWS=(8+1)/2=4.5取4,假如接收端已收到0123,但其ACK都遺失了且timeout以致傳送端重送0123,但此時接收端之視窗已移動到4567,因此不會重複接收這4個封包。
承上,若接收端重複收到0123仍然會回ACK,只不過它會回4,表示4以前的都收過了。
-
視窗大小(SWS)通常依據傳送端與接收端之間的"頻寬x延遲"的值來決定
-
Sliding Window Protocol的特色
Reliable Transmission(可靠的傳輸)
Preserve the order(訊框順序可以保持)
Flow control(接收端可以利用設定RWS的值來達到流量控制)