返回首页

{A}{S0}简介
数据链路层是7层 2层。
数据链路层提供的功能和程序的手段,以网络实体之间的数据传输和可能提供的手段来检测,并可能纠正错误可能在发生。
这个C#模拟将包括数据链路层的流量控制技术是:停止和等待回到ñ选择性重复停止和等待
停止并等待ARQ的是最简单的一种(ARQ)方法。停止并等待ARQ的发件人发送一次帧。发送每一帧后,发件人不发送任何进一步的帧,直到它接收到一个ACK(确认)信号。收到良好的帧后,接收方发送一个ACK。如果ACK没有达到一定的时间,被称为超时,前发件人,发件人再次发送相同的帧。
所以现在我们有3个方案:帧到达接收器接收,发送ACK到达Trasnmitter。帧倍。帧到达接收器接收,ACK倍。
在过去的情况下,发件人没有收到ACK,时间,并再次发送帧。现在接收器具有相同的帧的两个副本,不知道如果第二个是重复的帧或携带相同的数据序列中的下一帧。
(为简单起见,如果RX已经有帧,重复被忽略。)使用代码objselected_frame_stp_wt是我们从发射机ListBox中选定的帧dtimeout是我们预定的超时tsSend_Time是由计时器计算TimeSpan对象objFrame和objAck类clssSqaure的对象,负责创建和移动的原语

if (objselected_frame_stp_wt != null)

        {

            if (tsSend_Time.Seconds > dtimeout)//send time exceeded predetermined timeout

            {

                if (bsend_file) //Rx didn't receive Frame

                    lbl_receiver.Text = "Timeout";



                else            //Tx didn't receive Acknowledgment

                    lbl_sender.Text = "Timeout";



                timer1.Enabled = false;//stop sending

            }



            if (bsend_file)//Frame is being sent to Rx

            {

                if (LBx_Receiver.Items.Contains(objselected_frame_stp_wt))

                    lbl_sender.Text = "Resending " + objselected_frame_stp_wt.ToString();

                else

                    lbl_sender.Text = "Sending " + objselected_frame_stp_wt.ToString();



                if ((objFrame.Fxpos + dlen) > nwidth)//frame arrived to Rx

                {

                    if (!LBx_Receiver.Items.Contains(objselected_frame_stp_wt))

                    {

                        LBx_Receiver.Items.Add(objselected_frame_stp_wt);

                    }

                    lbl_sender.Text = "awaiting acknowledgement";

                    lbl_receiver.Text = "sending acknowledgement";

                    bsend_file = false;

                    dtstart = DateTime.Now;

                    objAck = new clssSqaure(nwidth, -20, -1, color_yellow);

                    lst_clssSqaure.Add(objAck);

                }

                objFrame.Fxpos += fspeed * objFrame.Fvec_X;

            }

            else//Ack is being sent to Tx

            {

                if (((objAck.Fxpos - dlen + 10) < (nwidth * -1)))//Ack arrived to Tx

                {

                    lbl_sender.Text = "Acknowledgement received";

                    if (LBx_Receiver.Items.Contains(objselected_frame_stp_wt))

                    {

                        LBx_Sender.Items.Remove(objselected_frame_stp_wt);

                    }

                    timer1.Enabled = false;

                    bsend_file = true;

                }

                objAck.Fxpos += fspeed * objAck.Fvec_X;

            }

        }        

停止和等待的ARQ相比,其他ARQs的是低效的,因为数据包之间的NBSP时间;如果ACK和数据接收成功的在途时间的两倍。
为了解决这个问题,可以一次发送多个数据包,具有较大的序列号,并使用一个设置之一的ACK。这就是回- N ARQ和选择性重复ARQ的。回- N
发送过程中,仍然没有从接收器接收一个​​ACK包发送窗口大小指定的帧数。
如果任何帧丢失或损坏,或ACK承认他们丢失或损坏,那么该帧和窗口中的所有(即使他们没有收到错误)下面的帧将被重新发送。{S2}使用代码
SlidingWindow去背N和选择性重复使用的功能。
Q_Frames是一个队列持有窗口的大小帧,当一个帧到达接收在一次成功的,一个objAck是创建并添加到队列Q_Acks。
如果一个帧被丢弃(我们回到GO - N模式),Rx将停止接收。{C}选择性重复
发送过程中,继续发送窗口大小指定帧帧丢失后。
回- N ARQ的不同,接收进程将继续接受并承认在经过最初的error.nbsp发送的帧,如果不从发件人的帧到达接收,发送方继续发送,直到它的后续帧清空其窗口。
接收方将继续与后续帧,以填补其接收窗口,每次答复包含最早的丢失帧的序列号的ACK。一旦发件人发送的所有帧,在其窗口重新发送的ACK帧的数目,然后继续它离开的地方。{S3}历史2月7日,2010年:战后初期

回答

评论会员:gaurav_verma_mca 时间:2012/01/25
!我爱埃及
100 {S4},男子100 {S4}
评论会员:OmarGamil 时间:2012/01/25
好文章... ...开始,但你应该链接上添加更多的信息,因为这是一个复杂的话题。请给哪个protocls等..支持你的榜样

最后,为什么我应该使用过度的免费模拟器