ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

传输层核心机制与计算题突破:TCP/UDP协议期末考点全解析

传输层核心机制与计算题突破:TCP/UDP协议期末考点全解析 1. 传输层到底在整条网络链路里扮演什么角色1.1 从寄快递的类比说起为什么需要传输层很多同学学到第五章的时候会有一种割裂感——前面几章讲物理层、数据链路层、网络层好歹还能摸到网线、网卡、IP地址这些看得见摸得着的东西一到传输层突然全是端口号、确认号、滑动窗口、拥塞控制这些抽象概念感觉像在背天书。我当初学这一章也是这个感觉后来自己画了一张图才想明白传输层其实就是端到端通信的“收发室”。打个比方。你们学校有个巨大的快递集散中心网络层负责的是“把包裹从A城市的集散中心送到B城市的集散中心”它只关心城市到城市这一级。但包裹到了B城市之后呢B城市集散中心里可能有几千个学生每个人的宿舍楼、房间号都不一样。传输层干的事情就是在集散中心内部把包裹精准地送到某一个具体的人手上。这里的“人”就是进程“宿舍楼房间号”就是端口号。IP地址帮你找到哪台主机端口号帮你找到主机上的哪个进程。两个合在一起才构成一个完整的通信终点。所以传输层最核心的两个关键词就是进程到进程的通信和复用与分用。复用是指发送方多个进程可以共用同一个传输层协议往外发数据分用是指接收方传输层要把收到的数据正确交付给对应的进程。这两个词期末考试必考而且经常出简答题。1.2 传输层和网络层的分工边界在哪里这个问题很多同学容易搞混。我总结了一句话网络层负责“主机到主机”传输层负责“进程到进程”。网络层提供的是不可靠的、尽最大努力交付的服务。什么意思呢就是IP协议把数据包扔出去之后就不管了丢不丢、乱不乱序、有没有重复它一概不负责。可靠性这件事网络层压根不承诺。那可靠性谁来保证两种选择要么传输层自己来做要么应用层自己来做。TCP选择了在传输层做UDP选择了不做、交给应用层。这就是TCP和UDP最本质的分野。还有一个容易混淆的点网络层也有复用与分用的概念。IP协议在发送方把多个上层协议的数据封装成IP数据报复用在接收方根据IP首部中的协议字段把数据交给TCP或UDP分用。但传输层的复用与分用粒度更细它是基于端口号的面向的是进程级别。考试里如果问“网络层和传输层复用分用的区别”你就答网络层的复用分用是基于协议类型的传输层的复用分用是基于端口号的粒度不同、面向对象不同。1.3 本章在期末考试中的分值分布规律根据我翻过的多套期末试卷第五章传输层的分值占比通常在**20%到30%**之间属于仅次于网络层的第二大重点章节。题型分布大致是这样的题型常见考点分值占比选择题端口号范围、TCP首部字段含义、UDP特点约30%填空题三次握手流程、拥塞控制算法名称约15%简答题TCP与UDP对比、流量控制与拥塞控制区别约25%计算题滑动窗口效率、拥塞窗口变化、往返时间估算约30%计算题是最容易拉开差距的地方。选择题和简答题大家背一背都能拿分但计算题如果没真正理解滑动窗口和拥塞控制的机制考场上基本就是干瞪眼。所以下面我会花大量篇幅把计算题的套路讲透。2. TCP协议的核心机制拆解2.1 TCP首部字段逐个拆解每个字段都是考点TCP首部固定部分是20字节加上可选项最多60字节。这20个字节里几乎每一个字段都是考点我逐个给你拆。源端口和目的端口各占2字节加起来4字节。这个不用多说就是标识发送方和接收方的进程。**序号Sequence Number**占4字节。这个字段特别容易考。它的含义是本报文段所发送的数据的第一个字节的序号。注意TCP是面向字节流的序号的单位是字节不是报文段。比如上一个报文段发送了100个字节序号从1到100那下一个报文段的序号就是101。这个点选择题特别爱考经常给你一个场景让你算序号。**确认号Acknowledgment Number**占4字节。它的含义是期望收到对方下一个报文段的第一个数据字节的序号。注意“期望”两个字。如果确认号是N说明序号N-1之前的所有数据都收到了。这也是选择题高频考点。数据偏移占4位实际上就是首部长度。单位是4字节所以如果这个字段的值是5首部长度就是20字节。最大值是15对应60字节首部。保留字段占6位目前置零。接下来是六个控制位这是重中之重URG紧急位置1时表示紧急指针字段有效告诉接收方有紧急数据需要优先处理。ACK确认位置1时确认号字段才有效。TCP规定连接建立后所有报文段都必须把ACK置1。PSH推送位置1时接收方尽快交付给应用进程不用等缓存满。RST复位位置1时表示TCP连接出现严重差错必须释放连接再重新建立。SYN同步位置1时表示这是一个连接请求或连接接受报文。三次握手的关键。FIN终止位置1时表示发送方数据已发送完毕要求释放连接。窗口字段占2字节告诉对方“我这边还能接收多少字节的数据”。这个字段直接关联流量控制后面会详细讲。检验和占2字节检验范围包括首部和数据两部分。紧急指针占2字节指出紧急数据的末尾在报文段中的位置。选项字段长度可变最常用的就是MSS最大报文段长度通常在SYN报文段中协商。记忆技巧六个控制位按顺序记成“URG-ACK-PSH-RST-SYN-FIN”谐音“乌阿克普什日斯特辛芬”虽然拗口但多念几遍就记住了。考试时如果记不清顺序就想想三次握手用SYN、四次挥手用FIN、确认用ACK剩下的URG、PSH、RST各出现一次。2.2 三次握手为什么不是两次也不是四次三次握手是传输层最经典的考点没有之一。几乎每套试卷都会涉及要么考流程要么考为什么。先看流程客户端发送SYN1seqx进入SYN-SENT状态。服务端收到后回复SYN1ACK1seqyackx1进入SYN-RCVD状态。客户端收到后发送ACK1seqx1acky1进入ESTABLISHED状态。服务端收到后也进入ESTABLISHED状态。为什么不是两次核心原因防止已失效的连接请求报文段突然又传到服务端导致服务端建立无效连接。设想一个场景客户端发了一个连接请求但这个请求在网络中滞留了很久。客户端等不到响应就放弃了。后来这个滞留的请求终于到了服务端服务端以为是新请求就回复确认并建立连接。如果是两次握手服务端回复确认后就认为连接建立了会一直等客户端发数据。但客户端根本没想建立连接服务端就白白浪费了资源。三次握手的话客户端收到服务端的确认后不会发送第三次确认服务端等不到确认就不会真正建立连接。为什么不是四次因为三次已经够了。服务端的SYN和ACK可以合在一个报文段里发送没必要拆成两次。所以三次是最小值。这里还有一个容易忽略的细节SYN报文段不携带数据但要消耗一个序号。所以第三次握手时客户端的seq是x1ack是y1。这个“消耗一个序号”的点经常在计算题里出现。2.3 四次挥手TIME-WAIT状态为什么必须等2MSL四次挥手的流程客户端发送FIN1sequ进入FIN-WAIT-1状态。服务端收到后回复ACK1seqvacku1进入CLOSE-WAIT状态。客户端收到后进入FIN-WAIT-2状态。服务端数据发完后发送FIN1ACK1seqwacku1进入LAST-ACK状态。客户端收到后回复ACK1sequ1ackw1进入TIME-WAIT状态。等待2MSL后进入CLOSED状态。为什么客户端最后要等2MSL两个原因第一确保最后一个ACK能到达服务端。如果这个ACK丢了服务端会超时重传FIN。客户端在2MSL内还能收到这个重传的FIN然后重新发送ACK。如果客户端直接关闭了服务端就永远收不到确认无法正常关闭。第二让本连接中所有报文段都从网络中消失。经过2MSL后本次连接产生的所有报文段都已经在网络中消失了下一个新连接就不会收到旧连接的残留报文段。MSL是“最长报文段寿命”RFC建议是2分钟但实际实现中通常更短。考试时如果问“为什么等2MSL”把上面两点答上去基本满分。还有一个细节为什么建立连接是三次握手释放连接却是四次挥手因为TCP是全双工的每个方向都需要单独关闭。服务端收到FIN后可能还有数据要发送所以ACK和FIN不能合并必须分开发。而建立连接时服务端的SYN和ACK可以合在一起所以只要三次。2.4 滑动窗口机制流量控制的核心逻辑滑动窗口是TCP最精妙的设计之一也是计算题的重灾区。我用一个具体例子来讲。假设发送方A和接收方B建立了连接。B告诉A“我的接收窗口是400字节。”A就把自己的发送窗口设为400字节。A的发送缓存里有一堆数据等着发序号从1开始。A可以连续发送序号1到400的数据不需要等确认。这就是“滑动窗口”的威力——批量发送流水线作业而不是发一个等一个确认。假设A发了1-100、101-200、201-300三个报文段。B收到了1-100和201-300但101-200丢了。B会发送确认号101表示“我期望收到101后面的都收到了但101没到”。A收到这个确认后知道1-100已经确认窗口可以往前滑100字节。但101-200没确认需要重传。这里涉及一个关键概念累计确认。B不需要对每个报文段单独确认只需要告诉A“我期望的下一个字节是N”就表示N之前的所有字节都收到了。这大大减少了确认报文的数量。窗口滑动的过程可以这样理解发送窗口的左边界由确认号决定右边界由确认号加上接收方通告的窗口值决定。随着确认号不断增大窗口不断向右滑动。还有一个概念叫零窗口。如果B的接收缓存满了它会通告窗口为0。A收到后就不能再发送数据了。但A不能傻等因为如果B的窗口更新报文丢了双方就死锁了。所以TCP设计了持续计时器A收到零窗口通知后启动计时器时间到了就发送一个零窗口探测报文B收到后回复当前的窗口值。如果窗口还是0A重置计时器继续等。计算题常见套路给你发送窗口大小、已发送字节数、已确认字节数让你算还能发多少字节。记住公式还能发送的字节数 发送窗口大小 - (已发送但未确认的字节数)。2.5 拥塞控制四大算法慢开始、拥塞避免、快重传、快恢复拥塞控制和流量控制经常被混淆。一句话区分流量控制是端到端的解决的是接收方处理不过来的问题拥塞控制是全局的解决的是网络中间设备处理不过来的问题。拥塞控制有四个核心算法考试必考。慢开始不要一上来就发大量数据先探测一下网络状况。初始拥塞窗口cwnd1单位是MSS。每收到一个确认cwnd翻倍。所以cwnd的变化是1、2、4、8、16……指数增长。注意“慢开始”不是说增长慢而是说起步慢、探测保守。拥塞避免当cwnd增长到慢开始门限ssthresh时改用拥塞避免算法。每个往返时间RTT只把cwnd加1变成线性增长。比如cwnd16时达到ssthresh之后每个RTT变成17、18、19……快重传接收方收到失序报文段时立即发送重复确认不要等自己发送数据时再捎带确认。发送方连续收到三个重复确认就知道某个报文段丢了立即重传不用等超时计时器到期。快恢复发送方收到三个重复确认后把ssthresh设为当前cwnd的一半然后把cwnd也设为这个值直接进入拥塞避免阶段。而不是像超时那样把cwnd降回1。这里有一个关键区别超时重传时cwnd降回1重新慢开始快重传时cwnd降为ssthresh直接拥塞避免。这个区别几乎每年都考。我用一个完整的例子串一遍假设初始cwnd1ssthresh16。RTT1cwnd1发送1个报文段RTT2cwnd2RTT3cwnd4RTT4cwnd8RTT5cwnd16达到ssthresh改用拥塞避免RTT6cwnd17RTT7cwnd18假设此时发生超时ssthresh设为18/29cwnd降回1重新慢开始cwnd1、2、4、8cwnd8时还没到ssthresh9继续翻倍到16不对慢开始阶段cwnd达到ssthresh时就切换。所以cwnd8时下一个RTT变成16但16已经超过ssthresh9了所以实际上cwnd8之后直接进入拥塞避免变成9、10、11……这个计算过程一定要自己动手画一遍光看是记不住的。3. UDP协议与TCP的对比分析3.1 UDP首部只有8字节精简背后的设计哲学UDP首部只有4个字段每个2字节总共8字节源端口、目的端口、长度、检验和。就这么多没了。对比TCP的20字节固定首部UDP精简到了极致。这种精简不是偷懒而是刻意为之。UDP的设计哲学是只做最基本的剩下的交给应用层。UDP不建立连接所以不需要序号、确认号、窗口这些字段。UDP不保证可靠交付所以不需要重传机制相关的字段。UDP面向报文不面向字节流所以不需要处理粘包问题。检验和字段是UDP唯一的安全网。它检验首部和数据两部分如果检验出错就丢弃不通知发送方。发送方要不要重传UDP不管那是应用层的事。考试常问UDP检验和的计算方法。记住两点一是要加12字节的伪首部源IP、目的IP、零、协议号、UDP长度二是检验和的计算方法和IP首部检验和一样按16位进行二进制反码求和。3.2 TCP和UDP的全面对比一张表说清楚对比维度TCPUDP连接方式面向连接无连接可靠性可靠交付尽最大努力交付数据传输单位字节流报文首部开销20-60字节8字节流量控制有滑动窗口无拥塞控制有无支持广播/多播不支持支持应用场景文件传输、网页、邮件实时音视频、DNS、DHCP这张表建议背下来。简答题如果问“TCP和UDP的区别”把这张表的内容组织成语言答上去就行。但光背表格不够还要理解为什么。比如为什么TCP不支持广播因为TCP是面向连接的广播意味着同时和多个接收方建立连接这在TCP的机制下无法实现。UDP无连接发出去就完事所以天然支持广播和多播。再比如为什么实时音视频用UDP因为实时性要求高丢一两帧画面用户可能察觉不到但如果用TCP丢包后要重传、要等确认延迟反而更大用户体验更差。这就是“可靠性”和“实时性”的权衡。3.3 应用层协议该选谁典型场景分析考试里经常给一个场景让你选TCP还是UDP并说明理由。我整理了几个典型场景文件传输FTP、HTTP下载必须选TCP。文件一个字节都不能少丢了就得重传可靠性优先。网页浏览HTTP选TCP。虽然网页内容丢一点可能也能看但HTTP协议本身建立在TCP之上这是协议栈的设计决定。域名解析DNS通常选UDP。DNS查询报文很短一个UDP包就能装下用TCP的话三次握手的时间开销比查询本身还大。但如果响应报文超过512字节DNS会改用TCP。实时视频会议选UDP。延迟敏感丢几帧无所谓卡顿才是致命的。电子邮件SMTP选TCP。邮件内容必须完整不能丢字。网络管理SNMP选UDP。管理报文通常很短而且网络设备可能资源有限跑不动TCP。答题模板先判断该场景对可靠性和实时性的要求如果可靠性优先选TCP如果实时性优先选UDP然后结合协议特点说明理由。4. 计算题专项突破与考场实战技巧4.1 滑动窗口效率计算从公式到实战滑动窗口的计算题通常长这样给你发送窗口大小、往返时间RTT、报文段长度让你算信道利用率或者最大吞吐量。核心公式信道利用率 发送窗口内可发送的比特数 / (发送一窗数据所需时间 RTT)。更具体一点假设窗口大小为W个报文段每个报文段长度为L比特带宽为B bpsRTT为T秒。发送一窗数据的时间是W×L/B等待确认的时间是T。所以利用率 (W×L/B) / (W×L/B T)。如果W×L/B远大于T利用率接近1如果远小于T利用率就很低。这就是为什么窗口不能太小——窗口太小发送方大部分时间都在等确认带宽浪费严重。还有一种考法给你窗口大小和RTT问需要多大的窗口才能跑满带宽。这就是把上面的公式反解W B×T/L。我见过一道题带宽100MbpsRTT100ms报文段长1000字节问窗口至少多大才能跑满带宽。计算过程B×T 100×10^6 × 0.1 10^7比特 10M比特。每个报文段1000字节8000比特。所以W 10^7 / 8000 1250个报文段。这个数字看起来很大但实际中TCP窗口可以通过窗口缩放选项扩展到很大。4.2 拥塞窗口变化计算画图比死记更靠谱拥塞窗口的计算题我强烈建议在草稿纸上画图。横轴是RTT纵轴是cwnd把每个RTT的cwnd值标出来然后连线。图形一画出来答案就一目了然了。常见的考法给出初始ssthresh和cwnd描述一系列事件正常传输、超时、三个重复确认让你画出cwnd的变化曲线或者问某个时刻的cwnd值。解题步骤确定初始状态cwnd1ssthresh给定值。慢开始阶段每个RTT翻倍直到cwnd≥ssthresh。拥塞避免阶段每个RTT加1。遇到超时ssthreshcwnd/2cwnd1重新慢开始。遇到三个重复确认ssthreshcwnd/2cwndssthresh直接拥塞避免。注意一个细节慢开始阶段如果cwnd翻倍后超过了ssthresh实际cwnd应该取ssthresh的值然后进入拥塞避免。比如cwnd8ssthresh12下一个RTT慢开始翻倍应该是16但1612所以cwnd12然后进入拥塞避免变成13。4.3 三次握手序号计算别在细节上丢分三次握手的序号计算题看起来简单但细节特别多一不小心就丢分。关键点SYN和FIN各消耗一个序号。纯ACK报文段如果不携带数据不消耗序号。数据报文段的序号从第一个数据字节开始算。举个例子客户端初始序号是1000发送SYN。服务端初始序号是2000回复SYNACK。客户端再发送ACK。问第三次握手的seq和ack分别是多少答案seq1001ack2001。因为SYN消耗了一个序号所以客户端的下一个序号是1001服务端的SYN也消耗了一个序号所以客户端期望收到2001。如果客户端在第三次握手时携带了100字节的数据呢那seq还是1001但发送完后下一个报文段的seq变成1101。ack仍然是2001。考场技巧遇到序号计算题先画一个时间轴把每个报文段的seq和ack标上去然后逐个推导。不要心算容易出错。4.4 传输层计算题速查表题型核心公式/方法易错点滑动窗口效率利用率发送时间/(发送时间RTT)单位换算字节vs比特最大吞吐量吞吐量窗口大小/RTT窗口单位是字节还是报文段拥塞窗口变化慢开始翻倍拥塞避免加1超时和快重传的处理不同三次握手序号SYN/FIN消耗序号纯ACK不消耗数据报文段的序号计算UDP检验和伪首部首部数据16位反码求和伪首部的12字节别漏了5. 期末复习策略与常见失分点复盘5.1 高频考点优先级排序根据我分析过的试卷第五章的考点优先级大致如下第一优先级必考三次握手流程及原因、四次挥手流程及TIME-WAIT、TCP与UDP对比、拥塞控制四算法。第二优先级高频TCP首部字段含义、滑动窗口机制、流量控制与拥塞控制的区别、端口号分类。第三优先级偶尔考UDP检验和计算、TCP连接管理状态转换、MSS协商。复习时间有限的话按这个优先级分配精力。第一优先级的内容必须做到能默写、能画图、能解释为什么。第二优先级要能用自己的话复述。第三优先级混个眼熟就行。5.2 简答题答题模板简答题最怕的是“知道意思但写不出来”。我整理了几个高频简答题的答题框架“为什么三次握手而不是两次”先答两次握手的问题已失效连接请求导致资源浪费再答三次握手如何解决客户端不确认则服务端不建立连接最后补充“三次是最小值SYN和ACK可合并所以不需要四次”。“TCP和UDP的区别”按维度答——连接方式、可靠性、传输单位、首部开销、流量控制、拥塞控制、应用场景。每个维度一句话条理清晰。“流量控制和拥塞控制的区别”先分别定义流量控制是端到端、解决接收方处理不过来拥塞控制是全局、解决网络处理不过来再答实现机制滑动窗口vs四算法最后答目标不同防止接收方溢出vs防止网络拥塞。“为什么TIME-WAIT要等2MSL”答两点——确保最后ACK到达、让旧报文段消失。每点展开一两句话。5.3 我踩过的坑和给你的避坑建议第一个坑把序号和确认号搞混。序号是“我发送的数据的第一个字节编号”确认号是“我期望收到对方的下一个字节编号”。这两个方向相反考试时一紧张就容易写反。建议做题时在草稿纸上标明“发送方→接收方”的方向箭头。第二个坑拥塞控制计算时忘记单位。cwnd的单位是MSS不是字节。如果题目给的是字节要先换算成MSS再计算。我见过有人直接把字节数当MSS用结果整道题全错。第三个坑UDP检验和忘记伪首部。UDP检验和的计算范围包括伪首部12字节UDP首部8字节数据。伪首部包括源IP、目的IP、零、协议号、UDP长度。很多人只算首部和数据漏了伪首部结果检验和算错。第四个坑四次挥手时ACK和FIN的顺序。服务端收到FIN后先发ACK等自己数据发完再发FIN。这两个不能合并因为中间可能还有数据要传。考试时如果画图记得中间要留出数据传输的阶段。第五个坑死记硬背不理解。传输层这章如果只背不理解的遇到变形题就懵了。比如题目把三次握手改成“两次握手一次确认”问你行不行或者把拥塞控制的初始条件改一下问你cwnd怎么变。只有真正理解了机制才能灵活应对。最后分享一个复习方法找一张白纸合上书把三次握手、四次挥手、拥塞控制的变化图默画一遍。画不出来的地方就是你的薄弱点翻书重点看。画完再对照课本检查反复两三次这章的计算题和简答题基本就稳了。5.4 考场时间分配建议传输层的内容在试卷中通常分布在选择题、填空题、简答题和计算题中。建议的时间分配选择题中的传输层题目每题不超过1分钟总共控制在5分钟内。填空题每题30秒总共2分钟。简答题每题5-8分钟写要点即可不用长篇大论。计算题每题10-15分钟先写公式再代入数据步骤分很重要。如果计算题卡住了先把公式写上去能拿步骤分。不要在一道题上死磕超过15分钟后面的题可能更简单。我在实际考试和辅导别人的过程中发现传输层这章最大的特点就是“入门难但一旦理解就一通百通”。刚开始学的时候觉得概念多、机制复杂但当你把三次握手、滑动窗口、拥塞控制这三条主线串起来之后会发现它们背后是同一套设计哲学在不可靠的网络上构建可靠通信同时兼顾效率和公平。理解了这个哲学很多细节就不用死记了顺着逻辑就能推出来。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表