MST

星途 面试题库

面试题:网络编程之TCP协议可靠性基础

在TCP协议中,有哪些机制来确保数据传输的可靠性?请简要阐述这些机制的工作原理。
50.2万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试
  1. 校验和(Checksum)
    • 工作原理:发送方在发送数据时,会根据数据内容计算一个校验和,并将其放入TCP首部。接收方收到数据后,会对数据重新计算校验和,并与接收到的校验和进行比较。如果两者相等,说明数据在传输过程中大概率没有出错;如果不相等,则说明数据可能出现了错误,接收方会丢弃该数据段。
  2. 序列号(Sequence Number)
    • 工作原理:TCP给每个发送的字节都分配一个序列号。发送方按顺序发送数据段,每个数据段的首部包含该数据段第一个字节的序列号。接收方根据序列号对收到的数据段进行排序,以确保数据按正确顺序交付给应用层。此外,序列号还用于在重传时标记数据的位置,使得发送方知道重传的是哪些数据。
  3. 确认应答(ACK)
    • 工作原理:接收方在正确收到数据段后,会向发送方发送一个确认应答(ACK)报文。ACK报文中包含已成功接收数据段的序列号,表示接收方期望接收的下一个数据段的序列号。发送方只有收到相应数据段的ACK,才认为该数据段已被成功接收。如果在一定时间内(超时时间)未收到ACK,发送方会重传该数据段。
  4. 超时重传(Retransmission)
    • 工作原理:发送方发送数据段后,启动一个定时器。如果在定时器超时之前没有收到接收方的ACK,发送方会认为数据传输出现问题,将重传该数据段。超时时间通常会动态调整,根据网络状况和往返时间(RTT)的测量来确定,以避免不必要的重传或重传过晚。
  5. 流量控制(Flow Control)
    • 工作原理:接收方通过TCP首部中的窗口字段(Advertised Window)告诉发送方自己的接收缓冲区还有多少可用空间。发送方根据接收方通告的窗口大小来调整自己的发送速率,确保发送的数据量不会超过接收方的处理能力。如果接收方的缓冲区已满,它会将窗口大小通告为0,发送方收到窗口为0的通告后,会暂停发送数据,直到接收方重新通告一个非零的窗口大小。
  6. 拥塞控制(Congestion Control)
    • 工作原理
      • 慢启动(Slow Start):开始时,发送方将拥塞窗口(Congestion Window,cwnd)初始化为一个较小的值(通常为1个最大段长度MSS)。每收到一个ACK,cwnd就增加一个MSS大小。这样,随着ACK的不断到达,cwnd以指数方式增长,快速增加发送速率。
      • 拥塞避免(Congestion Avoidance):当cwnd增长到慢启动门限(ssthresh)时,进入拥塞避免阶段。此时,每收到一个ACK,cwnd只增加1/cwnd个MSS大小,即线性增长。这样可以避免网络拥塞的发生。
      • 快速重传(Fast Retransmit):当发送方连续收到三个相同的ACK时,意味着可能有数据段丢失,但网络还没有拥塞。发送方会立即重传丢失的数据段,而不是等到超时。
      • 快速恢复(Fast Recovery):在快速重传后,进入快速恢复阶段。ssthresh设置为当前cwnd的一半,cwnd设置为ssthresh加上3倍的MSS(因为收到了三个重复ACK)。然后,进入拥塞避免阶段继续线性增长。如果发生超时,则ssthresh设置为当前cwnd的一半,cwnd重新设置为1个MSS,重新进入慢启动阶段。