08-TCP 协议

本人在“极客时间”上购买了一套“趣谈网络协议”的课程,本文为该课程第11-12讲(第11讲 | TCP协议(上) 第12讲 | TCP协议(下))的课程笔记。


1.TCP 包头格式
08-TCP 协议_第1张图片
TCP 包头格式
2.TCP 协议关注点:
  • 顺序问题 ,稳重不乱;
  • 丢包问题,承诺靠谱;
  • 连接维护,有始有终;
  • 流量控制,把握分寸;
  • 拥塞控制,知进知退。
3.三次握手
  • TCP 的连接建立,我们常常称为三次握手。
    A:您好,我是 A。
    B:您好 A,我是 B。
    A:您好 B。
  • 我们也常称为“请求 -> 应答 -> 应答之应答”的三个回合。
  • 三次握手除了双方建立连接外,主要还是为了沟通一件事情,就是TCP 包的序号的问题。


    08-TCP 协议_第2张图片
    建立连接状态时序图
4.TCP 四次挥手
  • 断开连接,四次挥手
    A:B 啊,我不想玩了。
    B:哦,你不想玩了啊,我知道了。
    B:A 啊,好吧,我也不玩了,拜拜。
    A:好的,拜拜。

  • 断开连接状态时序图


    08-TCP 协议_第3张图片
  • TCP 状态机


    08-TCP 协议_第4张图片
  • TCP 包头很复杂,但是主要关注五个问题,顺序问题,丢包问题,连接维护,流量控制,拥塞控制

5.累计确认
  • 发送端窗口大小字段的数据结构


    08-TCP 协议_第5张图片
  • 接收端窗口大小字段的数据结构


    08-TCP 协议_第6张图片
6.顺序问题和丢包问题(确认与重发机制)、流量控制、拥塞控制
  • 超时重试
    自适应重传算法(Adaptive Retransmission Algorithm)
  • 一个可以快速重传的机制,当接收方收到一个序号大于下一个所期望的报文段时,就检测到了数据流中的一个间格,于是发送三个冗余的 ACK,客户端收到后,就在定时器过期之前,重传丢失的报文段。
  • 还有一种方式称为Selective Acknowledgment (SACK)。这种方式需要在 TCP 头里加一个 SACK 的东西,可以将缓存的地图发送给发送方。例如可以发送 ACK6、SACK8、SACK9,有了地图,发送方一下子就能看出来是 7 丢了。
  • 流量控制问题
    可以当窗口太小的时候,不更新窗口,直到达到一定大小,或者缓冲区一半为空,才更新窗口。
  • 拥塞控制是通过拥塞窗口来解决的,相当于往管道里面倒水,快了容易溢出,慢了浪费带宽,要摸着石头过河,找到最优值。

你可能感兴趣的:(08-TCP 协议)