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的值來達到流量控制)