TCP协议是如何进行可靠传输的?

1 .TCP协议如何实现 可靠传输:  ARQ协议(停止等待ARQ协议 和 连续ARQ协议)、滑动窗口协议
 
可靠传输的优点:
    使用可靠传输协议,可以保证在不可靠的网络上实现可靠的通信。这种可靠传输协议一般被称为自动重传请求ARQ
        ARQ表明重传的请求是自动进行的,只要接收方没有告诉发送方自己已经收到了,发送方就会自动发送重复的数据包。
 
    超时重传:
            RTT:传送一个数据包所用的往返时间。
            RTTs:传送多个数据包所用的平均时间。RTTs是根据网络波动会一直变化的。
        TCP每发送一个报文段,就对这个报文设置一次计时器,如果在设置的计时器的时间内还没有到达目的地,就会后重新传送这一段报文。超时重传的时间比RTTs时间稍长一点。
    
 
 

1)、使用停止等待ARQ协议

 
    1.停止等待ARQ协议:发送方一次发送一个数据包,到达目的地后,目的地向发送方确认包(ACK),说我已经收到了xx数据包可以继续发送。然后发送方继续发送其他数据包。
 
                           
    
    2.工作原理A将一个整的文件分组为多个小的数据包向B进行发送,如果该数据包发送过去了,A没有收到B的反馈,就等待一段时间RTT(比一个往返时间长一点)。超过了等待时间就会自动重传该数据包。    
 
        (a)正常情况:如果在RTT时间内A收到了B的反馈,B表示已经收到了该数据包,可以继续发送第二个数据包,A就会继续往下进行发送其他数据包。发送的其他每个数据包都会进行上面的步骤。
        (b)超时重传:A向B发送的数据包M1没有到达B,A也会等待RTT时间(因为A不知道该数据包是丢了还是堵塞没到),如果等待时间超过了RTT时间A,就会丢弃发送的数据包,然后自动重传该数据包。然后进行下面的步骤。
        (C)确认丢失:A的数据包到达了B,但是B在给A反馈的时候的确认包丢了(所以叫确认丢失),A会等待RTT时间,A没有收到B的反馈说继续往下发,A就会自动将第一个数据包重新发送一次,但是B收到了两次相同的数据包,B就会将新收到的数据包丢弃,然后重新给A反馈,直到确认包到达了A才会继续向发送其他新的数据包。
        (d)确认迟到: A的数据包到达了B,但是B的确认包走了其他较长的线路,因为网络中的线路有很多。B的确认包就可能绕远路传输。A的等待时间超RTT时间,就会自动向B重传一次该数据包,这时B会受到两个相同的数据包,B会丢掉新的数据包,然后重新发送。如果在后面的传输过程中B的确认包到了A,A看到发送已经发送过的第二个数据包,A会很么也不做(该确认包已经过期),直接将该确认包丢弃。
    
    3.优缺点
        优点:简单。
        缺点:信道利用率太低。传输效率低。发送数据包的时间太短,等待确认收到的时间太长。
    
    4.信道利用率 U = TD/(TD+RTT+TA)  只有把TD发送数据包的时间提高,信道利用率才会高
                     
 
 
 
 
 

2)、连续ARQ协议(窗口技术)

 
    1.连续ARQ协议: 发送方可以连续发送多个数据包,不必每发完一个就停下来等待对方确认。因为信道上一直有数据不停的在发送,这种传输方式在很大程度上提高了信道利用率。
    
    2.信道利用率: 不需要等待第一个数据包返回才继续发送。多个数据包同时发送,后面时间一边确认一边发送。
                            
 
    3.工作原理: * 为使用了该协议的发送方有发送窗口,在这个窗口里面的所有的数据包都能发送,并且不会被清除。在发送窗口后面的数据包会从缓冲区中删除。发送窗口内的数据包可以连续发送到目的主机,不用等待接收到确认包。
 
                                          
 
    假设:发送方的发送窗口最大一次性发送5个数据包,在这个窗口里面的所有的数据包都能发送,并且不会被清除。在发送窗口内的5个数据包可以连续发送到目的主机,不用等待接收到确认包。
        第1个发送完第2个发送,假如当发送第4个数据包的时候,发送方也接收到了目的主机发来的第一个确认包(ACK),这时发送窗口就会往后移动一格,到上图中的(1),删除1数据包(因为已经确认1数据包已经收到了,所以1数据包就没有用了,然后1数据包会从缓冲区中删除),然后发送窗口滑到6的位置,6也进入了发送窗口,6数据包也会被发送到目的主机。
        当第二个数据包确认了之后,发送窗口会再往后移动一格,把第二个数据包放出来,并且从缓冲区中删掉,然后把7滑入到发送窗口
        重复上面步骤。。。
 
    错误分析
        ①:如果发送过程中,2数据包比1数据包先到了目的主机,即使2先到也不会立即确认该包,也会等待1数据包到了之后再确认2,然后逐个发送确认包。传输层保证数据包的有序。
        ②:如果发送过程中丢了包就会使用累计确认机制重新发送。 
            累计确认机制: 发送窗口中发送数据包1 2 3 4 ,但是只有1 2 4到了目的主机,3数据包丢了没有到达目的主机。目的主机发送来的确认包就会说已经收到了第2个数据包,说明2之前的都收到了,但是发送方确实已经发送了4个。这时,接收方就会从3开始往后重发数据包,即使4被目的主机收到了也会重发,因为前面没有连续。
 
    4.优缺点
        优点: 极大地提高了信道利用率
        缺点: 因为累积确认机制。如果中间丢了一个数据包,后面的即使收到了发送方也不知道,也会重新发送断的数据包之后的所有。
    
 
 
 

3)、滑动窗口协议: 

 
    1.滑动窗口协议: 在发送方和接收方之间各自维持一个滑动窗口,发送方是发送窗口,接收方是接收窗口(就相当于4.TCP协议 中的第二个图中的两个缓冲区,在缓冲区里面通过窗口进行发送和接收),在滑动窗口里面的字节都可以发送并且可以重复发送,但是后面的就会删掉,不能再发送。而且这个窗口是随着时间变化可以向前滑动的。它允许发送方发送多个分组而不需等待确认。TCP的滑动窗口是以字节为单位的滑动窗口技术。
 
    2.工作原理:     数据一边发 窗口一边移动
 
       A是发送端,B是接收端。B(接收端)会确认自己的一个接收窗口的大小然后把这个大小(以字节为单位)告诉A,A也会设置一个和B的接收窗口一样大的一个发送窗口。两个窗口的大小绝对一样(假设发送窗口和接收窗口的大小都是20字节)。
    当建立好连接(三次握手)之后,发送的文件(假设该文件有40个字节)就会转换成字节,然后把放到发送端的缓冲区里面,发送窗口就会从0开始发送。发送窗口里面取随机的字节数进行发送;当到达接收窗口后,接收窗口会对这些数据包检查,然后给发送端发送一个确认包,告诉接收窗口已经接收到了多少个字节(假设接收到了7个字节)。
    然后,发送窗口就会往后移至第8字节处,发送端前面接收到的字节(7个字节可以删掉)可删掉,然后该文件的新的字节就会补上去(第21-27个字节会补上去删掉的字节位置)。接收窗口就能读取接收到的连续的字节(能够读取前7个字节的数据,然后拼接起来。就相当于下载东西的时候的临时文件),然后接收窗口也会往后移至已经接收到的所有字节的位置(第8个字节位置)。
    当滑动窗口滑到缓冲区的最后,这个窗口就会重新折返到第一个位置,一直重复,直到把缓冲区里面的数据发送完。
    如果发送过程中第12-16个数据包丢了,后面的数据包全接收到了,导致接收到的数据包不连续。接收端就会发送确认包告诉发送端接收到了11,但是滑动窗口技术有一个选择确认机制(SACK),发送端就会只发送丢了的12-16个数据包,后面接收到的数据包就不会再发送。
    
 
    
   
    综上,如有问题欢迎指出。
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值