TCP通信-笔记(一)

220 阅读2分钟

这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战

一、建立连接 - 通信前

1. 主要问题

  1. 三次握手:包含通信双方的一问一答的过程;
  2. 作用:初始化连接信息,如确认双方通信的初始序列号,确保后续通信内容有序;
  3. 为什么不“两次握手”:无法避免历史错误连接的初始化,在超时前浪费服务端的资源;
  4. 为什么不“四次握手”:没必要,TCP设计中支持同时发送ACK和SYN(详情见CTL)。

2.报文字段值变化

1. CTL(Control)

  1. CTL = SYN:表示客户端发起请求;
  2. CTL = ACK,SYN:服务端确认并反问;
  3. CTL = ACK:客户端确认;

2. SEQ & ACK

  1. NEW_SEQ = ACK
  2. NEW_ACK = SEQ + 1

二、数据传输 - 通信中

1. 拥塞控制

网络资源有限,服务端处理能力有限。

  1. 作用:防止客户端发送过多,网络拥塞奔溃 或 服务端来不及接收;
  2. 策略:(1)窗口大小 < 慢启动阈值 => 慢启动(2)窗口大小 > 慢启动阈值 => 拥塞避免(3)窗口大小 = 慢启动阈值 => 上述两种的其中一种;
  3. 拥塞避免:(1)每经过 1个 RTT 窗口大小 +1(2)发生丢包时,设置 慢启动阈值 = 窗口小大 / 2(即动态调整“慢启动阈值”);

2. 超时重传

  1. 超时则重传指定数据段;
  2. 重传队列收到 ACK 时才移出对应数据段;
  3. 快速重传:服务端发送重复 ACK 通知客户端,自己 是否/已 无序接收哪些数据段,并期望收到哪些数据段;
  4. 快速恢复:收到重复 ACK 后,客户端会重新传输看起来像是丢失的段,而无需等待计时器超时

三、关闭连接 - 通信结束

1. 四次挥手

确保通信双方不再发送数据给对方;

2. MSL

最大数据段生命周期。若超过此值,则在网络中被认为已被丢弃失效。

3. TIME_WAIT

  1. 实现:等待 2 * MSL 时间。
  2. 作用:(1)防止延迟从服务端来的数据被其他“同名”客户端接收(2)保证远程连接被正确关闭,即等待被关闭的一方收到 FIN_ACK;