Switch-Router

Recent Posts

  • 2021-06-24

    理解 TCP rate sample

    内核中的 TCP rate sample 被 bbr 这样的拥塞控制算法使用,它总共也就不到200行代码,其中一半还是注释,但理解起来可能还是需要花点力气。本文将尝试解释它的实现原理. 本文使用的内核代码版本是 4.9.1一句话概括, rate sample 的结果是一条流在** interval **时间内发送的报文被网络成功 delivered (成功送达)的数目。比如, 5s 内, 成功送达了 10个报文、10s 内成功送达了 15 个报文 …. 等等.内核的相关实现一共就3个函数...

  • 2021-05-30

    理解 BBR 拥塞控制算法--理论篇

    简介BBR (Bottleneck Bandwidth and Round-trip propagation time)是 Google 在 2016 年发布的一套拥塞控制算法。它尤其适合在存在一定丢包率的弱网环境下使用,在这类环境下,BBR 的性能远超 CUBIC 等传统的拥塞控制算法。以下是 Google 公开的的一些资料papervideoslidesgithub本文将帮助你理解 BBR。使用 BBR没有比展示效果更适合作为开篇的了。这里使用 iperf 来测试两个主机之间的 TCP...

  • 2021-05-25

    深入浅出TCP中的SYN-Cookies

    SYN Flood 攻击TCP连接建立时,客户端通过发送SYN报文发起向处于监听状态的服务器发起连接,服务器为该连接分配一定的资源,并发送SYN+ACK报文。对服务器来说,此时该连接的状态称为半连接(Half-Open),而当其之后收到客户端回复的ACK报文后,连接才算建立完成。在这个过程中,如果服务器一直没有收到ACK报文(比如在链路中丢失了),服务器会在超时后重传SYN+ACK。如果经过多次超时重传后,还没有收到, 那么服务器会回收资源并关闭半连接,仿佛之前最初的SYN报文从来没到过一...

  • 2021-04-05

    TCP timestamp 选项那点事

    TCP 最早在 RFC1323 [] 中引入了 timestamp 选项, 并在后来的 RFC7323 中进行了更新。引入 timestamp 最初有两个目的:1.更精确地估算报文往返时间(round-trip-time, RTT) 2. 防止陈旧的报文干扰正常的连接.本文将以 RFC7323 为基础,介绍 timestamp 选项的应用场景和当前业界对其的一些讨论。介绍Timestamp 是作为一个 TCP 选项存在于 TCP 首部。如下图所示,一个 timestamp 选项需要占据首部...

  • 2021-03-17

    理解内核 TCP 的重传次数

    sysctl_tcp_retries1和sysctl_tcp_retries2是内核提供的与 TCP 重传次数的相关的两个控制开关.其中sysctl_tcp_retries2 (后文简称retries2)与我们普通认知中的最大重传次数的关系更为密切.文档的原文是这么写的: This value influences the timeout of an alive TCP connection, when RTO retransmissions remain unacknowledged....