计网运输层基本概念
运输层是五层协议中承上启下的关键层。它向应用层屏蔽了网络层的不可靠性提供端到端的通信服务。端口号端口范围类型说明0~1023熟知端口系统保留如 HTTP80, HTTPS443, DNS531024~49151登记端口非系统但需要注册49152~65535动态端口客户端临时使用常见熟知端口协议端口号传输层协议HTTP80TCPHTTPS443TCPFTP 控制21TCPFTP 数据20TCPSSH22TCPTelnet23TCPSMTP25TCPDNS53TCP/UDPDHCP 服务器67UDPDHCP 客户端68UDPPOP3110TCP2.TCP 特性连接方式面向连接通信前建立连接通信结束释放连接传输可靠性可靠传输依靠确认应答、超时重传保证数据不丢失、不出错传输顺序保证数据按发送顺序有序到达首部开销首部 20~60 字节开销较大传输速度流程复杂传输速度较慢流量控制具备滑动窗口流量控制机制拥塞控制拥有慢启动、拥塞避免等完整拥塞控制算法通信方式仅支持一对一全双工通信适用场景文件传输、网页浏览、邮件等对数据完整性要求高的业务3.UDP 特性连接方式无连接无需建立和释放连接直接发送报文传输可靠性不可靠传输仅简单校验丢包出错不会重传传输顺序无法保证数据有序到达报文易乱序首部开销首部固定 8 字节结构简单开销极小传输速度无复杂控制逻辑延迟低、传输速度快流量控制无流量控制机制拥塞控制无拥塞控制网络拥堵仍持续发包通信方式支持一对一、一对多、多对多可单播、广播、组播适用场景视频通话、直播、DNS 解析、网络游戏等低延迟优先场景4.二者对比对比维度TCPUDP连接方式面向连接无连接可靠性可靠传输确认、重传不可靠尽最大努力传输顺序保证按序到达不保证首部开销20~60 字节固定 8 字节传输速度较慢快流量控制有滑动窗口无拥塞控制有慢启动、拥塞避免等无适用场景文件传输、Web、邮件视频通话、直播、DNS、游戏通信方式一对一全双工一对一、一对多、多对多5.UDPUDP 首部格式8 字节源端口号2字节目的端口号2字节长度2字节校验和2字节UDP 核心特性1UDP 为什么快UDP 之所以比 TCP 快原因有三无连接不需要三次握手直接发送数据无状态不需要维护连接状态序号、确认号、窗口等首部小仅 8 字节TCP 至少 20 字节2UDP 的校验和重点UDP 的校验和覆盖范围比 TCP 更大包括UDP 伪首部12 字节来自 IP 层的信息源 IP、目的 IP、协议号、UDP 长度UDP 首部8 字节UDP 数据3UDP 的典型应用场景场景为什么用 UDPDNS 查询数据量小要求快速响应丢包重发即可视频直播实时性 可靠性丢几帧不影响观看VoIP 通话延迟比丢包更重要丢一句话比等 2 秒好在线游戏实时操作不能等 TCP 重传DHCP客户端还没有 IP 地址无法建立 TCP 连接RIP 路由协议周期性广播路由表丢一次下次再发TCP 伪首部 vs UDP 伪首部伪首部不是真正的 TCP/UDP 首部只是为了计算校验和而临时构造的源 IP 地址4字节目的 IP 地址4字节保留1字节协议1字节运输层长度2字节作用让运输层也能校验 IP 地址有没有出错。如果 IP 层把数据发错了目的地运输层通过校验和能发现这个错误。6.TCPTCP 首部格式20 字节固定 可变选项┌──────────┬──────────┬──────────────────────┐ │ 源端口号 │目的端口号 │ 序号 │ │ 2字节 │ 2字节 │ 4字节 │ ├──────────┼──────────┼──────────────────────┤ │ 确认号 │ 首部长度│保留│ 标志位 │ │ 4字节 │ 4位 │6位 │ 6位 │ ├──────────┼──────────┼──────────────────────┤ │ 窗口大小 │ 校验和 │ 紧急指针 │ │ 2字节 │ 2字节 │ 2字节 │ └──────────┴──────────┴──────────────────────┘TCP 六个标志位必考标志位全称含义SYNSynchronize同步序号建立连接ACKAcknowledgment确认字段有效FINFinish释放连接RSTReset重置连接URGUrgent紧急指针有效PSHPush催促接收方立即交付TCP 三次握手建立连接CLOSED → LISTEN →SYN-SENT → SYN-RCVD → ESTABLISHED三次握手确保了双方都有发送和接收能力。进一步理解防止已失效的连接请求报文段突然传到服务器导致服务器误以为要建立连接而白白等待。如果只有两次握手服务器收到一个过期的 SYN 就会直接建立连接浪费资源。第一次握手 客户端“我准备好了”第二次握手 服务器”收到我也准备好了“第三次握手 客户端”ok“本质是 第一次确认客户端发送功能 第二次确认服务器端发送接收功能 第三次确认客户端接收功能TCP 四次挥手释放连接四次挥手过程ESTABLISHED → FIN-WAIT-1 → FIN-WAIT-2 → TIME-WAIT → CLOSED 的转换过程。第一次挥手客户端”关了“第二次挥手服务器”你刚才发的都接收完了 可以关了“第三次挥手客户端”我这边也没事了关了吧“第四次挥手服务器”好的确认关闭“TIME-WAIT 状态与 2MSL 等待客户端在发送最后一个 ACK 后需要等待2MSL两倍最长报文段寿命才能完全关闭。为什么要等 2MSL确保最后一个 ACK 能到达服务器如果丢了服务器会重传 FIN让本连接中所有旧报文段在网络中消失避免影响下一个新连接TIME-WAIT 状态只出现在主动关闭方通常是客户端。TCP 可靠传输机制TCP 通过以下机制保证可靠传输序号Sequence Number与确认AcknowledgmentTCP 给每个字节编号不是按报文段编号确认号 期望收到的下一个字节的序号累积确认ACKn 表示 n-1 及之前的所有字节都已收到超时重传发送方每发送一个报文段就启动一个重传计时器。若在超时前未收到确认则重传。自适应超时时间计算RTORTORetransmission Time-Out根据 RTT 动态调整RTTs (1-α) × RTTs α × 新RTT样本 α 通常取 1/8 RTTd (1-β) × RTTd β × |RTTs - 新RTT样本| β 通常取 1/4 RTO RTTs 4 × RTTd快速重传接收方收到失序的报文段时立即发送重复确认Duplicate ACK。发送方收到3 个相同的重复确认后不等超时立即重传丢失的报文段。TCP 流量控制——滑动窗口流量控制的目的防止发送方发送太快把接收方的缓冲区撑爆。滑动窗口机制接收方在 TCP 首部的窗口大小字段告诉发送方我还有多少缓冲区可用。 发送方的发送窗口大小 min(接收方窗口, 拥塞窗口)滑动窗口的移动过程发送窗口[已发送已确认] | [已发送未确认] | [可发送] | [不可发送] ←── 窗口大小 ──→ 收到确认后窗口向右滑动零窗口探测当接收方窗口为 0 时发送方会定期发送零窗口探测报文查询接收方是否腾出了空间。TCP 拥塞控制拥塞控制的目的防止过多的数据注入网络导致网络过载。拥塞控制 vs 流量控制对比维度流量控制拥塞控制关注点接收方能力网络能力控制依据接收方窗口 rwnd拥塞窗口 cwnd本质端到端问题全局性问题TCP 发送窗口 min(rwnd, cwnd)四种拥塞控制算法必须掌握拥塞窗口的变化规律慢启动Slow Startcwnd 初始 1 个 MSS最大报文段 每收到一个确认 → cwnd cwnd 1 实际效果每个 RTTcwnd 翻倍指数增长 cwnd 变化1 → 2 → 4 → 8 → 16 → ...到达慢启动门限 ssthresh 时停止拥塞避免Congestion Avoidancecwnd ≥ ssthresh 时进入拥塞避免阶段 每个 RTTcwnd cwnd 1线性增长 cwnd 变化... → 16 → 17 → 18 → 19 → ...快重传Fast Retransmit收到 3 个重复 ACK → 立即重传不等待超时 ssthresh cwnd / 2 cwnd ssthresh而不是降到 1快恢复Fast Recovery收到 3 个重复 ACK 后 1. ssthresh cwnd / 2 2. cwnd ssthresh 3补偿重复 ACK 的数量 3. 之后每收到一个重复 ACKcwnd 1 4. 收到新数据的 ACK 后cwnd ssthresh进入拥塞避免拥塞窗口变化示例(1) 慢开始阶段区间慢开始特征cwnd 每轮翻倍• n1:1n2:2n3:4n4:8n5:16严格翻倍属于慢开始• n6:cwnd32不再翻倍结束第一轮慢开始• n23:cwnd突变为1超时重传n231、n242、n254、n268再次翻倍第二轮慢开始。结论慢开始n1~5、n23~26(2) 拥塞避免阶段区间拥塞避免特征cwnd每轮1线性增长• n6~n1632、33、34……42每轮1• n17触发快重传cwnd21n17~n2221、22……26依旧每轮1属于快恢复拥塞避免• n23突变为1退出拥塞避免。结论拥塞避免n6~22(3) 判断丢包检测方式① 第12轮之后丢包发生在n16结束n17开始丢包前cwnd42n17的cwnd21 42/2符合3个重复ACK规则ssthresh42/2cwnd直接等于ssthresh不会置1。② 第24轮之后丢包发生在n22结束n23开始丢包前cwnd26n23的cwnd直接置为1是超时重传标志性操作。结论第12轮后三个重复确认第24轮后超时检测(4) 求三轮ssthresh规则只有发生丢包时才更新ssthreshssthresh 丢包前cwnd ÷ 2第1轮第一轮慢开始在n5结束cwnd16n6进入拥塞避免说明初始阈值ssthresh16。第18轮丢包发生在n16丢包前cwnd42更新ssthresh 42/2 21第18轮沿用该阈值。第24轮丢包发生在n22丢包前cwnd26更新ssthresh 26/2 13第24轮阈值为13。答案16、21、135计算第几轮发送第70个报文段规则每一轮能发送的报文数量 当前轮cwnd累计前n轮所有cwnd之和找到总和≥70的轮次。• n1累计1• n2累计3• n3累计7• n4累计15• n5累计31• n6累计63前6轮一共发63个第6轮结束只发到第63个报文• n7累计96第7轮cwnd33发送第64~96号报文70落在 64~96 区间内。结论第七轮发送第70个报文段