考研复习Day 9 | 计网:运输层(下)

张开发
2026/4/13 0:23:31 15 分钟阅读

分享文章

考研复习Day 9 | 计网:运输层(下)
一TCP可靠传输的实现1.1 以字节为单位的滑动窗口核心概念滑动窗口是以字节为单位的每个字节都有序号。发送窗口的结构区域说明发送窗口后沿之前已发送且已收到确认发送窗口内允许发送的序号发送窗口前沿之后不允许发送窗口移动规则指针移动方向触发条件后沿前移不可能后移收到新的确认前沿向前移动也可能不动收到确认或窗口扩大重要发送窗口的大小不能超过接收方传来的报文首部中的窗口字段值。三个指针发送窗口指针含义P1发送窗口的后沿P2允许发送但尚未发送的第一个字节P3发送窗口的前沿外即将进入P2 ~ P3之间的部分称为可用窗口滑动窗口工作示例A 为发送方B 为接收方。开始时A 根据 B 发来的窗口值20和确认号31构建了自己的发送窗口如上图图5-14所示。此时发送窗口内的数据都是允许发送但尚未发送的数据。现在 A 发送了 11 个字节的数据序号 31-41如下图图5-15所示。此时发送窗口内的数据包含已发送但未收到确认P1~P2的数据和允许发送但尚未发送的数据P2~P3两部分。这时发送窗口的状态需要三个指针来描述P1 指向发送窗口的后沿P2 指向允许发送但尚未发送的第一个字节P3 指向发送窗口的前沿外即将进入发送窗口的字节。P2~P3 之间的部分又称可用窗口。然后 B 收到了序号为 3233 的数据但是没有收到序号为 31 的数据因为 B 只对按序收到的数据中的最高序号进行确认所以此时 B 发送给 A 的确认报文段中确认号仍为 31。接下来 B 收到了序号为 31 的数据并把 31~33 的数据交付给应用进程然后删除了这些数据。B 的接收窗口也向前移动了 3 个序号同时给 A 发送确认号为 34 的确认报文。A 收到确认号为 33 的报文后也将发送窗口向前滑动了 3 个序号此时发送窗口大小没变但是可用窗口变大了。接下来 A 继续把可用窗口中的数据发送完后P2 指针向前移动和 P3 重合此时 A 的可用窗口已减小到 0要暂时停止发送等待收到确认。如果 A 超时未收到确认报文就重传这部分数据直到收到 B 的确认报文为止。发送缓存存放准备发送的数据 已发送但未确认的数据已被确认的数据会被删除发送缓存和发送窗口的后沿是重合的注意应用进程向发送缓存写入数据时不能太快否则会填满发送缓存。接收缓存存放按序到达尚未读取的数据 未按序到达的数据接收窗口是接收缓存的一部分未按序到达的数据先临时存放等缺少的字节到达后再交付累积确认TCP要求接收方必须有累积确认功能接收方可以在合适的时候发送确认也可以捎带确认不能过分推迟发送确认避免不必要的重传全双工通信每一方都有自己的发送窗口和接收窗口。1.2 超时重传时间的选择难点重传时间不能设为固定值网络环境差异大。自适应算法参数含义计算方式RTT往返时间实际测量值RTTs加权平均RTT新RTTs (1-α)×旧RTTs α×新RTTα建议0.125RTTdRTT偏差加权平均新RTTd (1-β)×旧RTTd β×|RTTs - 新RTT|β建议0.25RTO超时重传时间RTO RTTs 4×RTTd重传时的特殊处理报文段每重传一次就把RTO增加一倍避免雪崩不再重传时恢复使用上述公式。1.3 选择确认SACK问题当报文未按序到达到达的字节不连续发送方需要重传确认号之后的所有报文但有些报文实际上已经到了全部重传浪费资源。解决方案SACKSelective ACK在首部选项中添加SACK字段使用两个字节块分别指明一个连续字段的开始位置和长度最多可以指出4个连续字节块的边界现状SACK应用不多了解即可。二TCP的流量控制2.1 利用滑动窗口实现流量控制目的让发送方的发送速率不要太快让接收方来得及接收。实现方式接收方把接收窗口大小放到报文的窗口字段中发送方的发送窗口不能超过这个数值死锁问题场景问题接收窗口减到0发送方停止发送接收窗口恢复但通知报文丢失双方互相等待 →死锁解决方案持续计时器收到零窗口通知后启动持续计时器计时器到期后发送零窗口探测报文段对方在确认报文中给出当前窗口值2.2 TCP的传输效率Nagle算法广泛使用规则说明1先发送到达缓存的第一个字节2收到确认后再发送缓存中剩余数据3当缓存数据达到窗口一半或MSS时立即发送目的避免发送方发送很小的报文段减少网络开销。三TCP的拥塞控制3.1 拥塞控制的一般原理拥塞对网络中某一资源的需求 该资源的可用部分。拥塞的恶性循环网络拥塞 → 报文延迟/丢失 → 超时重传 → 更多分组进入网络 → 拥塞加剧拥塞控制 vs 流量控制对比项拥塞控制流量控制范围全局性涉及所有主机、路由器端到端接收端抑制发送端目标防止网络过载防止接收方来不及接收判断拥塞的依据出现超时。3.2 TCP的拥塞控制方法四种算法慢开始、拥塞避免、快重传、快恢复核心机制发送方维持拥塞窗口cwnd发送窗口 min(cwnd, rwnd)控制原则网络状态操作没有拥塞增大cwnd出现拥塞减小cwnd3.3 四种算法详解慢开始初始cwnd很小≤2-4个MSS每收到一个确认cwnd加倍指数增长每经过一个传输轮次cwnd翻倍拥塞避免cwnd缓慢增大线性增长而非指数当cwnd 阈值时使用拥塞避免当cwnd 阈值时使用慢开始拥塞发生时阈值 cwnd/2cwwd 1重新慢开始快重传要求接收方收到报文段后立即发送确认不延迟工作过程收到失序报文 → 立即重复确认确认号不变发送方连续收到3个重复确认→ 立即重传不等超时目的避免超时防止误判为网络拥塞。快恢复情况阈值操作cwnd操作一般超时减半置为1慢开始快重传3个重复确认减半置为减半后的阈值快恢复拥塞控制流程图3.4 主动队列管理AQM位置网络层路由器传统方式队列满后新到达的分组直接丢弃尾部丢弃AQM方式队列长度还未满时就丢弃后面的分组目的减少网络拥塞的发生。具体丢弃策略尚未标准化。四TCP的运输连接管理4.1 TCP的连接建立三次握手三报文握手流程状态说明状态含义SYN-SENT同步已发送SYN-RCVD同步已收到ESTABLISHED已连接重要规定SYN1的报文段不能携带数据但消耗一个序号ACK1的报文段如果不携带数据不消耗序号第二个报文SYNACK可以拆成两个报文四报文握手为什么需要三次握手解决已失效的连接请求报文突然又到达服务器的问题防止服务器白白等待建立错误连接。4.2 TCP的连接释放四次挥手四次挥手流程状态详解状态所在方含义FIN-WAIT-1客户端发送FIN后CLOSE-WAIT服务器收到FIN等待关闭FIN-WAIT-2客户端收到ACK等待服务器FINLAST-ACK服务器发送FIN等待最后ACKTIME-WAIT客户端发送最后ACK等待2MSLCLOSED双方连接完全关闭重要规定FIN报文即使不携带数据也要消耗一个序号服务器收到FIN后如果还有数据要发送可以继续发送TIME-WAIT状态的意义等待2MSL作用说明1保证最后的ACK能到达服务器如果丢失服务器会重传FIN2防止本连接产生的已失效报文遗留到下一个连接中MSL最长报文段寿命RFC建议2分钟实际≤2分钟2MSL通常≤4分钟保活计时器参数值计时时长2小时探测间隔75秒最大探测次数10次如果连续10次探测无响应服务器认为客户端故障关闭连接。4.3 TCP的有限状态机虚线表示服务器进程的状态变迁实线表示客户进程的状态变迁。关键状态转换CLOSED → LISTEN服务器被动打开LISTEN → SYN-RCVD收到SYNSYN-SENT → ESTABLISHED收到SYNACKESTABLISHED → FIN-WAIT-1主动关闭ESTABLISHED → CLOSE-WAIT被动关闭五思考1. 滑动窗口 ≈ 流水线生产不用等上一个产品完成再开始下一个连续生产每完成一个就往后推一步。这是提高效率的通用思想。2. 拥塞控制 ≈ 高速公路的流量管控车少时提速慢开始→拥塞避免车多时限流阈值减半严重拥堵时封路重开cwnd1。3. 三次握手 ≈ 打电话的“确认机制”“喂能听到吗”“能听到你能听到我吗”“能听到开始说。”——确保双向通信正常。4. 四次挥手 ≈ 分手的“双方确认”“我要挂了。”“好的你稍等我还有点事要说。”“我说完了挂了吧。”“好的拜拜。”——确保双方都说完再断开。六今日小结今天学习了TCP最核心的内容主题核心内容可靠传输滑动窗口、超时重传、SACK流量控制接收窗口、持续计时器、Nagle算法拥塞控制慢开始、拥塞避免、快重传、快恢复连接管理三次握手、四次挥手、TIME-WAIT注以上内容参考计算机网络第8版谢希仁 编著。其中有一些个人理解仅供参考。如有错误希望各位大佬指正感谢七明日计划应用层上

更多文章