用於噪聲通道的單工停等協議
用於噪聲通道的單工停等協議是一種資料鏈路層協議,用於資料通訊,並具有錯誤控制和流量控制機制。它通常被稱為停等自動重傳請求(停等ARQ)協議。它為停等協議添加了錯誤控制功能。
此協議考慮了接收器具有有限處理速度以及幀在傳輸過程中可能損壞的事實。如果資料幀到達接收器端的速率大於其處理速率,則可能會丟棄幀。此外,幀在透過網路通道傳輸時可能會損壞或完全丟失。因此,接收器會為其接收到的每個有效幀傳送確認。傳送方僅在其收到接收方發出的確認,確認其可用於進一步資料處理時,才傳送下一個幀。否則,它將等待一段時間,然後重新發送幀。
設計
傳送方站點 - 在傳送方站點,會在幀中新增一個欄位以儲存序列號。如果有資料可用,資料鏈路層會建立一個具有特定序列號的幀併發送它。然後,傳送方等待確認到達一段時間。如果在規定時間內接收到具有該序列號的幀的肯定確認,則它會發送具有下一個序列號的幀。否則,它會重新發送同一幀。
接收方站點 - 接收方也保留預期到達的幀的序列號。當幀到達時,接收方會處理它並檢查它是否有效。如果它有效並且其序列號與預期幀的序列號匹配,則它會提取資料並將其傳遞給網路層。然後,它會將該幀的確認傳送回傳送方,以及其序列號。
用於噪聲通道的單工停等協議的傳送方站點演算法
begin SeqNo = 0; // Initialise sequence number of outbound frame canSend = True; //Allow the first frame to be sent while (true) //check repeatedly do Wait_For_Event(); //wait for availability of packet if ( Event(Request_For_Transfer) AND canSend) then Get_Data_From_Network_Layer(); frame = Make_Frame(SeqNo); Store_Copy_Frame(frame.SeqNo); Send_Frame_To_Physical_Layer(frame.SeqNo); Start_Timer(frame.SeqNo); SeqNo = SeqNo + 1; canSend = False; else if ( Event(Acknowledgement_Arrival)) then Receive_ACK(); if ( ACK_No = SeqNo ) then Stop_Timer (frame.SeqNo); canSend = True; end if else if ( Event( Timer > Max_time)) then Resend_Frame_To_Physical_Layer(frame.SeqNo-1); Start_Timer(frame.SeqNo-1); end if end while end
用於噪聲通道的單工停等協議的接收方站點演算法
begin RSeqNo = 0; // Initialise sequence number of expected frame while (true) //check repeatedly do Wait_For_Event(); //wait for arrival of frame if ( Event(Frame_Arrival) then Receive_Frame_From_Physical_Layer(); if ( Corrupted ( frame.SeqNo ) doNothing(); else if ( frame.SeqNo = RSeqNo ) then Extract_Data(); Deliver_Data_To_Network_Layer(); RSeqNo = RSeqNo + 1; end if Send_ACK(ACKframe[RSeqNo]); end if end while end
流程圖
以下流程圖描述了透過用於噪聲通道的單工停等ARQ協議進行通訊:
廣告