lesson43-44深入理解 TCP 可靠传输与流量控制:从机制到实战
Lesson 43 TCP 可靠传输机制★★★★★⭐⭐⭐⭐⭐⭐⭐全书最重点考试重要程度第一部分什么叫可靠传输举个例子。假设老师发成绩。应该收到A B C D E结果你收到A B D E少了C。这是不是不可靠。TCP绝不允许。TCP 要保证A B C D E一个字节都不能少。第二部分TCP 为什么可靠TCP 靠下面几个机制TCP可靠传输 │ ├── 序号Sequence Number ├── 确认应答ACK ├── 超时重传 ├── 累计确认 └── 校验了解今天重点学前四个。第三部分序号Sequence Number★★★★★这是最重要的概念。TCP发送数据时。不是直接发送ABCDE而是给每一段数据编号。例如1A 2B 3C 4D 5E这就是序号Sequence Number简称 Seq。作用标识数据的位置保证按顺序接收。⭐⭐⭐⭐⭐第四部分确认应答 ACK★★★★★TCP每收到一段数据。都会回复ACK意思我收到了。例如发送Seq1接收方回复ACK2很多同学第一次看到为什么收到 1。却回复2原因ACK 表示“我下一步希望收到的序号。”例如收到1说明1 已经收到。下一步希望收到2。所以回复ACK2⭐⭐⭐⭐⭐这是考试最喜欢考的地方。第五部分举一个完整例子★★★★★发送方发送Seq1接收方收到。回复ACK2然后发送方继续Seq2接收方回复ACK3整个过程发送方 接收方 Seq1 ------------------ ------------- ACK2 Seq2 ------------------ ------------- ACK3是不是每收到一个。ACK 都向后移动一位。第六部分如果数据丢了怎么办★★★★★假设发送1 2 3 4结果2丢了。接收方收到1 3 4TCP不会认为没关系。它会发现2 没来。于是一直回复ACK2意思我一直在等 2。发送方发现一直都是ACK2。说明2没有成功到达。于是重新发送Seq2这就是重传。第七部分超时重传★★★★★另一种情况。发送Seq5结果ACK一直没有回来。怎么办TCP不会无限等待。它会等待一段时间。如果超时。自动重新发送。这就是超时重传Timeout Retransmission一句口诀等不到 ACK就重传。⭐⭐⭐⭐⭐第八部分累计确认★★★★★这是考试非常喜欢考的。例如发送1 2 3 4 5接收方全部收到。不一定回复ACK2 ACK3 ACK4 ACK5 ACK6TCP可以直接回复ACK6什么意思表示1 2 3 4 5我全部收到了。下一步请发6。这就是累计确认。⭐⭐⭐⭐⭐考试特别喜欢。第九部分为什么 TCP 不会乱序因为有Seq。例如收到1 3 2TCP知道正确顺序应该1 2 3于是重新排列。交给应用程序。所以用户看到永远正确。第十部分TCP 为什么不会重复假设网络重发Seq2接收方发现2已经收到。直接丢弃。不会交给应用程序。因为Seq唯一。第十一部分本课总结★★★★★TCP可靠传输 │ ├── Seq │ 数据编号 │ ├── ACK │ 确认收到 │ ├── 超时重传 │ ACK不到→重传 │ ├── 累计确认 │ ACK一次确认多个 │ └── 保证顺序第十二部分可靠传输完整流程★★★★★发送Seq1 ↓ 收到ACK2 ↓ 发送Seq2 ↓ ACK丢失 ↓ 等待超时 ↓ 重新发送 ↓ 收到ACK ↓ 继续发送这就是TCP可靠性的核心。Lesson 44 流量控制与拥塞控制★★★★★⭐⭐⭐⭐⭐TCP 收官之战考试重要程度第一部分为什么需要流量控制先举个例子。假设你发送方一分钟能说1000 个字。你的朋友接收方一分钟只能记200 个字。如果你一直不停地说会发生什么答案朋友记不过来会漏掉内容。网络中也是一样。发送方发送得太快接收方来不及处理就会导致缓存溢出、丢包。所以需要流量控制Flow Control一句话流量控制是为了防止发送方发送过快使接收方来得及接收。⭐⭐⭐⭐⭐第二部分TCP 如何实现流量控制答案滑动窗口Sliding Window你在第三章其实已经学过滑动窗口。现在我们来看 TCP 是怎么使用它的。假设接收方告诉发送方我的接收窗口 4意思就是你一次最多只能连续发送 4 个数据。例如发送方 ①②③④发送完以后。必须等待ACK收到确认。窗口向前滑动。继续发送⑤⑥⑦⑧这就是滑动窗口。第三部分什么叫窗口★★★★★窗口可以理解成一次允许发送的数据数量。例如窗口大小4表示可以连续发送 1 2 3 4收到确认后窗口滑动5 6 7 8图示初始窗口 [1][2][3][4] 5 6 7 8 ↓ 收到 ACK ↓ 1 2 3 4 [5][6][7][8]⭐⭐⭐⭐⭐第四部分窗口为什么可以提高速度假设没有窗口。发送方式发送1 ↓ 等ACK ↓ 发送2 ↓ 等ACK ↓ 发送3效率非常低。有窗口以后发送1 发送2 发送3 发送4 ↓ 一起等 ACK是不是快得多所以滑动窗口既能控制速度又能提高效率。第五部分什么是拥塞现在来看另一个问题。假设接收方很快。但是网络中间堵车了。例如电脑A ↓ 路由器①正常 ↓ 路由器②堵了 ↓ 服务器即使服务器处理能力很强。中间网络堵了。数据还是会丢失。这就是网络拥塞Congestion第六部分拥塞控制★★★★★一句话拥塞控制是为了防止整个网络过载。注意这里控制的对象不是接收方。而是整个网络。⭐⭐⭐⭐⭐第七部分流量控制 VS 拥塞控制★★★★★这是考试最喜欢出的比较题。流量控制拥塞控制保护接收方保护整个网络防止接收方来不及处理防止网络堵塞根据接收窗口调整发送速度根据网络状况调整发送速度⭐⭐⭐⭐⭐一句话区分流量控制怕接收方忙不过来。拥塞控制怕网络堵车。这是考试必背第八部分慢开始了解教材通常要求了解。TCP 建立连接后。并不会一开始就发送很多数据。而是先发送一点。例如1 个如果没有问题。再增加2 个 ↓ 4 个 ↓ 8 个逐渐增加。这叫慢开始Slow Start目的避免刚开始就把网络压垮。第九部分拥塞避免了解如果发送速度越来越快。TCP 会逐渐放慢增长速度。避免网络突然拥塞。这叫拥塞避免Congestion Avoidance考试一般知道名称和作用即可。第十部分TCP 五大可靠机制总结★★★★★到这里。TCP 全部可靠机制已经学完。TCP │ ├── 三次握手 ├── 四次挥手 ├── 确认应答 ├── 超时重传 ├── 序号 ├── 滑动窗口流量控制 └── 拥塞控制⭐⭐⭐⭐⭐这张图建议直接背。第十一部分第五章整体思维导图★★★★★传输层 │ ┌──────────┴──────────┐ │ │ UDP TCP │ │ 无连接、不可靠 面向连接、可靠 │ │ 首部8B 首部≥20B │ ┌──────────────┬──────────────┐ │ │ │ 三次握手 四次挥手 可靠传输 │ ┌─────────────┴─────────────┐ │ │ 流量控制 拥塞控制 滑动窗口 慢开始、拥塞避免第十二部分本课总结★★★★★流量控制 │ ├── 防止接收方处理不过来 ├── 使用滑动窗口 └── 调整发送速度 拥塞控制 │ ├── 防止网络堵塞 ├── 慢开始 └── 拥塞避免