本人在“极客时间”上购买了一套“趣谈网络协议”的课程,本文为该课程第11-12讲(第11讲 | TCP协议(上) 第12讲 | TCP协议(下))的课程笔记。
1.TCP 包头格式
TCP 包头格式2.TCP 协议关注点:
- 顺序问题 ,稳重不乱;
- 丢包问题,承诺靠谱;
- 连接维护,有始有终;
- 流量控制,把握分寸;
- 拥塞控制,知进知退。
3.三次握手
- TCP 的连接建立,我们常常称为三次握手。
A:您好,我是 A。
B:您好 A,我是 B。
A:您好 B。 - 我们也常称为“请求 -> 应答 -> 应答之应答”的三个回合。
-
三次握手除了双方建立连接外,主要还是为了沟通一件事情,就是TCP 包的序号的问题。
建立连接状态时序图
4.TCP 四次挥手
-
断开连接,四次挥手
A:B 啊,我不想玩了。
B:哦,你不想玩了啊,我知道了。
B:A 啊,好吧,我也不玩了,拜拜。
A:好的,拜拜。 -
断开连接状态时序图
-
TCP 状态机
-
TCP 包头很复杂,但是主要关注五个问题,顺序问题,丢包问题,连接维护,流量控制,拥塞控制
5.累计确认
-
发送端窗口大小字段的数据结构
-
接收端窗口大小字段的数据结构
6.顺序问题和丢包问题(确认与重发机制)、流量控制、拥塞控制
- 超时重试
自适应重传算法(Adaptive Retransmission Algorithm) - 一个可以快速重传的机制,当接收方收到一个序号大于下一个所期望的报文段时,就检测到了数据流中的一个间格,于是发送三个冗余的 ACK,客户端收到后,就在定时器过期之前,重传丢失的报文段。
- 还有一种方式称为Selective Acknowledgment (SACK)。这种方式需要在 TCP 头里加一个 SACK 的东西,可以将缓存的地图发送给发送方。例如可以发送 ACK6、SACK8、SACK9,有了地图,发送方一下子就能看出来是 7 丢了。
- 流量控制问题
可以当窗口太小的时候,不更新窗口,直到达到一定大小,或者缓冲区一半为空,才更新窗口。 - 拥塞控制是通过拥塞窗口来解决的,相当于往管道里面倒水,快了容易溢出,慢了浪费带宽,要摸着石头过河,找到最优值。
网友评论