【计算机网络八股】【欧弟求职】TCP相关
TCP必须能讲清三次握手 / 四次挥手状态流转拥塞控制slow startcongestion avoidancefast retransmit / fast recovery滑动窗口重传机制RTO / dup ackTIME_WAIT 为什么存在高并发下 TIME_WAIT 堆积怎么处理 面试常问“你如果自己实现 TCP状态机怎么设计”“丢包怎么处理”三次握手/四次挥手三次握手tcp是全双工的两端都会发送和接收数据三次握手的本质是双方建立连接前确认彼此“收发能力 初始序列号ISN”都正常。ServerClientServerClientSYN (seq x)SYN ACK (seq y, ack x1)ACK (ack y1)SYN 会占用一个序号四次挥手ServerClientServerClientFIN (seq u)ACK (ack u 1)FIN (seq v)ACK (ack v 1)为什么是“四次” 因为 TCP 是全双工Client 关闭发送 → FINServer 可能还有数据要发 → 先 ACKServer 再关闭 → FIN为什么 ACK 和 FIN 不能合并 因为ACK 表示“我收到了你的关闭请求”FIN 表示“我也要关闭” 两个语义独立除非刚好一起发生TCP 状态机1️⃣ 为什么会有 CLOSE_WAIT 因为对方说“我不发了”FIN但你可能还没发完数据所以先 ACK → 进入 CLOSE_WAIT 等你处理完 → 再发 FIN2️⃣ 为什么 TIME_WAIT 只在主动关闭方 因为最后一个 ACK 是你发的必须保证对方收到3️⃣ TIME_WAIT 2MSL 的意义 两个目的防止对方没收到 ACK → 重传 FIN让旧连接报文在网络中消失tcp 拥塞控制TCP 拥塞控制的目标是避免网络过载congestion在不引发拥塞的前提下尽可能提高吞吐量。 核心变量cwnd拥塞窗口发送窗口send_window min(cwnd, rwnd)cwnd网络能力拥塞控制rwnd接收方能力流量控制TCP 拥塞控制 四个机制慢启动Slow Start拥塞避免Congestion Avoidance快重传Fast Retransmit快恢复Fast Recovery慢启动 不是“慢”而是指数增长规则cwnd 2n每收到一个 ACK → cwnd 1 MSS一个 RTT → cwnd 翻倍示例1 → 2 → 4 → 8 → 16 ...什么时候结束 达到ssthresh慢启动阈值拥塞避免Congestion Avoidance 从“指数增长”变为“线性增长”规则cwndcwnd1cwnd cwnd cwnd \frac{1}{cwnd}cwndcwndcwnd1 本质每个 RTT 增加 1 MSS示例16 → 17 → 18 → 19 ...发生丢包关键分叉TCP 通过“丢包”判断网络拥塞情况1超时RTO 最严重拥塞处理ssthresh cwnd / 2 cwnd 1 → 重新慢启动情况2收到 3 个重复 ACK 轻度拥塞触发Fast RetransmitFast Recovery快重传Fast Retransmit 不等超时直接重传条件3 duplicate ACK说明 后续包到了但某个包丢了快恢复Fast Recovery 不回到 1而是“半降”规则ssthresh cwnd / 2 cwnd ssthresh 然后进入拥塞避免CUBIC 算法https://datatracker.ietf.org/doc/html/rfc8312CUBIC 拥塞窗口增长公式cwnd(t)C⋅(t−K)3Wmax \text{cwnd}(t) C \cdot (t - K)^3 W_{\text{max}}cwnd(t)C⋅(t−K)3Wmax符号含义cwnd(t)拥塞窗口MSS 为单位随时间变化t自上次丢包后的时间秒或 RTT 单位C缩放常数用于控制增长速度K时间偏移量使得窗口曲线在Wmax时“达到顶点”Wmax上一次丢包发生时 cwnd 的最大值
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2496792.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!