面试-网络

TCP协议

握手挥手

TCP重传(原始包或ACK包丢失导致)

  • 超时重传(RTT, RTO)
  • 快速重传(3次同样ACK)
  • 选择重传SACK(TCP optional SACK)
    Kind: 5 (SACK选项类型)
    Length: 可变(取决于报告的块数)
    SACK Blocks: 每个块包含[左边缘, 右边缘]表示已接收的非连续数据范围
  • DSACK(Duplicate SACK)
    告诉发送方有哪些数据被重复接收了。DSACK通过第一个SACK块报告重复接收的数据范围(其他SACK块报告正常的不连续数据),使发送方能明确知道哪些重传是不必要的。

滑动窗口

  • 窗口大小就是指无需等待确认应答,而可以继续发送数据的最大值

流量控制(发送方关心接收方)

  • TCP 提供一种机制可以让「发送方」根据「接收方」的实际接收能力控制发送的数据量,这就是所谓的流量控制。
  • 发送窗口和接收窗口不变,接收方通过ACK来控制发送方发送窗口大小:
  • 发送窗口和接收窗口改变,通告接收窗口大小。发送窗口和接收窗口中所存放的字节数,都是放在操作系统内存缓冲区中的,而操作系统的缓冲区,会被操作系统调整。
  • 为了防止丢包发生,TCP 规定是不允许同时减少缓存又收缩窗口的,而是采用先收缩窗口,过段时间再减少缓存,这样就可以避免了丢包情况。
窗口关闭
  • 接收方向发送方通告窗口大小时,是通过 ACK 报文来通告的。那么,当发生窗口关闭时,接收方处理完数据后,会向发送方通告一个窗口非 0 的 ACK 报文,如果这个通告窗口的 ACK 报文在网络中丢失了,那麻烦就大了。
  • 解决办法:只要 TCP 连接一方收到对方的零窗口通知,就启动持续计时器。之后通过发生窗口探测报文检测。
Nagle算法(发送方,sockopt设置TCP_NODELAY)

使用 Nagle 算法,该算法的思路是延时处理,它满足以下两个条件中的一条才可以发送数据:

  • 要等到窗口大小 >= MSS 或是 数据大小 >= MSS
  • 收到之前发送数据的 ack 回包
Delayed-ACK(接收方,setsockopt设置TCP_QUICKACK)
  • 延迟确认是TCP协议中一项重要的优化机制,它通过减少确认(ACK)数据包的数量来提高网络效率,会增加端到端延迟。

拥塞控制(发送方关心整个网络)

TCP 不能忽略网络上发生的事,它被设计成一个无私的协议,当网络发送拥塞时,TCP 会自我牺牲,降低发送的数据量。于是,就有了拥塞控制,控制的目的就是避免「发送方」的数据填满整个网络。

  • 慢启动
  • 拥塞避免
  • 拥塞发生
    • 发生超时重传
    • 发生快速重传(快速恢复)
  • 拥塞算法
posted @ 2025-03-27 17:18  3yearleft  阅读(13)  评论(0)    收藏  举报