您的位置:首页 > 理论基础 > 计算机网络

[计算机网络笔记]第三部分——传输层之TCP 可靠传输实现

2016-11-16 13:35 676 查看
可靠数据传输需要用到的机制:

自动重传(ARQ):如果报文出错了,需要重传,这需要差错检测、接收方反馈(ack表示成功确认和nak表示失败确认)、重传三部分

有序到达:需要序号来标识数据包,确认是否是重传报文或者是否乱序到达报文

定时器:用于限制时延,超时则确认是丢包

流水线:为了加快传输速率,提高带宽利用率,在流水线中如果出现丢包或者乱序到达有两种应对方法

a)      
GBN(回退N步):只要出现丢包或者乱序到达,以后的数据包都不接收,全部需要重传

b)      
SR(选择重传):出现了丢包或者乱序到达,保留后接收到的数据包,同时提醒发送方重发丢失的数据包
 
TCP可靠传输的实现:

实现了自动重传,有ack应答报文,但是没有nak报文(nak时使用重复上一次ack代替,形成冗余ack报文)

实现了有序到达,用序列号标识一个报文,同时序号不是按“个”计算的,而是按字节计算的。举例来说,相邻的两个TCP报文,各100字节大小,它们的需要不会是0,1,而是0,100

实现了定时器:丢包的定时器时间设定在TCP当中是一个很有技巧的事情。TCP通过随机检测报文的送达情况获得若干个RTT(往返时间)样本,然后将其加权(新RTT样本的权重比旧RTT样本的更大),然后加上一个RTT偏差(不可能正好一个RTT就回得来,需要一个可容忍的浮动时间),得到超时重传的时间。公式是:
TimeoutRTT=EstimeedRTT(指数加权移动平均RTT)+4DevRTT(4倍的RTT偏差)

实现了流水线,当出现丢包或乱序时采取的策略既不是GBN也不是SR,看起来更像GBN一些。

超时时间计算:每一次确认丢包,TCP认为是网络拥塞,会将下一次的超时时间*2,避免加重拥塞

重复的ACK报文:即接收到对发送的同一报文的多次ACK报文,这是由于TCP没有否定确认,如果出现数据出错,或者报文乱序到达,只会重复应答最后一次正确接受的报文。TCP处理时认为这就是数据出错、发送数据乱序到达或者丢包的意思,但是网络的拥塞并不严重,此时TCP会启动快速重传机制

快速重传:即不用等丢包的计时器超时才重发报文,而是在3次冗余ACK之后立即发送冗余ACK确认的下一个序号的报文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: