网络传输笔记(TCP)

以下内容来自个人理解,资料来源是中科院计算所老师讲课

UDP

网络传输笔记(TCP)_第1张图片

TCP

网络传输笔记(TCP)_第2张图片
网络传输笔记(TCP)_第3张图片
(打破脑袋记不住怎么办!!!)

建立连接过程

连接方端口任意
被连接方端口固定
握手三步走:
SYN
ACK
SYN+ACK
网络传输笔记(TCP)_第4张图片

连接任何一方都可以主动关闭连接

发送FIN数据包
表示己方不再发送数据

另一端可以继续发送数据

对方仍需要对接收数据进行确认
TCP是一个全双工传输协议

丢包与重传

未收到ACK表示丢包了,但是这个未收到ACK有一个时间阈值,较大或较小时的影响如下:
较大值:恢复丢包效率低
较小值:导致误重传 (Spurious Retransmission)

快速重传:
如果一个数据包之后的三个都被ACK,那么认为该包丢了,在一个RTT(Round Trip Time)内重传;

!!!拥塞控制

两种拥塞控制的策略:

  1. 端到端的拥塞控制(通过丢包和延迟判断拥塞情况)
    好处:设计简单
    坏处:性能取决于拥塞判断策略
  2. 网络设备的拥塞控制(通过标志位提醒拥塞 (ECN),显式的规定发送速率 (ATM))
    好处:利用率高
    坏处:可扩展性强

详细的拥塞控制过程:

对于网络设备,当遇到丢包需要降低发送速率,还需要定期探测最大发送速率,那么这个增减策略是什么?
一般就是线性增减(和性)或者乘性增减,两两组合共有四种策略;
网络传输笔记(TCP)_第5张图片
网络传输笔记(TCP)_第6张图片
网络传输笔记(TCP)_第7张图片
快恢复:
网络传输笔记(TCP)_第8张图片
网络传输笔记(TCP)_第9张图片

在我们知道拥塞控制加快重传和快恢复后可以达到稳态,那么初始的时候怎么达到稳态呢?

这时候就是慢启动机制了,慢启动从3或10开始每收到ACK,若窗口大小小于门限阈值,就加 1,否则加1/cwnd,慢启动的速率:log2(target_cwnd/initial_cwnd)个RTT达到稳态

Initialization:
  cwnd <- initial cwnd

if cwnd < ssthresh:
  for each ack:
    cwnd += 1
else:
  for each ack:
    cwnd += 1/cwnd

when encountering loss:
  ssthresh <- cwnd
  cwnd <- cwnd/2

此外快重传的时候为什么要是其后三个被确认才认为丢包?

因为传输中会有部分乱序的情况,用三个会减小误重传的几率。

对于重传机制,快重传适用于什么 ?

一般长流适用快重传,短流适用超时重传,web一般都是短流。

你可能感兴趣的:(笔记)