用於噪聲通道的單工停等協議


用於噪聲通道的單工停等協議是一種資料鏈路層協議,用於資料通訊,並具有錯誤控制和流量控制機制。它通常被稱為停等自動重傳請求(停等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協議進行通訊:

更新於: 2020年6月30日

11K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告