计算机网络第三讲:传输层 Transport Layer 全面复习

计算机网络第三讲:传输层 Transport Layer 全面复习

### 文章目录

  • [计算机网络第三讲:传输层 Transport Layer 全面复习](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [@TOC](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [一、这一讲到底在讲什么?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [二、传输层和网络层的区别](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [2.1 网络层是主机到主机](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [2.2 传输层是进程到进程](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [三、传输层提供的基本服务](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [3.1 多路复用 Multiplexing](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [3.2 多路分解 Demultiplexing](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [3.3 可靠数据传输 Reliable Data Transfer](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [3.4 流量控制 Flow Control](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [3.5 拥塞控制 Congestion Control](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [3.6 连接建立 Connection Setup](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [四、Internet 中的两个主要传输层协议:TCP 和 UDP](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [4.1 UDP 的特点](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [4.2 TCP 的特点](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [4.3 二者的常见使用场景](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [五、多路复用与多路分解](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [5.1 为什么需要复用和分解?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [5.2 socket 的作用](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [5.3 UDP 的分解依据](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [5.4 TCP 的分解依据](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [5.5 UDP 和 TCP 分解对比](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [六、UDP:无连接传输协议](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [6.1 UDP 为什么存在?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [6.2 UDP segment 结构](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [6.3 UDP 发送端动作](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [6.4 UDP 接收端动作](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [6.5 UDP checksum](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [七、可靠数据传输 rdt:从理想到现实](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [7.1 可靠服务与不可靠信道](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [7.2 rdt 的接口](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [7.3 用有限状态机描述协议](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [八、rdt1.0:可靠信道上的可靠传输](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [九、rdt2.0:信道可能出现比特错误](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [9.1 ACK 和 NAK](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [9.2 stop-and-wait 停等协议](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [9.3 rdt2.0 的致命缺陷](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [十、rdt2.1:加入序号解决重复问题](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [10.1 发送方状态](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [10.2 接收方状态](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [10.3 为什么两个序号够?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [十一、rdt2.2:去掉 NAK,只使用 ACK](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [十二、rdt3.0:信道可能丢包](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [12.1 超时重传](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [12.2 如果只是 ACK 延迟怎么办?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [12.3 rdt3.0 的核心机制总结](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [十三、停等协议的性能问题](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [13.1 停等为什么低效?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [13.2 停等利用率公式](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [十四、流水线和滑动窗口](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [14.1 流水线思想](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [14.2 流水线带来的变化](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [14.3 滑动窗口利用率](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [十五、Go-Back-N 协议](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [15.1 GBN 的发送方](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [15.2 GBN 的接收方](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [15.3 GBN 丢包例子](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [15.4 GBN 中 ACK 丢失怎么办?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [15.5 GBN 发送窗口最大值](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [十六、Selective Repeat 协议](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [16.1 SR 的基本思想](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [16.2 SR 发送方](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [16.3 SR 接收方](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [16.4 SR 丢包例子](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [16.5 SR 中 ACK 丢失怎么办?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [16.6 SR 发送窗口最大值](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [十七、GBN 和 SR 对比总结](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [17.1 典型题](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [十八、稍带确认 Piggybacking](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [18.1 ACK Timer](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [十九、TCP 概述](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [19.1 TCP 的基本特性](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [19.2 TCP 是字节流,不是消息流](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [19.3 MSS 和 MTU](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [二十、TCP 报文段结构](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [二十一、TCP 序号和确认号](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [21.1 TCP 序号不是"第几个包"](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [21.2 TCP ACK 表示"下一个想要的字节"](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [21.3 TCP 使用累计 ACK](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [21.4 TCP 如何处理乱序 segment?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [二十二、TCP RTT 估计和超时重传](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [22.1 RTO 设置太短的问题](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [22.2 RTO 设置太长的问题](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [22.3 SampleRTT](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [22.4 EstimatedRTT](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [22.5 DevRTT 和 TimeoutInterval](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [二十三、TCP 发送方和接收方行为](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [23.1 TCP 发送方简化逻辑](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [事件一:应用层交来数据](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [事件二:超时 timeout](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [事件三:收到 ACK](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [23.2 TCP 接收方 ACK 生成规则](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [情况一:收到按序 segment,之前所有数据都已经 ACK](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [情况二:收到按序 segment,已经有一个 ACK 等待发送](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [情况三:收到乱序 segment,出现 gap](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [情况四:收到 segment 填补了 gap](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [23.3 TCP 快速重传](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [二十四、TCP 流量控制](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [24.1 问题来源](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [24.2 rwnd 接收窗口](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [24.3 接收缓存 RcvBuffer](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [24.4 零窗口问题](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [二十五、TCP 连接管理](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [25.1 TCP 连接中需要初始化什么?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [25.2 为什么两次握手不够?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [25.3 TCP 三次握手过程](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [25.4 TCP 连接释放](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [25.5 半开连接](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [二十六、拥塞控制基本原理](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [26.1 什么是拥塞?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [26.2 拥塞控制和流量控制的区别](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [二十七、拥塞的代价](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [27.1 场景一:一个路由器、无限缓存、无重传](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [27.2 场景二:一个路由器、有限缓存、需要重传](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [27.3 场景三:多跳网络中的拥塞](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [二十八、拥塞控制的两类方法](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [28.1 端到端拥塞控制](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [28.2 网络辅助拥塞控制](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [二十九、TCP 拥塞控制:cwnd 和 AIMD](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [29.1 拥塞窗口 cwnd](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [29.2 AIMD 思想](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [29.3 为什么用 AIMD?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [三十、TCP 慢启动和拥塞避免](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [30.1 慢启动 Slow Start](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [30.2 什么时候从慢启动转为拥塞避免?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [30.3 ssthresh 如何设置?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [30.4 拥塞避免 Congestion Avoidance](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [三十一、TCP Tahoe 和 TCP Reno](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [31.1 丢包信号的两种形式](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [31.2 Timeout 更严重](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [31.3 3 个重复 ACK 较温和](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [31.4 TCP Tahoe](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [31.5 TCP Reno](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [三十二、TCP 拥塞控制例子与总结](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [三十三、TCP CUBIC](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [33.1 CUBIC 的直觉](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [33.2 CUBIC 的增长方式](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [三十四、瓶颈链路与 Delay-based TCP](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [34.1 瓶颈链路](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [34.2 为什么不要更满?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [34.3 Delay-based 拥塞控制](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [34.4 BBR](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [三十五、ECN:显式拥塞通知](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [35.1 ECN 工作过程](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [35.2 ECN 的意义](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [三十六、TCP 公平性](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [36.1 公平性目标](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [36.2 AIMD 为什么趋向公平?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [36.3 UDP 公平吗?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [36.4 并行 TCP 连接的公平性问题](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [三十七、传输层功能演化:QUIC](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [37.1 QUIC 是什么?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [37.2 为什么 QUIC 基于 UDP?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [37.3 QUIC 的连接建立](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [37.4 QUIC 的 stream 和队头阻塞](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [三十八、本章知识体系总图](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [三十九、考试高频重点](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [39.1 必须会解释的概念](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [39.2 必须会做的计算](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [停等协议利用率](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [滑动窗口无差错利用率](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [GBN 窗口限制](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [SR 窗口限制](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [TCP 最终发送窗口](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [EstimatedRTT](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [TimeoutInterval](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [四十、容易混淆的点](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [40.1 UDP 不可靠,不等于 UDP 没用](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [40.2 TCP 是字节流,不是报文流](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [40.3 ACK 号不是"我收到了这个字节"](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [40.5 流量控制不是拥塞控制](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [40.6 慢启动并不慢](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [40.7 timeout 和 3 duplicate ACK 的严重程度不同](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [四十一、小测题与答案](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [题 1:传输层和网络层的核心区别是什么?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [题 2:UDP 接收端根据什么进行多路分解?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [题 3:TCP socket 由什么标识?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [题 4:rdt3.0 相比 rdt2.2 新增了什么机制?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [题 5:为什么停等协议效率低?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [题 6:GBN 中接收方如何处理乱序 packet?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [题 7:SR 为什么要求窗口大小不超过序号空间一半?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [题 8:TCP 中 seq number 表示什么?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [题 9:TCP 中 ACK=500 表示什么?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [题 10:TCP 最终发送窗口由什么决定?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [题 11:慢启动阶段 cwnd 如何增长?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [题 12:QUIC 为什么能减少队头阻塞?](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)
  • [四十二、最后总结](#文章目录 计算机网络第三讲:传输层 Transport Layer 全面复习 @[TOC] 一、这一讲到底在讲什么? 二、传输层和网络层的区别 2.1 网络层是主机到主机 2.2 传输层是进程到进程 三、传输层提供的基本服务 3.1 多路复用 Multiplexing 3.2 多路分解 Demultiplexing 3.3 可靠数据传输 Reliable Data Transfer 3.4 流量控制 Flow Control 3.5 拥塞控制 Congestion Control 3.6 连接建立 Connection Setup 四、Internet 中的两个主要传输层协议:TCP 和 UDP 4.1 UDP 的特点 4.2 TCP 的特点 4.3 二者的常见使用场景 五、多路复用与多路分解 5.1 为什么需要复用和分解? 5.2 socket 的作用 5.3 UDP 的分解依据 5.4 TCP 的分解依据 5.5 UDP 和 TCP 分解对比 六、UDP:无连接传输协议 6.1 UDP 为什么存在? 6.2 UDP segment 结构 6.3 UDP 发送端动作 6.4 UDP 接收端动作 6.5 UDP checksum 七、可靠数据传输 rdt:从理想到现实 7.1 可靠服务与不可靠信道 7.2 rdt 的接口 7.3 用有限状态机描述协议 八、rdt1.0:可靠信道上的可靠传输 九、rdt2.0:信道可能出现比特错误 9.1 ACK 和 NAK 9.2 stop-and-wait 停等协议 9.3 rdt2.0 的致命缺陷 十、rdt2.1:加入序号解决重复问题 10.1 发送方状态 10.2 接收方状态 10.3 为什么两个序号够? 十一、rdt2.2:去掉 NAK,只使用 ACK 十二、rdt3.0:信道可能丢包 12.1 超时重传 12.2 如果只是 ACK 延迟怎么办? 12.3 rdt3.0 的核心机制总结 十三、停等协议的性能问题 13.1 停等为什么低效? 13.2 停等利用率公式 十四、流水线和滑动窗口 14.1 流水线思想 14.2 流水线带来的变化 14.3 滑动窗口利用率 十五、Go-Back-N 协议 15.1 GBN 的发送方 15.2 GBN 的接收方 15.3 GBN 丢包例子 15.4 GBN 中 ACK 丢失怎么办? 15.5 GBN 发送窗口最大值 十六、Selective Repeat 协议 16.1 SR 的基本思想 16.2 SR 发送方 16.3 SR 接收方 16.4 SR 丢包例子 16.5 SR 中 ACK 丢失怎么办? 16.6 SR 发送窗口最大值 十七、GBN 和 SR 对比总结 17.1 典型题 十八、稍带确认 Piggybacking 18.1 ACK Timer 十九、TCP 概述 19.1 TCP 的基本特性 19.2 TCP 是字节流,不是消息流 19.3 MSS 和 MTU 二十、TCP 报文段结构 二十一、TCP 序号和确认号 21.1 TCP 序号不是“第几个包” 21.2 TCP ACK 表示“下一个想要的字节” 21.3 TCP 使用累计 ACK 21.4 TCP 如何处理乱序 segment? 二十二、TCP RTT 估计和超时重传 22.1 RTO 设置太短的问题 22.2 RTO 设置太长的问题 22.3 SampleRTT 22.4 EstimatedRTT 22.5 DevRTT 和 TimeoutInterval 二十三、TCP 发送方和接收方行为 23.1 TCP 发送方简化逻辑 事件一:应用层交来数据 事件二:超时 timeout 事件三:收到 ACK 23.2 TCP 接收方 ACK 生成规则 情况一:收到按序 segment,之前所有数据都已经 ACK 情况二:收到按序 segment,已经有一个 ACK 等待发送 情况三:收到乱序 segment,出现 gap 情况四:收到 segment 填补了 gap 23.3 TCP 快速重传 二十四、TCP 流量控制 24.1 问题来源 24.2 rwnd 接收窗口 24.3 接收缓存 RcvBuffer 24.4 零窗口问题 二十五、TCP 连接管理 25.1 TCP 连接中需要初始化什么? 25.2 为什么两次握手不够? 25.3 TCP 三次握手过程 25.4 TCP 连接释放 25.5 半开连接 二十六、拥塞控制基本原理 26.1 什么是拥塞? 26.2 拥塞控制和流量控制的区别 二十七、拥塞的代价 27.1 场景一:一个路由器、无限缓存、无重传 27.2 场景二:一个路由器、有限缓存、需要重传 27.3 场景三:多跳网络中的拥塞 二十八、拥塞控制的两类方法 28.1 端到端拥塞控制 28.2 网络辅助拥塞控制 二十九、TCP 拥塞控制:cwnd 和 AIMD 29.1 拥塞窗口 cwnd 29.2 AIMD 思想 29.3 为什么用 AIMD? 三十、TCP 慢启动和拥塞避免 30.1 慢启动 Slow Start 30.2 什么时候从慢启动转为拥塞避免? 30.3 ssthresh 如何设置? 30.4 拥塞避免 Congestion Avoidance 三十一、TCP Tahoe 和 TCP Reno 31.1 丢包信号的两种形式 31.2 Timeout 更严重 31.3 3 个重复 ACK 较温和 31.4 TCP Tahoe 31.5 TCP Reno 三十二、TCP 拥塞控制例子与总结 三十三、TCP CUBIC 33.1 CUBIC 的直觉 33.2 CUBIC 的增长方式 三十四、瓶颈链路与 Delay-based TCP 34.1 瓶颈链路 34.2 为什么不要更满? 34.3 Delay-based 拥塞控制 34.4 BBR 三十五、ECN:显式拥塞通知 35.1 ECN 工作过程 35.2 ECN 的意义 三十六、TCP 公平性 36.1 公平性目标 36.2 AIMD 为什么趋向公平? 36.3 UDP 公平吗? 36.4 并行 TCP 连接的公平性问题 三十七、传输层功能演化:QUIC 37.1 QUIC 是什么? 37.2 为什么 QUIC 基于 UDP? 37.3 QUIC 的连接建立 37.4 QUIC 的 stream 和队头阻塞 三十八、本章知识体系总图 三十九、考试高频重点 39.1 必须会解释的概念 39.2 必须会做的计算 停等协议利用率 滑动窗口无差错利用率 GBN 窗口限制 SR 窗口限制 TCP 最终发送窗口 EstimatedRTT TimeoutInterval 四十、容易混淆的点 40.1 UDP 不可靠,不等于 UDP 没用 40.2 TCP 是字节流,不是报文流 40.3 ACK 号不是“我收到了这个字节” 40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口 40.5 流量控制不是拥塞控制 40.6 慢启动并不慢 40.7 timeout 和 3 duplicate ACK 的严重程度不同 四十一、小测题与答案 题 1:传输层和网络层的核心区别是什么? 题 2:UDP 接收端根据什么进行多路分解? 题 3:TCP socket 由什么标识? 题 4:rdt3.0 相比 rdt2.2 新增了什么机制? 题 5:为什么停等协议效率低? 题 6:GBN 中接收方如何处理乱序 packet? 题 7:SR 为什么要求窗口大小不超过序号空间一半? 题 8:TCP 中 seq number 表示什么? 题 9:TCP 中 ACK=500 表示什么? 题 10:TCP 最终发送窗口由什么决定? 题 11:慢启动阶段 cwnd 如何增长? 题 12:QUIC 为什么能减少队头阻塞? 四十二、最后总结)

一、这一讲到底在讲什么?

第三讲的主题是 传输层 Transport Layer

如果说应用层关心的是"应用进程想表达什么",比如 HTTP 请求、DNS 查询、邮件内容;网络层关心的是"怎样把数据从一台主机送到另一台主机";那么传输层关心的就是:

怎样把一台主机上的某个进程的数据,交给另一台主机上的正确进程。

因此传输层的核心不是"主机到主机",而是:

进程到进程 process-to-process 的逻辑通信。

课件这一章的主线非常清楚:

  1. 传输层提供什么服务;
  2. 多路复用和多路分解如何把数据交给正确进程;
  3. UDP 为什么简单、为什么仍然有用;
  4. 可靠数据传输 rdt 如何一步一步推导出来;
  5. 停等协议为什么效率低,流水线和滑动窗口为什么重要;
  6. Go-Back-N 和 Selective Repeat 的区别;
  7. TCP 如何实现可靠传输、流量控制和连接管理;
  8. 拥塞控制为什么必要,TCP 如何用 cwnd 控制发送速率;
  9. Tahoe、Reno、CUBIC、BBR、ECN 和公平性;
  10. 传输层功能如何演化到 QUIC。

这章内容很多,但如果按"从简单到复杂"的逻辑看,其实就是一句话:

UDP 是传输层的最简形式,TCP 是在不可靠 IP 之上构造可靠、有序、流控、拥塞控制的传输服务,而 QUIC 则是在 UDP 之上重新实现现代 Web 所需的传输能力。


二、传输层和网络层的区别

2.1 网络层是主机到主机

网络层提供的是 host-to-host 通信。

也就是说,IP 协议负责把一个 IP 数据报从源主机送到目的主机。它关心的是:

  • 源 IP 地址;
  • 目的 IP 地址;
  • 路由器如何转发;
  • 数据报怎样跨越多个网络到达目的主机。

但 IP 只负责把数据送到"这台机器",并不知道这台机器上到底应该由哪个应用进程接收。

比如你的电脑同时打开了:

  • 浏览器;
  • 微信;
  • 网盘;
  • 游戏;
  • 远程连接工具。

网络层只知道"数据到了这台电脑",但是不知道数据应该交给浏览器,还是微信,还是游戏。

2.2 传输层是进程到进程

传输层提供的是 process-to-process 通信。

它在端系统中工作:

  • 发送端:把应用层消息切分或封装成传输层报文段 segment,然后交给网络层;
  • 接收端:从网络层收到 segment 后,根据首部信息交给正确 socket,再交给对应应用进程。

课件用了一个家庭寄信的类比:

  • 主机 host 就像一个家庭;
  • 进程 process 就像家庭里的孩子;
  • 应用层消息就像信件;
  • 网络层就像邮政系统,把信送到某个家庭;
  • 传输层就像家长,把信分给家里的具体孩子。

所以:

网络层负责把信送到家,传输层负责把信交给家里的正确人。


三、传输层提供的基本服务

第三讲开头列出了传输层的几个核心服务。

3.1 多路复用 Multiplexing

发送端有多个应用进程都要发送数据。传输层要把多个应用进程的数据统一交给网络层发送。

这叫 多路复用

简单说:

多个应用进程的数据,共用同一个传输层和网络层发送出去。

发送端传输层会给应用数据加上传输层首部,首部中包含端口号等信息,后面接收方就可以根据这些信息把数据分回正确进程。

3.2 多路分解 Demultiplexing

接收端收到 IP 数据报后,取出其中的 TCP 或 UDP segment。传输层要判断这个 segment 应该交给哪个 socket。

这叫 多路分解

简单说:

接收端根据首部字段,把收到的数据交给正确的应用进程。

3.3 可靠数据传输 Reliable Data Transfer

网络层 IP 是 best-effort 的,它不保证:

  • 一定送达;
  • 不丢包;
  • 不乱序;
  • 不重复;
  • 不出错。

所以如果应用需要可靠性,就需要传输层来增强网络层服务。TCP 就提供可靠、有序的数据传输。

3.4 流量控制 Flow Control

流量控制解决的是:

发送方不要发得太快,把接收方缓存撑爆。

它关注的是接收方能力。

如果接收方应用进程读数据很慢,接收缓存会越来越满,这时接收方要告诉发送方:"你慢点发,我这边快装不下了。"

3.5 拥塞控制 Congestion Control

拥塞控制解决的是:

发送方不要发得太快,把网络内部路由器、链路和缓存压垮。

它关注的是网络整体状态。

注意区分:

概念 解决的问题 关注对象
流量控制 接收方来不及收 接收端缓存
拥塞控制 网络内部堵塞 路由器、链路、队列

3.6 连接建立 Connection Setup

TCP 是面向连接的协议,在真正传输数据前要先进行三次握手。

握手的目的不是"建立一条物理线路",而是让双方确认:

  • 对方存在;
  • 对方愿意通信;
  • 双方收发能力正常;
  • 双方初始序号等连接状态被初始化。

UDP 没有连接建立过程。


四、Internet 中的两个主要传输层协议:TCP 和 UDP

课件强调,Internet 应用主要使用两类传输层协议:

  • UDP:User Datagram Protocol
  • TCP:Transmission Control Protocol

4.1 UDP 的特点

UDP 是一个非常简单的传输层协议。

它的特点是:

  • 无连接;
  • 不握手;
  • 每个 UDP segment 独立处理;
  • 不保证可靠;
  • 不保证有序;
  • 不保证不重复;
  • 没有拥塞控制;
  • 首部小,开销低;
  • 可以尽可能快地发送。

UDP 可以理解为:

在 IP 的 best-effort 服务上,增加端口号和校验和。

它本身不负责复杂可靠性。

4.2 TCP 的特点

TCP 则复杂得多。

它提供:

  • 面向连接;
  • 可靠传输;
  • 按序交付;
  • 字节流服务;
  • 流量控制;
  • 拥塞控制;
  • 连接建立与释放。

TCP 可以理解为:

在不可靠 IP 之上,通过序号、ACK、定时器、重传、窗口和拥塞控制,构造出可靠、有序的端到端字节流。

4.3 二者的常见使用场景

UDP 常用于:

  • DNS;
  • SNMP;
  • 流媒体;
  • 实时音视频;
  • HTTP/3 的底层承载。

TCP 常用于:

  • HTTP/1.1、HTTP/2;
  • 文件传输;
  • 邮件;
  • 登录认证;
  • 远程连接;
  • 需要可靠性的应用。

注意:HTTP/3 使用 UDP 并不表示 HTTP/3 不可靠,而是 QUIC 在 UDP 上层自己实现可靠传输、拥塞控制、连接管理和加密。


五、多路复用与多路分解

5.1 为什么需要复用和分解?

一台主机上可能有很多应用进程同时通信。

例如:

  • 浏览器访问网页;
  • 微信收消息;
  • 网盘同步文件;
  • 游戏发送实时状态;
  • DNS 查询域名。

这些数据最终都要通过网络层 IP 发送出去。

发送端的问题是:

多个应用进程的数据如何共用传输层?

这就是多路复用。

接收端的问题是:

收到的数据如何交给正确的应用进程?

这就是多路分解。

5.2 socket 的作用

应用进程并不是直接和 TCP/UDP 内部打交道,而是通过 socket。

可以把 socket 理解为:

应用进程和传输层之间的接口。

发送端应用进程把数据写入 socket,传输层取走数据,加首部后交给 IP。

接收端传输层收到 segment 后,根据首部字段找到 socket,再由应用进程从 socket 中读数据。

5.3 UDP 的分解依据

UDP 是无连接的。

接收端 UDP 分解主要看:

目的端口号 destination port number。

如果多个 UDP segment 的目的端口号相同,即使它们来自不同源 IP、不同源端口,也会被交给同一个 UDP socket。

例如 DNS 服务器监听 53 端口。很多客户端的 DNS 查询都发往服务器的 53 端口,因此它们都会进入 DNS 服务进程对应的 UDP socket。

UDP 发送数据时,需要指定:

  • 目的 IP 地址;
  • 目的端口号。

源端口通常由本机选择,接收端用它来回包。

5.4 TCP 的分解依据

TCP 是面向连接的。

一个 TCP socket 由四元组标识:

text 复制代码
源 IP 地址
源端口号
目的 IP 地址
目的端口号

也就是常说的:

TCP 四元组。

这解释了为什么一个 Web 服务器可以同时服务很多客户端。

假设服务器 IP 是 B,监听 80 端口。

不同客户端都访问:

text 复制代码
目的 IP = B
目的端口 = 80

但它们的源 IP 和源端口不同,所以四元组不同,服务器就可以把它们分到不同 TCP 连接。

5.5 UDP 和 TCP 分解对比

协议 分解依据 特点
UDP 目的端口号 同一目的端口的数据进入同一个 socket
TCP 源 IP、源端口、目的 IP、目的端口 同一服务器端口可以对应多个连接

六、UDP:无连接传输协议

6.1 UDP 为什么存在?

既然 UDP 不可靠,为什么还需要它?

因为不是所有应用都需要 TCP 那样复杂的可靠性。

UDP 的优点是:

  • 不需要握手,减少 RTT 开销;
  • 头部小;
  • 实现简单;
  • 不维护连接状态;
  • 应用可以自己决定可靠性策略;
  • 适合对时延敏感、能容忍少量丢包的应用。

例如实时语音通话中,丢一个小音频包比等待重传更可接受。因为等包回来时,声音已经过时了。

6.2 UDP segment 结构

UDP 首部很简单,只有四个主要字段:

text 复制代码
源端口号 source port
目的端口号 destination port
长度 length
校验和 checksum

其中 length 表示整个 UDP segment 的长度,包括首部和数据。

UDP 数据部分就是应用层交下来的 payload。

6.3 UDP 发送端动作

UDP 发送端做的事情包括:

  1. 从应用层收到应用消息;
  2. 确定 UDP 首部字段值;
  3. 创建 UDP segment;
  4. 交给 IP 层。

6.4 UDP 接收端动作

UDP 接收端做的事情包括:

  1. 从 IP 层收到 UDP segment;
  2. 检查 UDP checksum;
  3. 根据目的端口号进行多路分解;
  4. 提取应用层消息;
  5. 交给对应 socket。

6.5 UDP checksum

UDP checksum 的目标是检测传输过程中是否发生比特翻转。

发送端把 UDP segment 内容看成一串 16-bit 整数,做反码求和,然后把结果放入 checksum 字段。

接收端重新计算 checksum:

  • 如果计算结果与收到的 checksum 不一致,说明检测到错误;
  • 如果一致,说明没有检测到错误。

但要注意:

没有检测到错误,不等于一定没有错误。

因为 checksum 是一种较弱的差错检测方式,有些比特错误可能相互抵消,导致 checksum 不变。

课件中用例子说明了:即使两个 16 位整数发生了某些比特翻转,最终 checksum 也可能不变。


七、可靠数据传输 rdt:从理想到现实

可靠数据传输是第三讲最重要的理论部分。

课件采用一种递进方式:

text 复制代码
rdt1.0 -> rdt2.0 -> rdt2.1 -> rdt2.2 -> rdt3.0

每一步都加入一种新的现实问题,然后再补充机制解决。

7.1 可靠服务与不可靠信道

从应用层角度看,它希望传输层提供一个"可靠信道":

  • 数据不丢;
  • 数据不坏;
  • 数据不乱序;
  • 数据不重复交付。

但是实际底层信道可能是不可靠的:

  • packet 可能损坏;
  • packet 可能丢失;
  • ACK 可能损坏;
  • ACK 可能丢失;
  • 数据可能延迟。

因此可靠传输协议需要在不可靠信道上,通过发送端和接收端的配合,构造出可靠服务。

7.2 rdt 的接口

课件中 rdt 有几个接口:

接口 含义
rdt_send() 上层应用调用,把数据交给可靠传输协议
udt_send() rdt 调用,把 packet 交给不可靠信道
rdt_rcv() 接收方从不可靠信道收到 packet 时触发
deliver_data() rdt 把正确数据交给上层应用

注意,虽然这里只讨论单向数据传输,但控制信息是双向流动的。发送方要发数据,接收方要回 ACK 或 NAK。

7.3 用有限状态机描述协议

课件用 FSM,即有限状态机,描述可靠传输协议。

FSM 的核心是:

  • 当前处于某个状态;
  • 收到某个事件;
  • 执行动作;
  • 转移到下一个状态。

协议设计不能只靠一句"应该能重传",而要把每一种事件和状态都定义清楚。


八、rdt1.0:可靠信道上的可靠传输

rdt1.0 假设底层信道完全可靠:

  • 不出错;
  • 不丢包;
  • 不乱序。

发送端只需要:

text 复制代码
make_pkt(data)
udt_send(packet)

接收端只需要:

text 复制代码
extract(packet, data)
deliver_data(data)

这个版本几乎没有复杂性。

但现实网络不可能这么理想,所以继续升级。


九、rdt2.0:信道可能出现比特错误

rdt2.0 假设底层信道可能出现比特错误,但不会丢包。

于是需要两个机制:

  1. checksum:检测 packet 是否损坏;
  2. ACK/NAK:让接收方告诉发送方接收结果。

9.1 ACK 和 NAK

  • ACK:Acknowledgement,表示正确收到;
  • NAK:Negative Acknowledgement,表示收到但有错误。

如果接收方发现 packet 没坏,就回 ACK。

如果接收方发现 packet 损坏,就回 NAK。

发送方收到 NAK 后,重传当前 packet。

9.2 stop-and-wait 停等协议

rdt2.0 是一个停等协议。

所谓停等,就是:

发送方发一个 packet 后,就停下来等接收方响应;收到 ACK 后才发下一个。

停等协议简单,但效率很低,后面会专门分析。

9.3 rdt2.0 的致命缺陷

rdt2.0 没有考虑一个问题:

如果 ACK 或 NAK 本身也损坏了怎么办?

这时发送方不知道:

  • 接收方到底有没有收到数据;
  • 接收方收到的是正确数据还是错误数据;
  • 自己应该继续发下一个,还是重传当前包。

如果发送方盲目重传,接收方可能收到重复数据。

因此需要新机制:

序号 sequence number。


十、rdt2.1:加入序号解决重复问题

rdt2.1 在 packet 中加入序号。

停等协议一次最多只有一个未确认 packet,因此只需要两个序号:

text 复制代码
0 和 1

10.1 发送方状态

发送方要记住:

  • 当前发送的是序号 0,还是序号 1;
  • 当前等待的是 ACK0,还是 ACK1。

如果 ACK/NAK 损坏,发送方可以重传当前 packet。

10.2 接收方状态

接收方也要记住:

  • 当前期待收到 seq=0 的 packet;
  • 还是期待收到 seq=1 的 packet。

如果收到重复 packet,接收方不能再次交给上层,只能丢弃或重新 ACK。

10.3 为什么两个序号够?

因为停等协议每次只有一个 packet 在路上。

接收方只需要区分:

  • 这是我现在期待的新 packet;
  • 还是上一次已经收到过的重复 packet。

所以 0 和 1 足够交替使用。


十一、rdt2.2:去掉 NAK,只使用 ACK

rdt2.2 和 rdt2.1 功能相同,但不再使用 NAK。

它的做法是:

接收方只发送 ACK,ACK 中明确写明"我已经正确收到哪个序号的 packet"。

如果接收方收到错误包,就不发 NAK,而是重复发送"上一个正确收到的 packet 的 ACK"。

例如接收方期待 seq=1,但收到损坏包,它可以重复发送 ACK0。

发送方收到重复 ACK 后,就知道当前 packet 没有被正确接收,于是重传。

这点非常重要:

TCP 也采用类似思想:不使用 NAK,而是使用 ACK 和重复 ACK。


十二、rdt3.0:信道可能丢包

rdt3.0 进一步假设:

  • 数据 packet 可能损坏;
  • 数据 packet 可能丢失;
  • ACK 可能损坏;
  • ACK 也可能丢失。

checksum、序号、ACK、重传仍然有用,但还不够。因为如果 packet 或 ACK 丢了,发送方可能永远等不到响应。

所以 rdt3.0 加入:

定时器 timeout。

12.1 超时重传

发送方发送 packet 后启动定时器。

如果在合理时间内收到 ACK,就停止定时器。

如果超时仍未收到 ACK,就认为可能发生丢包,于是重传当前 packet。

12.2 如果只是 ACK 延迟怎么办?

如果 ACK 没丢,只是延迟了,发送方可能会过早超时,导致重复发送。

这不影响正确性,因为接收方可以根据序号识别重复 packet,不会重复交付给上层。

12.3 rdt3.0 的核心机制总结

rdt3.0 的可靠传输依赖四个基本机制:

text 复制代码
checksum + sequence number + ACK + timeout retransmission

也就是:

  • checksum 检测错误;
  • sequence number 识别新包和重复包;
  • ACK 告诉发送方接收情况;
  • timeout 解决丢包和 ACK 丢失问题。

这四个机制是后面 TCP 可靠传输的基础。


十三、停等协议的性能问题

rdt3.0 虽然可靠,但它是停等协议,效率很低。

13.1 停等为什么低效?

停等协议的过程是:

text 复制代码
发送一个 packet
等待 ACK
收到 ACK 后再发送下一个 packet

如果链路带宽很大、RTT 很长,发送方大多数时间都在等待。

可以把链路理解成一根水管:

  • 带宽越大,水管越粗;
  • 传播时延越长,水管越长;
  • 停等协议每次只倒一点水进去,然后等水流到对面再继续倒。

结果就是水管大部分时间没有被填满。

13.2 停等利用率公式

设:

  • 分组长度为 L bit;
  • 链路速率为 R bps;
  • 往返时延为 RTT

发送一个分组所需时间为:

text 复制代码
L / R

发送方利用率近似为:

text 复制代码
U = (L/R) / (RTT + L/R)

如果 RTT 远大于发送时间 L/R,利用率就会非常低。

课件例子中:

  • 链路速率 1 Gbps;
  • 单向传播时延 15 ms,因此 RTT 约 30 ms;
  • packet 长度 8000 bit;
  • 发送时间只有 8 微秒。

所以绝大多数时间都在等 ACK,信道利用率极低。


十四、流水线和滑动窗口

为了解决停等协议效率低的问题,引入 流水线 Pipelining滑动窗口 Sliding Window

14.1 流水线思想

流水线允许发送方:

在没有收到前面 packet 的 ACK 前,连续发送多个 packet。

这样链路中可以同时有多个"在途但未确认"的 packet。

这就像水管里可以同时流动很多段水,而不是每次只放一滴。

14.2 流水线带来的变化

流水线协议需要额外机制:

  • 更大的序号空间;
  • 发送方缓存未确认 packet;
  • 接收方可能需要缓存乱序 packet;
  • 窗口控制在途 packet 数量。

14.3 滑动窗口利用率

课件中定义:

text 复制代码
a = tprop / tframe

其中:

  • tprop 是单向传播时延;
  • tframe 是发送一个 frame 所需时间。

如果窗口大小为 W,无差错情况下:

text 复制代码
若 W >= 2a + 1,则发送方可以连续发送,利用率约为 1
若 W < 2a + 1,则利用率约为 W / (2a + 1)

这说明:

窗口越大,越能填满长肥管道。

如果使用稍带确认 piggybacking,并且要考虑反向数据传输时间,则课件给出:

text 复制代码
U = W / (2 + 2a)

十五、Go-Back-N 协议

Go-Back-N,简称 GBN,是一种流水线可靠传输协议。

15.1 GBN 的发送方

发送方维护一个大小为 N 的发送窗口。

窗口中可以包含:

  • 已发送但未确认的 packet;
  • 可以发送但还未发送的 packet。

GBN 的 ACK 是累计确认:

text 复制代码
ACK(n) 表示 n 及之前的所有 packet 都已经按序正确收到。

发送方收到 ACK(n) 后,窗口左边界移动到 n+1。

GBN 通常只给最老的未确认 packet 设置定时器。

如果 packet n 超时:

发送方重传 n 以及窗口中所有编号更大的已发送 packet。

这就是 Go-Back-N 的含义:回退到出错位置,从那里开始重传。

15.2 GBN 的接收方

GBN 接收方非常简单。

它只需要记住:

text 复制代码
当前期待收到的序号 rcv_base 或 expectedseqnum

如果收到按序 packet,就交付给上层,并发送对应 ACK。

如果收到乱序 packet,通常直接丢弃,并重复发送最近一个按序收到 packet 的 ACK。

例如接收方期待 packet 2,但收到了 packet 3:

  • packet 3 被认为乱序;
  • 接收方不交付;
  • 通常也不缓存;
  • 重新发送 ACK1。

15.3 GBN 丢包例子

假设发送方窗口大小为 4,发送:

text 复制代码
pkt0, pkt1, pkt2, pkt3

其中 pkt2 丢失。

接收方收到 pkt0,发送 ACK0。

收到 pkt1,发送 ACK1。

pkt2 丢了。

后来收到 pkt3,但 pkt3 乱序,所以丢弃,并重复发送 ACK1。

发送方迟迟收不到 ACK2,超时后从 pkt2 开始重传:

text 复制代码
pkt2, pkt3, pkt4, pkt5 ...

15.4 GBN 中 ACK 丢失怎么办?

如果某个 ACK 丢了,但后面的累计 ACK 到了,发送方仍然可以知道之前的 packet 已经收到。

例如 ACK2 丢失,但 ACK3、ACK4 到达。

由于 ACK4 表示 0 到 4 都已按序收到,所以 ACK2 的丢失不会导致重传。

15.5 GBN 发送窗口最大值

如果序号空间是 n bit,那么可用序号数是:

text 复制代码
2^n

GBN 中发送窗口必须满足:

text 复制代码
Ws <= 2^n - 1

为什么不能等于 2^n

因为序号会循环使用。如果窗口过大,新一轮 packet 的序号可能和上一轮未确认 packet 的序号重叠,接收方和发送方可能无法判断 ACK 对应的是旧数据还是新数据。

课件用 3 bit 序号空间 0 到 7 举例,如果窗口大小为 8,就可能产生歧义。


十六、Selective Repeat 协议

Selective Repeat,简称 SR,是另一种流水线可靠传输协议。

16.1 SR 的基本思想

SR 和 GBN 最大区别是:

GBN 丢一个,从丢失处开始全重传;SR 丢哪个,只重传哪个。

因此 SR 的接收方会缓存乱序到达的 packet。

16.2 SR 发送方

SR 发送方维护发送窗口,并且概念上为每个未确认 packet 维护一个定时器。

如果 packet n 超时:

text 复制代码
只重传 packet n

收到 ACK(n) 后,只把 packet n 标记为已确认。

如果 n 正好是窗口中最小的未确认 packet,则窗口向前移动到下一个未确认位置。

16.3 SR 接收方

SR 接收方有接收窗口,窗口大小大于 1。

对于收到的 packet:

  • 如果在接收窗口内且未收到过,就接收并 ACK;
  • 如果按序,就交付给上层,并把后面已经缓存且连续的 packet 一起交付;
  • 如果乱序,就先缓存;
  • 如果是窗口之前的旧 packet,就重新 ACK;
  • 如果不在合理范围内,就忽略。

16.4 SR 丢包例子

发送方发送:

text 复制代码
pkt0, pkt1, pkt2, pkt3

其中 pkt2 丢失。

接收方收到 pkt0,ACK0。

收到 pkt1,ACK1。

收到 pkt3,虽然乱序,但 SR 会缓存 pkt3,并发送 ACK3。

接着可能收到 pkt4、pkt5,也会缓存并分别 ACK。

等 pkt2 超时重传后,接收方收到 pkt2,就可以一次性交付:

text 复制代码
pkt2, pkt3, pkt4, pkt5

这就是 SR 比 GBN 效率高的原因。

16.5 SR 中 ACK 丢失怎么办?

如果 ACK2 丢失,发送方不知道 pkt2 已经收到。

等 pkt2 的定时器超时后,发送方会重新发送 pkt2。

接收方如果已经收过 pkt2,就识别为重复包,重新 ACK 即可。

这也说明:

SR 比 GBN 更节省重传数据,但需要更多缓存和更复杂状态管理。

16.6 SR 发送窗口最大值

SR 的窗口限制比 GBN 更严格。

如果序号空间是 n bit,那么可用序号数是 2^n

SR 必须满足:

text 复制代码
Ws <= 2^(n-1)

也就是窗口大小最多是序号空间的一半。

原因是 SR 接收方会接收并缓存乱序 packet。如果窗口太大,序号回绕后,新旧 packet 可能落入接收窗口,导致接收方无法判断这是新数据还是旧数据。

课件中用序号 0、1、2、3,窗口大小 3 的例子说明了这种歧义。


十七、GBN 和 SR 对比总结

对比项 Go-Back-N Selective Repeat
发送窗口 大于 1 大于 1
接收窗口 等于 1 大于 1
ACK 类型 累计 ACK 单独 ACK
乱序 packet 通常丢弃 缓存
丢包后重传 从丢失包开始全部重传 只重传丢失包
接收方复杂度
发送方复杂度 中等 高,需要多个定时器思想
带宽利用率 可能较低 更高
窗口限制 Ws <= 2^n - 1 Ws <= 2^(n-1)

17.1 典型题

题目:采用 GBN 协议,发送方已经发送编号 0 到 7 的包,当计时器超时时,如果发送方只收到 0、2、3 号包的确认,需要重发哪些包?

分析:GBN 使用累计确认,严格来说如果收到 ACK3,说明 0 到 3 都已经按序收到,因此需要从 4 开始重传。

但是如果题目语境是"只收到 0、2、3 号单独确认",那就不是标准 GBN 的累计 ACK 表达方式。做题时要看老师定义。标准 GBN 重点是:

从最早未确认的包开始,后面全部重传。

题目:采用 SR 协议,发送方已经发送编号 0 到 7 的包,如果收到 0、2、3 的确认,需要重传哪些包?

SR 是单独确认,所以已经确认 0、2、3,未确认的是:

text 复制代码
1, 4, 5, 6, 7

但实际是否全部重传,还要看哪些 packet 的定时器超时。SR 原则是:

哪个未确认 packet 超时,就只重传哪个。


十八、稍带确认 Piggybacking

在全双工通信中,双方都可能同时发送数据。

如果接收方每收到一个数据包都单独发 ACK,会增加额外控制报文。

稍带确认的思想是:

接收方不急着单独发 ACK,而是等自己也有数据要发时,把 ACK 放在反向数据包的首部中一起发出去。

这叫 piggybacking ACK。

18.1 ACK Timer

问题是:如果反向一直没有数据要发,ACK 不能无限等。

所以需要 ACK timer。

过程是:

  1. 接收方收到按序 packet;
  2. 启动 ACK timer;
  3. 如果 timer 到期前有反向数据要发,就把 ACK 稍带在反向数据中;
  4. 如果 timer 到期仍没有反向数据,就单独发送 ACK。

注意区分两个定时器:

定时器 用途
数据重传 timer 发送方等待 ACK,超时重传数据
ACK timer 接收方等待是否有反向数据可稍带 ACK

十九、TCP 概述

前面 rdt、GBN、SR 都是为了理解 TCP 打基础。

TCP 是实际 Internet 中最重要的传输层协议之一。

19.1 TCP 的基本特性

TCP 提供:

  • 点对点通信:一个发送方,一个接收方;
  • 可靠、有序字节流;
  • 无消息边界;
  • 流水线传输;
  • 累计 ACK;
  • 全双工;
  • 面向连接;
  • 流量控制;
  • 拥塞控制。

19.2 TCP 是字节流,不是消息流

这是非常重要的一点。

应用程序可能分多次写入:

text 复制代码
write("hello")
write("world")

但 TCP 不保证接收方也分两次读到 hello 和 world。

接收方可能一次读到:

text 复制代码
helloworld

也可能分成:

text 复制代码
hel
lowor
ld

TCP 只保证:

接收方读到的字节序列和发送方写入的字节序列完全一致。

它不保留应用层消息边界。

19.3 MSS 和 MTU

TCP 数据部分最大长度叫 MSS:

text 复制代码
MSS = Maximum Segment Size

链路层最大传输单元叫 MTU:

text 复制代码
MTU = Maximum Transmission Unit

以太网常见 MTU 是 1500 字节。

如果 IP 头 20 字节,TCP 头 20 字节,则常见 MSS 为:

text 复制代码
1500 - 20 - 20 = 1460 字节

课件也提到 TCP MSS 最小值常见为 536 字节。


二十、TCP 报文段结构

TCP segment 首部包含很多重要字段。重点理解:

字段 作用
源端口号 标识发送进程
目的端口号 标识接收进程
序号 Sequence Number 本段数据第一个字节的编号
确认号 ACK Number 期望收到的下一个字节编号
首部长度 TCP 首部长度
标志位 SYN、ACK、FIN、RST 等
接收窗口 rwnd 用于流量控制
校验和 checksum 检测差错
紧急指针 配合 urgent data
选项 options 如 MSS、窗口扩大、时间戳等

TCP 的序号和 ACK 是理解可靠传输的核心。


二十一、TCP 序号和确认号

21.1 TCP 序号不是"第几个包"

TCP 的序号是:

本 segment 数据部分第一个字节在字节流中的编号。

例如:

  • segment 1 携带字节 0 到 99,则 seq = 0;
  • segment 2 携带字节 100 到 199,则 seq = 100。

21.2 TCP ACK 表示"下一个想要的字节"

TCP ACK 号表示:

接收方期望收到的下一个字节编号。

如果接收方已经正确收到字节 0 到 99,那么它会发送:

text 复制代码
ACK = 100

意思是:

100 之前的字节我都收到了,下一个请从 100 开始发。

21.3 TCP 使用累计 ACK

TCP 的 ACK 是累计确认。

ACK = 100 表示:

text 复制代码
0 到 99 都已经按序收到

如果中间缺了某个字节,即使后面字节到了,ACK 也不能越过缺口。

21.4 TCP 如何处理乱序 segment?

课件中指出,TCP 规范没有强制规定接收方如何处理乱序 segment,这取决于具体实现。

常见实现会缓存乱序 segment,等缺失部分到达后再按序交付。


二十二、TCP RTT 估计和超时重传

TCP 要进行超时重传,就必须设置超时时间 RTO。

22.1 RTO 设置太短的问题

如果超时时间太短:

  • packet 其实没丢;
  • ACK 只是还在路上;
  • 发送方却误以为丢包;
  • 导致不必要重传。

这叫 premature timeout。

22.2 RTO 设置太长的问题

如果超时时间太长:

  • packet 真丢了;
  • 发送方却很久才发现;
  • 恢复速度慢;
  • 吞吐下降。

22.3 SampleRTT

TCP 可以测量某个 segment 从发送到收到 ACK 的时间,称为 SampleRTT。

但 TCP 通常忽略重传 segment 的 SampleRTT,因为无法判断 ACK 是对原始 segment 的确认,还是对重传 segment 的确认。

22.4 EstimatedRTT

TCP 使用指数加权移动平均 EWMA 平滑 RTT:

text 复制代码
EstimatedRTT = (1 - α) * EstimatedRTT + α * SampleRTT

典型值:

text 复制代码
α = 0.125

含义是:

  • 新样本有一定影响;
  • 历史样本影响逐渐指数衰减;
  • 估计值比单次 SampleRTT 更稳定。

22.5 DevRTT 和 TimeoutInterval

只知道平均 RTT 不够,还要知道 RTT 波动程度。

如果 RTT 波动很大,就需要更大的安全余量。

常见公式思想:

text 复制代码
TimeoutInterval = EstimatedRTT + 4 * DevRTT

其中 DevRTT 是 SampleRTT 相对 EstimatedRTT 偏差的 EWMA。


二十三、TCP 发送方和接收方行为

23.1 TCP 发送方简化逻辑

发送方主要处理三个事件。

事件一:应用层交来数据

发送方会:

  1. 创建 TCP segment;
  2. 设置 seq number;
  3. 如果定时器没运行,就启动定时器;
  4. 将 segment 交给 IP。

定时器通常用于最早未确认 segment。

事件二:超时 timeout

发送方会:

  1. 重传导致超时的 segment;
  2. 重启定时器。
事件三:收到 ACK

如果 ACK 确认了新的数据,发送方会:

  1. 更新已确认范围;
  2. 移动发送窗口;
  3. 如果仍有未确认数据,继续运行定时器。

23.2 TCP 接收方 ACK 生成规则

课件根据 RFC 给出了接收方 ACK 行为。

情况一:收到按序 segment,之前所有数据都已经 ACK

接收方可以延迟 ACK,最多等待约 500ms。

如果期间没有下一个 segment 到达,就发送 ACK。

情况二:收到按序 segment,已经有一个 ACK 等待发送

立即发送一个累计 ACK,一次确认两个按序 segment。

情况三:收到乱序 segment,出现 gap

立即发送 duplicate ACK,ACK 号仍然是下一个期望字节。

情况四:收到 segment 填补了 gap

如果 segment 正好从缺口低端开始,立即发送 ACK。

23.3 TCP 快速重传

如果发送方连续收到三个重复 ACK,说明:

  • 接收方还在收到后续 segment;
  • 网络并不是完全断了;
  • 但某个中间 segment 很可能丢了。

于是 TCP 不等待超时,直接重传丢失 segment。

这叫:

Fast Retransmit 快速重传。


二十四、TCP 流量控制

流量控制解决的是接收方缓存溢出问题。

24.1 问题来源

如果网络层把数据交给接收方 TCP 的速度,比应用进程从 socket buffer 中读取数据的速度更快,那么接收缓存会越来越满。

如果发送方继续大量发送,接收方缓存可能溢出。

24.2 rwnd 接收窗口

TCP 接收方会在 TCP 首部的 rwnd 字段中通告自己剩余的接收缓存空间。

发送方必须保证:

text 复制代码
未确认的在途数据量 <= rwnd

这样就能保证接收缓存不会溢出。

24.3 接收缓存 RcvBuffer

接收方有一个接收缓存 RcvBuffer。

接收窗口 rwnd 大致表示:

text 复制代码
rwnd = RcvBuffer - 当前已占用缓存

很多操作系统会自动调整接收缓存大小。

24.4 零窗口问题

如果 rwnd = 0,发送方通常不能继续发送数据。

但如果接收方后来有空间了,通知窗口变大的 ACK 又丢了,发送方可能永远不知道窗口恢复。

这会造成零窗口死锁。

解决方法是:

持续定时器 persistence timer。

当持续定时器到期,发送方发送一个 1 字节窗口探测报文,接收方回复当前窗口大小。


二十五、TCP 连接管理

TCP 是面向连接的。

在数据交换前,双方要先握手。

25.1 TCP 连接中需要初始化什么?

三次握手要初始化:

  • 双方是否愿意建立连接;
  • 客户端到服务器方向的初始序号;
  • 服务器到客户端方向的初始序号;
  • 接收缓存大小;
  • 连接状态。

连接建立成功后,双方进入 ESTABLISHED 状态。

25.2 为什么两次握手不够?

课件专门讨论了 2-way handshake 的问题。

网络中可能出现:

  • 报文延迟;
  • 报文丢失后重传;
  • 报文乱序;
  • 旧连接请求在网络中滞留。

如果只用两次握手,服务器可能收到一个很久之前的旧连接请求,并误以为客户端要建立新连接。

这会导致半开连接或错误连接状态。

25.3 TCP 三次握手过程

三次握手如下:

text 复制代码
第一次:客户端 -> 服务器:SYN,seq = x
第二次:服务器 -> 客户端:SYNACK,seq = y,ACK = x + 1
第三次:客户端 -> 服务器:ACK,ACK = y + 1

含义:

  • 第一次:客户端告诉服务器,我想建立连接,我的初始序号是 x;
  • 第二次:服务器告诉客户端,我同意建立连接,我的初始序号是 y,并确认你的 x;
  • 第三次:客户端确认服务器的 y,连接正式建立。

三次握手的核心是:

双方都确认了对方的发送能力和接收能力,并同步了初始序号。

25.4 TCP 连接释放

TCP 是全双工的。

也就是说,两个方向的数据流是相互独立的。

因此关闭连接时,双方各自关闭自己的发送方向。

基本过程:

text 复制代码
一方发送 FIN
对方回复 ACK
对方也准备关闭时发送 FIN
原发送方回复 ACK

所以常说 TCP 是四次挥手。

但课件也指出,ACK 可以和自己的 FIN 合并,因此某些情况下看起来像三次交互。

25.5 半开连接

如果连接释放过程中的断开请求 DR 或 FIN 丢失,就可能出现半开连接。

半开连接指的是:

一方认为连接已经关闭,另一方仍认为连接存在。

TCP 通过状态机、重传、超时和最终清理机制处理这些异常情况。


二十六、拥塞控制基本原理

26.1 什么是拥塞?

拥塞可以理解为:

太多发送方以太快的速度向网络注入太多数据,超过了网络处理能力。

表现为:

  • 路由器队列变长;
  • 排队时延增加;
  • 缓存溢出;
  • packet 丢失;
  • 重传增加;
  • 吞吐下降。

26.2 拥塞控制和流量控制的区别

再次强调:

对比项 流量控制 拥塞控制
关注对象 接收方 网络内部
问题原因 接收方应用读太慢或缓存小 路由器、链路负载过高
控制依据 rwnd cwnd、丢包、延迟、ECN 等
目的 防止接收缓存溢出 防止网络崩溃,提高整体吞吐

课件用两个图对比:

  • 快网络喂给低容量接收方:这是流量控制问题;
  • 慢网络喂给高容量接收方:这是拥塞控制问题。

二十七、拥塞的代价

课件通过三个场景说明拥塞的成本。

27.1 场景一:一个路由器、无限缓存、无重传

两个发送方共享一条容量为 R 的链路。

最大每连接吞吐大约是 R/2。

随着输入速率接近 R/2:

  • 吞吐接近极限;
  • 队列长度急剧增加;
  • 排队时延变得非常大。

即使不丢包,也会出现巨大延迟。

27.2 场景二:一个路由器、有限缓存、需要重传

现实中路由器缓存有限。

当缓存满时,packet 会被丢弃。

丢包后发送方需要重传。

拥塞代价包括:

  • 发送方做了更多工作;
  • 链路传输了重传副本;
  • 一些重传可能其实不必要;
  • 有效吞吐下降。

如果发送方超时过早,原 packet 和重传 packet 都可能到达接收方,链路白白传输了重复数据。

27.3 场景三:多跳网络中的拥塞

多跳路径中,如果 packet 在后面的路由器被丢弃,那么它之前已经占用过的上游链路带宽、缓存资源都被浪费了。

这说明拥塞的代价不仅是"丢了一个包",还包括:

为了传输这个最终被丢弃的包,前面所有链路和路由器做过的工作都浪费了。


二十八、拥塞控制的两类方法

28.1 端到端拥塞控制

端到端拥塞控制没有来自网络的显式反馈。

发送方只能通过观察:

  • 丢包;
  • ACK;
  • RTT 增大;
  • 吞吐变化;

来推断网络是否拥塞。

TCP 经典拥塞控制主要采用这种方法。

28.2 网络辅助拥塞控制

网络辅助拥塞控制中,路由器会给发送方或接收方反馈拥塞信息。

例如:

  • ATM;
  • DECbit;
  • TCP ECN。

ECN 中,路由器可以在 IP 头部标记拥塞,接收方再通过 TCP ACK 告诉发送方。


二十九、TCP 拥塞控制:cwnd 和 AIMD

29.1 拥塞窗口 cwnd

TCP 使用拥塞窗口 cwnd 控制发送速率。

最终发送窗口是:

text 复制代码
发送窗口 = min(cwnd, rwnd)

其中:

  • rwnd 来自接收方,用于流量控制;
  • cwnd 由发送方根据网络拥塞情况维护,用于拥塞控制。

29.2 AIMD 思想

TCP 经典拥塞控制采用 AIMD:

text 复制代码
Additive Increase, Multiplicative Decrease
加性增,乘性减

含义是:

  • 没发现拥塞时,逐步增加发送速率;
  • 发现拥塞时,大幅降低发送速率。

它的行为像锯齿:

text 复制代码
慢慢升高 -> 丢包 -> 快速下降 -> 再慢慢升高

29.3 为什么用 AIMD?

AIMD 是分布式、异步的。

每个 TCP 连接只根据自己的 ACK、丢包、RTT 等信息调整,不需要中央控制。

课件提到,AIMD 具有较好的稳定性,并有助于网络范围内的拥塞流速率优化。


三十、TCP 慢启动和拥塞避免

30.1 慢启动 Slow Start

慢启动名字容易误解。

它不是增长慢,而是从很小的初始窗口开始。

连接刚开始时:

text 复制代码
cwnd = 1 MSS

每收到一个 ACK,cwnd 增加。

大约每经过一个 RTT,cwnd 翻倍:

text 复制代码
1 MSS -> 2 MSS -> 4 MSS -> 8 MSS -> 16 MSS

所以慢启动实际上是指数增长。

30.2 什么时候从慢启动转为拥塞避免?

不能一直指数增长,否则会迅速造成拥塞。

TCP 使用阈值 ssthresh

当:

text 复制代码
cwnd < ssthresh

处于慢启动,指数增长。

当:

text 复制代码
cwnd >= ssthresh

进入拥塞避免,线性增长。

30.3 ssthresh 如何设置?

发生丢包事件时:

text 复制代码
ssthresh = 丢包前 cwnd 的一半

这体现了乘性减小。

30.4 拥塞避免 Congestion Avoidance

进入拥塞避免后,cwnd 不再指数增长,而是线性增长。

课件中文总结为:

达到阈值之后,拥塞窗口按照 AI 递增,每轮发送成功之后增加一个 MSS。


三十一、TCP Tahoe 和 TCP Reno

31.1 丢包信号的两种形式

TCP 认为丢包通常意味着拥塞。

丢包可以通过两种方式发现:

  1. 超时 timeout
  2. 收到 3 个重复 ACK

它们都表示可能丢包,但严重程度不同。

31.2 Timeout 更严重

超时说明发送方很久没收到 ACK。

这通常表示网络交付能力很差,拥塞程度更严重。

因此处理更激进。

31.3 3 个重复 ACK 较温和

收到 3 个重复 ACK 说明:

  • 某个 packet 可能丢了;
  • 但后面的 packet 还能到达接收方;
  • 网络仍有一定传输能力。

因此处理可以温和一些。

31.4 TCP Tahoe

TCP Tahoe 的策略较保守。

当检测到丢包,尤其是 timeout 时:

text 复制代码
cwnd 降为 1 MSS
ssthresh 设为丢包前 cwnd 的一半
重新慢启动

31.5 TCP Reno

TCP Reno 对 3 个重复 ACK 使用快速重传和快速恢复。

当收到 3 个重复 ACK:

text 复制代码
ssthresh = 当前 cwnd 的一半
cwnd = ssthresh
进入拥塞避免或快速恢复

相比 timeout 后直接降到 1 MSS,Reno 更温和。


三十二、TCP 拥塞控制例子与总结

TCP 拥塞控制可以按以下规则记忆:

  1. 初始:cwnd = 1 MSS
  2. 慢启动阶段:每 RTT 近似翻倍;
  3. 到达 ssthresh:进入拥塞避免;
  4. 拥塞避免阶段:每 RTT 线性增加约 1 MSS;
  5. timeout:ssthresh = cwnd/2cwnd = 1 MSS
  6. 3 duplicate ACK:快速重传,ssthresh = cwnd/2cwnd 从减半后继续增长。

课件最后把 TCP 重点总结为:

  • TCP 提供面向连接的字节流服务;
  • 动态滑动窗口和自动重传实现可靠传输;
  • RTO 基于 RTT 的 EWMA 估计;
  • 三次握手建立连接;
  • 四步释放或三次握手关闭连接;
  • 动态拥塞窗口实现拥塞控制;
  • 慢启动从 1 MSS 开始;
  • 达到阈值后进入 AI 线性增长;
  • timeout 后 cwnd 降为 1;
  • 3 个重复 ACK 后快速重传,从当前窗口一半开始新的 AI;
  • 最终发送窗口是 min(cwnd, rwnd)

三十三、TCP CUBIC

经典 AIMD 在高速长距离网络中可能不够高效。

TCP CUBIC 试图更好地探测可用带宽。

33.1 CUBIC 的直觉

Wmax 是上一次发生拥塞丢包时的窗口大小。

CUBIC 认为:

上一次在 Wmax 附近丢包,说明瓶颈链路在这个范围附近可能接近拥塞。

所以在丢包后,窗口先减小,然后:

  • 离 Wmax 远时增长快;
  • 接近 Wmax 时增长慢,更谨慎;
  • 超过 Wmax 后再继续探测。

33.2 CUBIC 的增长方式

CUBIC 用三次函数根据当前时间距离 K 的远近调整窗口增长。

K 是窗口重新达到 Wmax 的时间点。

离 K 越远,增长幅度越大;

接近 K 时,增长幅度变小。

课件提到 TCP CUBIC 是 Linux 默认 TCP,也是 Web 服务器中很流行的 TCP 版本。


三十四、瓶颈链路与 Delay-based TCP

34.1 瓶颈链路

经典 TCP 和 CUBIC 通常会增加发送速率,直到某个路由器输出端发生丢包。

这个容易拥塞的输出链路就是瓶颈链路。

理解拥塞时,可以重点关注瓶颈链路。

目标应该是:

让端到端管道刚好装满,但不要更满。

34.2 为什么不要更满?

如果刚好装满,链路保持忙碌,吞吐高。

如果更满,多余数据只能堆在队列中,造成排队时延,甚至丢包。

34.3 Delay-based 拥塞控制

Delay-based TCP 不一定等到丢包才反应,而是观察 RTT。

它维护最小 RTT:

text 复制代码
RTTmin

RTTmin 近似表示无拥塞排队时的路径 RTT。

如果当前测得吞吐接近:

text 复制代码
cwnd / RTTmin

说明队列不明显,可以继续线性增加 cwnd。

如果测得吞吐明显低于无拥塞吞吐,说明队列堆积,路径拥塞,应线性减小 cwnd。

34.4 BBR

课件提到 BBR 是一种采用 delay-based 思路的拥塞控制,在 Google 内部骨干网络中部署。

BBR 的目标也是:

最大化吞吐,同时保持低延迟。


三十五、ECN:显式拥塞通知

ECN 是一种网络辅助拥塞控制机制。

普通 TCP 主要通过丢包推断拥塞。

ECN 则允许路由器在不丢包的情况下标记拥塞。

35.1 ECN 工作过程

  1. 路由器发现拥塞趋势;
  2. 在 IP 头部 ToS 字段中的 ECN 位打标记;
  3. 数据包到达接收方;
  4. 接收方在 TCP ACK 中设置 ECE 位;
  5. 发送方收到后降低发送速率。

ECN 同时涉及:

  • IP 头部 ECN 标记;
  • TCP 头部 ECE/CWR 等标志位。

35.2 ECN 的意义

ECN 的意义是:

在真正丢包之前,就把拥塞信号告诉发送方。

这样可以减少丢包和重传。


三十六、TCP 公平性

36.1 公平性目标

如果 K 条 TCP 连接共享同一条瓶颈链路,链路带宽为 R,那么理想情况下每条连接平均获得:

text 复制代码
R / K

这就是 TCP 公平性的目标。

36.2 AIMD 为什么趋向公平?

两个 TCP 连接竞争同一瓶颈链路时:

  • 加性增让两个连接都线性增加吞吐;
  • 乘性减让高吞吐连接下降更多;
  • 多轮之后会逐渐靠近公平分配点。

因此 AIMD 具有一定公平性。

36.3 UDP 公平吗?

UDP 没有内置拥塞控制。

很多多媒体应用使用 UDP,因为它们不希望被 TCP 拥塞控制强制降速。

它们可能以恒定速率发送音视频,并容忍一定丢包。

课件指出,没有所谓 Internet 警察强制所有应用采用拥塞控制。

所以 UDP 流可能对 TCP 流不公平。

36.4 并行 TCP 连接的公平性问题

应用可以同时打开多个 TCP 连接。

例如一条链路已经有 9 条 TCP 连接。

如果新应用只打开 1 条 TCP 连接,它大约获得:

text 复制代码
R / 10

如果新应用打开 11 条 TCP 连接,那么总连接数变成 20,它可能获得:

text 复制代码
11R / 20,接近 R/2

这说明"连接级公平"不等于"应用级公平"。


三十七、传输层功能演化:QUIC

TCP 和 UDP 是 40 多年来 Internet 的两个主要传输层协议。

但现代应用,尤其是 Web,对性能、安全和连接建立速度有更高要求。

于是出现了 QUIC。

37.1 QUIC 是什么?

QUIC 全称:

text 复制代码
Quick UDP Internet Connections

它是一个运行在 UDP 之上的应用层传输协议。

HTTP/3 使用 QUIC。

37.2 为什么 QUIC 基于 UDP?

因为在操作系统和中间设备中部署新的传输层协议很困难。

UDP 已经被广泛支持。

QUIC 选择在 UDP 上实现自己的:

  • 连接建立;
  • 可靠数据传输;
  • 拥塞控制;
  • 安全认证;
  • 加密;
  • 多路流。

37.3 QUIC 的连接建立

传统 HTTPS 通常需要:

text 复制代码
TCP 握手 + TLS 握手

这是两个串行握手过程。

QUIC 把可靠性、拥塞控制、认证、加密等状态建立整合起来,通常可以在 1 RTT 内完成连接建立。

这对网页加载速度很重要。

37.4 QUIC 的 stream 和队头阻塞

HTTP/2 在 TCP 上可以复用多个应用层 stream,但底层仍然是一个 TCP 字节流。

如果 TCP 字节流中某个 segment 丢失,后面的字节即使已经到达,也不能交给上层。

这会导致队头阻塞 HOL blocking。

QUIC 在一个连接中支持多个独立 stream。

某个 stream 出错或丢包,不会阻塞其他 stream 的交付。

所以 QUIC 可以减少应用层的队头阻塞问题。


三十八、本章知识体系总图

可以把第三讲整理成下面这条主线:

text 复制代码
传输层服务
   ↓
进程到进程通信
   ↓
多路复用 / 多路分解
   ↓
UDP:简单、无连接、best effort
   ↓
可靠传输原理 rdt
   ↓
checksum / ACK / 序号 / 超时重传
   ↓
停等协议效率低
   ↓
流水线 / 滑动窗口
   ↓
GBN 与 SR
   ↓
TCP:可靠有序字节流
   ↓
TCP 序号、ACK、RTO、快速重传
   ↓
TCP 流量控制 rwnd
   ↓
TCP 连接管理:三次握手、连接释放
   ↓
拥塞控制:cwnd、AIMD、慢启动、拥塞避免
   ↓
Tahoe / Reno / CUBIC / BBR / ECN / 公平性
   ↓
QUIC:在 UDP 上重构现代传输层能力

三十九、考试高频重点

39.1 必须会解释的概念

  1. 传输层和网络层区别;
  2. 进程到进程通信;
  3. 多路复用和多路分解;
  4. UDP 和 TCP 区别;
  5. UDP checksum;
  6. rdt1.0、rdt2.0、rdt2.1、rdt2.2、rdt3.0;
  7. 停等协议为什么效率低;
  8. 流水线和滑动窗口;
  9. GBN 和 SR 区别;
  10. TCP 字节流;
  11. TCP 序号和 ACK;
  12. RTT、RTO、EWMA;
  13. 快速重传;
  14. 流量控制和拥塞控制区别;
  15. TCP 三次握手;
  16. TCP 连接释放;
  17. 慢启动和拥塞避免;
  18. Tahoe 和 Reno;
  19. CUBIC 和 delay-based TCP;
  20. ECN 和 QUIC。

39.2 必须会做的计算

停等协议利用率
text 复制代码
U = (L/R) / (RTT + L/R)
滑动窗口无差错利用率

设:

text 复制代码
a = tprop / tframe

则:

text 复制代码
若 W >= 2a + 1,U = 1
若 W < 2a + 1,U = W / (2a + 1)
GBN 窗口限制
text 复制代码
Ws <= 2^n - 1
SR 窗口限制
text 复制代码
Ws <= 2^(n-1)
TCP 最终发送窗口
text 复制代码
send window = min(cwnd, rwnd)
EstimatedRTT
text 复制代码
EstimatedRTT = (1 - α) * EstimatedRTT + α * SampleRTT
TimeoutInterval
text 复制代码
TimeoutInterval = EstimatedRTT + 4 * DevRTT

四十、容易混淆的点

40.1 UDP 不可靠,不等于 UDP 没用

UDP 简单、低开销、无连接,适合实时和自定义可靠性的应用。

HTTP/3 使用 UDP,是因为 QUIC 在 UDP 上实现了可靠性,而不是因为 HTTP/3 不需要可靠性。

40.2 TCP 是字节流,不是报文流

TCP 不保留应用层消息边界。

应用写入几次,不代表接收方就读到几次。

40.3 ACK 号不是"我收到了这个字节"

TCP ACK 号表示:

我期待收到的下一个字节。

ACK=100 表示 0 到 99 已经按序收到。

40.4 GBN 和 SR 最大区别不是发送窗口,而是接收窗口

二者发送窗口都大于 1。

关键区别是:

text 复制代码
GBN:接收窗口 = 1,乱序丢弃
SR:接收窗口 > 1,乱序缓存

40.5 流量控制不是拥塞控制

流量控制看接收方缓存。

拥塞控制看网络内部负载。

40.6 慢启动并不慢

慢启动只是初始窗口小。

增长方式是指数增长,实际增长很快。

40.7 timeout 和 3 duplicate ACK 的严重程度不同

timeout 表示网络可能很差,所以窗口降到 1 MSS。

3 duplicate ACK 表示还有后续包到达,所以网络仍有一定传输能力,可以减半后继续。


四十一、小测题与答案

题 1:传输层和网络层的核心区别是什么?

答案:网络层提供主机到主机通信,传输层提供进程到进程通信。传输层依赖网络层,并通过端口号、可靠传输、流控、拥塞控制等机制增强网络层服务。

题 2:UDP 接收端根据什么进行多路分解?

答案:主要根据目的端口号。

题 3:TCP socket 由什么标识?

答案:由四元组标识:源 IP、源端口、目的 IP、目的端口。

题 4:rdt3.0 相比 rdt2.2 新增了什么机制?

答案:rdt3.0 假设信道可能丢包,因此新增定时器和超时重传机制。

题 5:为什么停等协议效率低?

答案:发送方每发送一个 packet 都要等待 ACK,RTT 较大时链路大部分时间空闲,无法填满带宽时延积较大的链路。

题 6:GBN 中接收方如何处理乱序 packet?

答案:通常丢弃乱序 packet,并重复 ACK 当前最高按序收到的 packet。

题 7:SR 为什么要求窗口大小不超过序号空间一半?

答案:因为 SR 接收方会缓存乱序 packet,如果窗口超过序号空间一半,序号回绕后新旧 packet 可能混淆。

题 8:TCP 中 seq number 表示什么?

答案:表示该 TCP segment 数据部分第一个字节在字节流中的编号。

题 9:TCP 中 ACK=500 表示什么?

答案:表示 500 之前的字节已经按序收到,接收方下一个期待字节是 500。

题 10:TCP 最终发送窗口由什么决定?

答案:由拥塞窗口 cwnd 和接收窗口 rwnd 的较小值决定,即 min(cwnd, rwnd)

题 11:慢启动阶段 cwnd 如何增长?

答案:从 1 MSS 开始,每个 RTT 近似翻倍,指数增长。

题 12:QUIC 为什么能减少队头阻塞?

答案:QUIC 在一个连接中支持多个独立 stream,一个 stream 的丢包不会阻塞其他 stream 的数据交付。


四十二、最后总结

第三讲是计算机网络中非常关键的一讲。它把应用层和网络层连接起来,真正解释了"网络数据如何交给正确应用进程"以及"如何在不可靠 IP 之上实现可靠传输"。

整章最重要的逻辑是:

  1. 传输层负责进程到进程通信。
  2. UDP 是简单无连接传输,只做最基础的端口分发和差错检测。
  3. TCP 是复杂可靠传输,在 IP 之上实现可靠、有序、流控和拥塞控制。
  4. rdt 是 TCP 可靠性的理论基础。
  5. 停等协议可靠但效率低,滑动窗口让链路利用率提高。
  6. GBN 和 SR 是两种典型滑动窗口协议。
  7. TCP 通过序号、ACK、RTO、快速重传实现可靠传输。
  8. TCP 通过 rwnd 实现流量控制。
  9. TCP 通过 cwnd、慢启动、拥塞避免、快速恢复实现拥塞控制。
  10. QUIC 则代表传输层功能向 UDP 上层演化的新方向。

如果能把这条线串起来,第三讲就不是一堆零散概念,而是一套完整的体系:

从应用进程发出数据,到传输层封装、复用、可靠传输、流控、拥塞控制,再到现代 QUIC 的演化。

这就是第三讲"传输层"的完整逻辑。

相关推荐
艾莉丝努力练剑1 小时前
【Linux网络】NAT、内网穿透、内网打洞
linux·运维·服务器·网络·计算机网络·udp·php
爱讲故事的2 小时前
计算机网络第一讲:Introduction 复习博客
计算机网络
我是一颗柠檬2 小时前
【计算机网络全面教学】传输层TCP与UDP,三次握手到拥塞控制彻底搞懂Day4(2026年)
tcp/ip·计算机网络·udp
JZZC221 小时前
第1章 计算机网络概论-历史
计算机网络·历史
kidding72321 小时前
高效备忘清单工具类小程序
前端·计算机网络·微信小程序·小程序
梁辰兴1 天前
计算机网络基础:在 P2P 对等方中搜索对象
网络·计算机网络·计算机·p2p·计算机网络基础·梁辰兴
JZZC21 天前
第1章 计算机网络概论-其他
计算机网络
爱讲故事的1 天前
计算机网络第四章复习:网络层 Data Plane 数据平面
网络·计算机网络·平面
梁辰兴1 天前
计算机网络基础:计算机网络面临的安全性威胁
网络·计算机网络·计算机·计算机网络基础·梁辰兴