TCP

  • SACK: Selective ACK

    • 只有收到失序的分组时才会可能会发送SACK,TCP的ACK还是建立在累积确认的基础上的。

      如果收到的报文段与期望收到的报文段的序号相同就会发送累积的ACK,SACK只是针对失序到达的报文段的。

    • SACK具体格式

      SACK包括了两个TCP选项,一个选项用于标识是否支持SACK(SACK_permitted),是在TCP连接建立时时发送;另一种选项则包含了具体的SACK信息。

      第二个选项参数:接收方告诉发送方已经接收到并缓存不连续的数据块,发送方可根据此信息检查究竟是哪个块丢失,从而发送相应的数据块。

  • AIMD(additive-increase/multiplicative-decrease)

    即和性增长,乘性降低,相应的还有:乘性增长/乘性降低(MIMD)和加性增长/加性降低(AIAD)等算法

    AIMD算法最广为人知的用途是在TCP拥塞控制

    维基百科

    AIMD将拥塞窗口的线性增长与监测到拥塞时的指数降低相结合。使用AIMD拥塞控制的多个流将最终收敛到使用等量的共享链路。乘性增长/乘性降低(MIMD)和加性增长/加性降低(AIAD)的相关方案无法达到稳定。

    补充:网络协议为什么要关注公平和收敛,为什么AIMD可以收敛

  • Window ScaleTimestamp

    参考Implementation and validation of TCP options and congestion control algorithms for ns-3这篇paper

    image-20230404200209685
    • the sequence number wrap around

      链接

  • 关于TCP Cubic中的几个特殊的地方

    ①和②处是Cubic被重置后,k=0,窗口从三次曲线的平滑处开始增长,看起来像是线性的,其实并不是

    ③处是:Rto的时候才会更新m_lastMaxCwnd = 0;,但是只要丢包就是一个新的epoch,就会有m_epochStart = Time::Min (); // end of epoch。所以丢完包(不需要等Rto)之后,就可能满足m_epochStart == Time::Min () && m_lastMaxCwnd > segCwnd,从而更新出一个很大的k。bicK是Cubic回到W_max需要的时间,bicK很大的话这个时间跨度很长,再加上窗口增长以MSS为单位,攒够一个MSS才会加到Cwnd上,所以表现出来就是cwnd暂时是平的线。

    image-20230717224343944

计算机史

  • 命令行界面 (CLI)、终端 (Terminal)、Shell

    太长不看:

    • 命令行界面 (CLI) = 使用文本命令进行交互的用户界面
    • 终端 (Terminal) = TTY = 文本输入/输出环境
    • 控制台 (Console) = 一种特殊的终端
    • Shell = 命令行解释器,执行用户输入的命令并返回结果

网络

  • packet狂飙现象:(message间隔)

    message是间断产生的,如果上一个message发完之后与下一个msg隔得比较久,这期间窗口一直在增大,但是没有需要发送的数据

    一旦下一个message到来,就会立刻填满发送窗口,具体体现是一下子发送上百个包,我称其为packet狂飙现象🤦‍♂️

    (可以通过开pacing 解决)

  • 只有一条流是不会丢包的

    (前提是收包速率==发包速率)这样不会在队列产生堆积

    只有在多条流同时向buffer中发包的情况下,入的速率>出的速率,队列才会堆积,才可能丢包

  • Gbps这种网速的单位是1000为底
    数据大小是1024为底,MB、KB、GB这种

  • Clos架构

    想要实现网络拓扑的CLOS架构,只要让下联和上联的带宽1:1对等,同时让网络的上行和下行的带宽1:1对等,实现无阻塞网络

    例如Fat-Tree 拓扑:

    在这里插入图片描述

AI

Sys

存储-性能,IOPS,带宽,吞吐量,1TB数据需要多久写完