RDT复习
RDT 1.0
可靠信道上的可靠数据传输:底层通信完全可靠。
RDT 2.0(停等协议)
- 比特差错信道,按序接收。
- 差错检测,接收方反馈(ACK/NAK),重传(ARQ)。
RDT 2.1
- ACK和NAK可能受损
- 重传+序号
RDT 2.2
- 去掉NAK
RDT 3.0
- 经具有比特差错的丢包信号的可靠数据传输。
- 加一个计时器,等到合理时间后,发送方可重传。
流水线可靠数据传输协议
流水线对(pipeline)rdt的影响
- 必须增加序号范围。
- 两端必须缓存对个分组。
- 解决流水线的差错回复方法。
- 滑动窗口协议:回退n步GBN;选择重传SR。
TCP
connection-oriented protocal
- 是一个点到点的传输。
- 面向连接的。
- 可靠的,有序字节流。
- 流水线的。
- 流控制的。
- 全双工(双向的)
TCP长度20bytes
UDP长度8bytes
TCP的序号(Seq)和确认号(ACK)
数据编号(sequence number):字节为单位,首个字节的编号。(面向字节流)
确认号(acknowledgement number):字节为单位。期望接受的下一个字节的序列号(sequence number)。
rdt3.0 中定义确认号为当前字节的序列号,注意区分。
如何解决失序字节包
由实现决定,TCP未定义。
TCP-RTT
TCP的RTT比RTT长。
太短没必要。
太长对丢包的反应过慢。
估计RTT要取平均。
E s t i m a t e d R T T = ( 1 − α ) × E s t i m a t e d R T T + α × S a m p l e R T T EstimatedRTT = (1 - \alpha ) \times EstimatedRTT + \alpha \times SampleRTT EstimatedRTT=(1−α)×EstimatedRTT+α×SampleRTT
过去样本影响呈指数级下降。
timeout应该大于EstimatedRTT
EstimatedRTT + “safe margin”
D e v R T T = ( 1 − β ) × D e v R T T + β × ∣ S a m p l e R T T − E s t m i a t e d R T T ∣ β = 0.25 DevRTT = (1-\beta) \times DevRTT + \beta \times | SampleRTT - EstmiatedRTT | \ \ \ \beta = 0.25 DevRTT=(1−β)×DevRTT+β×∣SampleRTT−EstmiatedRTT∣ β=0.25
TCP 的可靠传输
- 基于IP的不可靠传输。
- 流水线。
- 累积确认。
- 定时器,处理超时重传。
TCP发送
从APP接受数据:
- 为segement创建序列号(Seq)。
- 启动定时器。
超时:
- 重发
- 重启定时器
TCP流控制
接收方有一个缓冲区。类似队列。IP报一边一直进,一边一直出给应用进程。
RcvBuffer 默认4096bytes