TCP/IP 数据包与端口校招面试题|计算机网络
TCP/IP 数据包与端口校招面试题|计算机网络
本章面向计算机专业学生、应届生和校招求职者,围绕 IP 数据包、路由寻址、TCP 报头、端口复用、错误恢复和流量控制等内容展开。
1. 网络层功能
面试题剖析
本题将分层模型落到网络层的实际工作:逻辑寻址、路由选择和逐跳转发。需要区分学习路由的控制过程与查询转发表发送数据的过程,同时说明 IP 的能力边界。
面试题解答
网络层负责把网络层数据包从源端跨网络送往目标端。IP 提供尽力而为的服务,主要关注地址和转发,不保证到达、顺序、不重复,也不负责应用进程的端口分用。
主要功能
逻辑寻址:用 IP 地址及前缀表示接口或网络位置,支持跨网络访问和路由聚合。
路由选择:通过直连配置、静态路由或动态路由协议形成到不同前缀的路径信息。
分组转发:依据目的地址查询转发表,选择下一跳和出口,在下一段链路上重新封装发送。
差错报告与诊断:利用 ICMP 等提供不可达、超时等反馈,但反馈本身也不保证一定送达。
适应包大小限制:IPv4 在条件允许时可分片;IPv6 路由器不分片,超大包由源端结合路径 MTU 处理。
路由与转发不是同一动作
OSPF、IS-IS 等可在自治系统内部学习拓扑,BGP 在自治系统之间按策略交换可达性。路由器无需为每个业务包重新执行完整路由协议计算,而是依据已有转发表逐包处理。路由暂时收敛期间仍可能出现环路或黑洞,不能认为用了路由协议就永远无环。
例如发往其他子网时,主机先查本机路由并交给下一跳;每个路由器再独立选择下一跳。网络层关心跨网路径,链路层完成当前链路的交付,两者配合。
面试时可以总结为:网络层用逻辑地址和路由把数据逐跳送向目的地,转发平面使用控制平面形成的路径信息。可靠传输和应用处理需要其他层补充。
可能追问的问题
路由选择与数据包转发有什么区别?
IP 尽力而为具体不保证哪些事情?
ICMP 属于传输层吗?
IPv4 与 IPv6 的路由器分片行为有什么不同?
2. IP 数据包
面试题剖析
本题考察封装关系与报文长度,而不是逐项背首部。应能区分帧、IP 数据包和 TCP/UDP 内容,解释 IPv4 与 IPv6 的基本结构、长度和分片差异。
面试题解答
IP 数据包由 IP 首部和其承载的内容组成。常见以太网场景下,IP 数据包位于以太网帧的有效载荷中,TCP 段、UDP 数据报或 ICMP 消息又可位于 IP 数据包中。
以太网首部 | IP 首部 | TCP/UDP 首部 | 应用数据 | 以太网 FCS
<---------- IP 数据包 ---------->

图:关键结构对比,不按字段位数比例绘制;精确位数见下一题。
IPv4
固定部分 20 字节,加选项和填充后首部最多 60 字节。总长度字段为 16 位,计算整个 IPv4 数据包,理论最大 65535 字节。这个上限远大于很多链路 MTU,实际发包要考虑分段、分片和路径 MTU。
IPv6
基本首部固定 40 字节,可通过 Next Header 串接扩展首部,再连接上层内容。通常的 Payload Length 为 16 位,统计基本首部之后的长度,包含扩展首部,不包含基本首部本身。特殊巨型载荷另有规则,普通面试先说明常规格式即可。基本结构见 RFC 8200。
分片的边界
IPv4 在 DF 未禁止且条件允许时,源端或路由器可分片,最终目的端重组;IPv6 路由器遇到无法转发的超大包通常丢弃并发送 Packet Too Big,源端再调整大小或使用分片扩展首部。任一必要分片缺失都可能导致整个原始包无法重组,因此应尽量避免不必要的分片。
IP 自身没有统一的帧尾 FCS,那属于相应链路层格式;IPv4 首部校验和不校验整个业务载荷,IPv6 则取消了基本首部校验和。
面试时可以总结为:IP 包是网络层的封装单位,上承传输协议、下装入链路帧。IPv4 首部可变且总长度包含首部,IPv6 基本首部固定且载荷长度不包含基本首部,两者分片处理也不同。
可能追问的问题
以太网 MTU 1500 是否包含以太网首部和 FCS?
IPv4 总长度与 IPv6 载荷长度的计数范围有什么区别?
IP 数据包有与以太网 FCS 相同的尾部吗?
为什么应尽量避免 IP 分片?
3. IP 头部
面试题剖析
本题侧重首部字段的作用和精确单位。需要明确版本、首部长度、分片偏移、TTL 与上层协议标识,并区分 IPv4 和 IPv6,不把端口误放到 IP 首部。
面试题解答
IPv4 首部固定部分为 160 位,即 20 字节。以下位偏移从首部第一个比特起按 0 编号。
几个高频易错点
DF=1 表示不允许分片,MF=1 表示后面还有片。分片偏移单位是 8 字节,不是一个字节。TTL 主要限制路由跳数,普通二层交换不递减 TTL;TTL 耗尽的包不能继续转发。由于 TTL 等字段可能变化,路由器需要更新 IPv4 首部校验和。
源、目标端口位于 TCP/UDP 首部,不在 IP 首部中。IPv4 字段基础定义见 RFC 791。
IPv6 基本首部
IPv6 基本首部合计 320 位,即 40 字节。Next Header 指向扩展首部或上层协议,扩展首部不固定占一个简单的 32 位块。IPv6 的 Hop Limit 与 IPv4 的 TTL 在限制转发跳数方面作用相近。
面试时可以总结为:IPv4 用 IHL 指明可变首部长度,TTL 限制存活,Protocol 识别上层,分片字段负责重组定位;IPv6 固定基本首部,使用 Next Header 连接扩展与上层协议。记字段时要同时记单位和适用版本。
可能追问的问题
IHL=6 表示多少字节?
分片偏移为什么按 8 字节计量?
TTL 经交换机和路由器分别如何变化?
IPv6 的流标签、载荷长度和地址字段各多少位?
4. IP 路由
面试题剖析
本题考察实际查表规则。应使用 CIDR 和最长前缀匹配解释选择过程,区分转发时的前缀比较与路由学习时的策略、度量,不再只背有类网络的“主机、网络、默认”三步。
面试题解答
普通目的地址路由根据目标 IP 查询转发表,优先选择匹配前缀最长的条目,再得到出口与下一跳。主机路由、网段路由和默认路由可以统一看作不同长度的前缀。

图:三个前缀都匹配目标时,/25 比 /24 和 /0 更具体。
例如目的地址是 192.0.2.130:
最终选择 /25 对应的 C。不是看哪条写在前面,也不是先比较不同前缀路由的跳数。相同前缀存在多条路径时,系统再依据路由来源、策略、度量或等价多路径等选择;策略路由还可能先根据源地址等选择不同路由表。
路由来自哪里
直连网络由接口配置形成;静态路由由管理员配置;动态路由由 OSPF、IS-IS、BGP 等交换和计算。BGP 强调策略,不一定选择物理距离最短的路径。普通逐跳转发不要求数据包携带完整路径。
下一跳与失败
确定下一跳后,在以太网 IPv4 下解析它的 MAC 并封装发送。匹配直连路由时通常直接找目标邻居;匹配网关路由时找网关。没有合适路由也没有默认路由时不能发往目标,可能向本地应用报错或按规则返回 ICMP 不可达。
路由协议收敛需要时间,故障和更新期间可能暂时出现丢包或环路;TTL/Hop Limit 防止数据包无限转发。
面试时可以总结为:查目的地址、选最长匹配前缀、确定出口和下一跳,再进行链路交付。路由协议负责形成路径信息,逐包转发使用已经形成的转发表。
可能追问的问题
默认路由为什么总能匹配但不一定被选中?
存在 /24 与 /25 路由时,应先比较跳数吗?
路由器需要知道到目的地的完整路径吗?
路由收敛期间会发生什么?
5. IP 寻址
面试题剖析
本题考察 IP 地址、前缀和子网计算。需要明确 IPv4 是 32 位、IPv6 是 128 位,并说明地址通常属于接口,一个接口可以有多个地址;“全世界每台主机一个唯一IP”不是通用模型。
面试题解答
IPv4 地址长 32 位,常用四个十进制八位组表示;IPv6 地址长 128 位,常用冒号分隔的十六进制表示。CIDR 用 /n 表示前缀长度,剩余部分用于该前缀内的地址标识。
- IPv4 子网例子
192.0.2.130/25 的掩码是 255.255.255.128。对地址和掩码按位与,得到网络前缀 192.0.2.128/25。其地址范围是 192.0.2.128—192.0.2.255,普通广播子网中网络地址为 .128,广播地址为 .255,常规主机范围 .129—.254。
一般广播子网的可用主机数常用 2^(32-n)-2 计算,但不能无条件套用:/31 点对点链路可使用两个地址,/32 常用于单主机路由。IPv6 不使用 IPv4 式广播,不能套用同样的减二公式。
- 私有地址与地址作用域
IPv4 私有范围为 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。不同私有网络可重复使用这些地址,通常需 NAT 或其他机制访问公共网络。127.0.0.0/8 为 IPv4 环回范围,IPv6 环回为 ::1。
IP 通常配置给网络接口,接口可有多个地址;一台主机也可有多个接口。实际系统还存在虚拟 IP、任播和多种作用域,不能把地址与物理机器简单一一绑定。
- 子网与路由配合
主机依据路由表确定是直接向目标邻居发送还是通过网关。常规同子网通信可直接解析目标 MAC,但最终判断应以路由配置为准,不能仅凭地址看起来相近就认定在同一链路。
面试时可以总结为:地址用于标识接口或服务位置,前缀描述网络范围,掩码用于划分网络和主机部分。计算子网时要注意特殊前缀与 IP 版本,跨网通信则依赖路由。
可能追问的问题
192.0.2.130/25 的网络地址与广播地址是什么?
/31 和 /32 为什么不能套用减二公式?
一台机器能有多个 IP 吗?
私有 IP 为什么可以在不同网络重复使用?
6. A、B 和 C 类网络
面试题剖析
本题属于历史分类地址知识。回答应掌握 A/B/C 的前导位和默认前缀,同时说明现代分配和路由主要使用 CIDR,不能看到地址首字节就直接推断实际子网掩码。
面试题解答
早期有类寻址按地址前导位把 IPv4 地址分成 A、B、C 等类别,为不同规模网络提供固定的网络位长度。现代实际使用应以明确的 CIDR 前缀为准。
为什么后来使用 CIDR
固定类别难以匹配实际规模,容易浪费地址,也限制聚合方式。CIDR 允许 /20、/23、/27 等任意合法前缀长度,通过前缀表达网络大小。比如一个以 192 开头的地址并不意味着当前网络必然是 /24,可能配置为 /26,也可能属于更大聚合路由。
网络地址与广播地址
在普通 IPv4 广播子网里,主机位全 0 表示该子网,主机位全 1 表示广播地址,它们取决于实际前缀,而不是整类地址范围的开头和结尾。路由器不会无条件把广播转发到所有接口,定向广播转发有专门限制;/31 等特殊场景另有规则。
还要区分地址类别与私有范围。例如只有 172.16.0.0/12 是这一段私有空间,并非整个 172 开头范围都私有。地址分配涉及 IANA、区域互联网注册机构等层级,具体地址的可用性还受特殊用途登记约束。
面试时可以总结为:A/B/C 是固定 /8、/16、/24 的历史分类,现代应使用 CIDR 判断网络边界。分类适合解释演进,实际子网计算与路由不能依赖首字节猜掩码。
可能追问的问题
192 开头的 IP 一定属于 /24 网络吗?
CIDR 为什么比有类寻址灵活?
172.0.0.0/8 全部是私有地址吗?
网络地址和广播地址由哪些位决定?
7. 传输控制协议
面试题剖析
本题从首部视角理解传输控制协议:哪些字段定位连接,哪些字段实现可靠性,哪些字段支持流量控制。回答应区分报文段与应用消息,不拘泥于不同扩展下“固定几个字段”的背诵。
面试题解答
TCP 段由首部和数据组成;普通首部最少 20 字节,有选项和填充时最多 60 字节。TCP 将应用字节流分段传输,再按序交付字节流,不负责恢复应用每次发送的消息边界。

图:核心字段示意,不按位数比例绘制;具体首部定义见文字表格。
字段如何配合
IP 与端口区分端点,seq 与 ack 表示字节进度,Window 表示对端当前能够接收多少,SYN/FIN 等控制连接状态。Data Offset 让接收方知道数据从哪里开始。选项不是每段都完整携带,MSS 只在 SYN 中使用,SACK 许可与具体 SACK 区块也属于不同选项。
TCP 校验和包含的伪首部用于纳入源/目标 IP、协议与长度等信息;它参与计算,但不会作为额外 TCP 首部字段在网络上重复发送。带 TCP 选项时,首部占用更多空间,给定路径 MTU 下可携带的数据也可能减少。
基础 TCP 规范已由 RFC 9293 整合替代早期 RFC 793。扩展会影响控制位解释,读图和抓包时应结合适用规范。
面试时可以总结为:TCP 首部通过端口定位端点,通过序号和确认维护字节进度,通过窗口限制接收压力,通过标志控制连接,选项用于扩展能力。首部提供机制,应用仍要自己定义业务消息。
可能追问的问题
Data Offset=8 表示多少字节首部?
伪首部会作为 TCP 的额外字段发送吗?
MSS、窗口扩大和 SACK 许可通常什么时候协商?
端口与序列号分别解决什么问题?
8. TCP 报头标志位(Flags)
面试题剖析
本题考察常见标志位在握手、数据传输、关闭和拥塞反馈中的作用。注意 ACK 标志与确认号不是同一字段,PSH 不是消息边界,URG 也不等于网络层优先级。
面试题解答
TCP 标志位表示报文所带控制信息,一段报文可以同时设置多个标志,例如 SYN+ACK、FIN+ACK。
ACK 不一定是独立的“确认包”
一端发送数据时可以顺便携带反向确认。纯 ACK 不占用序号,但 SYN 和 FIN 各消耗一个序号;如果报文同时包含数据,数据字节还会另外推进发送序号。
PSH 与 URG 的边界
PSH 不能用来解决应用分帧问题,接收程序也不能依赖它精确控制每次读取。URG 通过紧急指针表达特定字节流语义,不会自动绕过 TCP 顺序交付提供通用的高优先级业务通道。
扩展与历史字段
旧资料中的 NS 来自已退出使用的实验性 ECN Nonce 方案,不应列成所有现代连接都使用的必备标志。新的 ECN 扩展还可能重新解释相关控制位,具体应按协商的扩展与抓包解码器版本确认。面试优先准确说明 SYN、ACK、FIN、RST、PSH、URG,再解释经典 ECN 中的 ECE/CWR。
面试时可以总结为:标志位表达连接控制和传输提示,通常组合使用。理解标志必须联系序号字段和连接状态,不能把某一位直接当作业务消息结束、优先级或用户认证。
可能追问的问题
ACK 标志与确认号有什么区别?
FIN+ACK 会占用几个控制序号?
PSH 为什么不能当作消息边界?
RST 与 FIN 的关闭方式有什么不同?
9. 端口及其多路复用
面试题剖析
本题考察端口如何实现复用和分用,以及一台服务器如何用一个监听端口服务大量连接。需要明确 TCP 与 UDP 的端口空间独立,并区分监听端点和已建立连接的识别信息。
面试题解答
端口号是 TCP/UDP 首部中的 16 位整数,范围为 0—65535。发送时多个应用的数据汇入网络,接收时系统根据协议、地址、端口及连接状态分发给对应 Socket。
- 一个端口为什么可以接收很多连接
TCP 已建立连接由本地 IP、本地端口、远端 IP、远端端口四元组识别。例如同一个服务端 203.0.113.10:443 可以同时连接到不同客户端地址或端口。监听 Socket 接收新连接,accept 返回的新 Socket 通常仍使用相同服务端本地端口,不是为每个客户端另开一个监听端口。
TCP 53 与 UDP 53 属于不同传输协议空间,可以同时使用。同一协议上的端口绑定与复用还受绑定地址、Socket 选项和平台规则影响,不能简单说“一个端口永远只能属于一个进程”。
- 端口范围
IANA 将端口分为系统端口 0—1023、用户/注册端口 1024—49151、动态/私有端口 49152—65535。实际操作系统的临时端口分配范围可以配置,不必与 IANA 动态范围完全一致。端口 0 有保留用途,例如 bind 到 0 常表示请求系统分配可用端口。
- 常见端口
历史 115 端口的 Simple File Transfer Protocol 不等于现代 SSH SFTP。注册值和范围可查 IANA 端口登记。端口只是约定,不保证该端口运行的程序真实身份;访问 443 仍须正确校验证书。
面试时可以总结为:端口配合协议和地址完成进程通信的复用与分用,TCP 通过四元组区分共享本地端口的不同连接。常见端口需要连同传输协议、版本和场景一起记。
可能追问的问题
TCP 53 和 UDP 53 可以同时被使用吗?
服务器只有一个 443 监听端口,为什么能处理大量连接?
accept 返回的新 Socket 会自动换一个服务端端口吗?
SFTP 默认端口为什么通常是 22 而不是 115?
客户端临时端口范围一定是 49152—65535 吗?
TCP 错误恢复、流量控制和数据分段
10. 错误恢复
面试题剖析
本题重点是通过具体字节序号解释缺口、累计确认和重传,补充 ACK 丢失及乱序到达等情形。需要区分 TCP 的端到端恢复与路由协议的路径收敛。
面试题解答
TCP 使用字节序号识别数据位置,用累计确认表示连续接收进度,并通过重传修复缺口。它不会替路由器重新计算网络路径,也不能保证永久中断后仍能恢复。

图:收到后续字节不代表缺口已经消失;只有连续接收进度推进,累计 ACK 才会前进。
假设发送 1000—1999、2000—2999、3000—3999 三段。第一段到达后回复 ACK=2000;第二段丢失、第三段到达时,累计 ACK 仍为 2000。补齐第二段后,如果后续数据已缓存,便可累计确认到 4000。
超时与提前恢复
发送方根据 RTT 估计和平滑后的波动计算 RTO;超时后重传并退避,而不是对所有路径使用一个固定值。重传数据的 RTT 测量还需避免确认归属歧义。具体算法见 RFC 6298。三个重复 ACK 或其他已启用的丢包检测机制,可以在 RTO 前触发恢复。
ACK 丢失、乱序和重复
较早 ACK 丢失时,后续累计 ACK 可能一次确认更大范围,不一定引发重传。若发送端仍重传了对方已收到的数据,接收端按序号识别重复字节,不会正常地把重复内容再交付一次。乱序数据可以被缓存等待缺口,不能看到乱序就立即断言所有后续数据都被丢弃。
SACK 在协商后告诉发送方哪些非连续区间已经收到,有助于减少无效重传;累计确认仍表达连续接收边界。基础协议的 ACK 只确认对端 TCP 收到字节,不证明业务已完成。
面试时可以总结为:序号描述位置,累计 ACK 描述连续进度,超时或丢包信号触发重传,接收端排序和去重。它们共同修复传输缺口,SACK 可进一步提高恢复效率。
可能追问的问题
收到 3000—3999 而缺少 2000—2999 时,ACK 是多少?
ACK 丢失一定导致重传吗?
接收端如何避免把重传字节重复交付?
SACK 与累计 ACK 有什么区别?
11. 使用滑动窗口的流量控制
面试题剖析
本题专门解释接收方如何通过窗口形成背压,与前面介绍窗口结构的题目侧重点不同。要纠正“接收窗口从小到大增长直到丢包”这种把流量控制和拥塞控制混合的说法。
面试题解答
TCP 流量控制根据接收方当前可接受的数据量限制发送,避免应用处理速度不足导致接收缓冲区被持续压满。接收端通过 Window 字段通告 rwnd,发送端据此限制未确认数据范围。

图:图中的可发送区间受窗口约束,实际发送还要同时满足拥塞控制。
接收慢时发生什么
接收端应用暂时不读数据 → 缓冲区可用空间减少 → 通告窗口减小 → 发送方减少可新发的数据。应用恢复读取后,接收端可以通告更大窗口,使发送继续。这是端到端背压,不是让发送方主动丢弃尚未确认的数据。
零窗口如何恢复
窗口为零时通常暂停普通新数据发送。为了避免窗口重新开放的通知丢失造成双方永久等待,发送端使用持续计时器和窗口探测。探测目标是确认接收空间,与 Keepalive 判断空闲对端是否可达不同。
窗口大小不等于段的数量
窗口按字节计量;开启窗口扩大后需按相应比例解读。发送方收到部分累计确认就可能继续发送,不需要每次等完整窗口都确认才整体“重新开始”。拥塞窗口从小探测网络容量属于拥塞控制,不能拿来解释 rwnd 的所有变化。
面试时可以总结为:接收端用 rwnd 反馈接收能力,发送端尊重它并结合 cwnd 限制在途数据。应用消费变慢会通过窗口向发送端传递压力,零窗口探测则保证有机会重新发现可用空间。
可能追问的问题
接收程序长时间不调用 read 会怎样?
窗口缩小是否要求发送方丢弃未确认数据?
零窗口探测与 Keepalive 有什么区别?
流量控制能否替代拥塞控制?
12. 数据分段和有序数据传输
面试题剖析
本题侧重分段大小、序号与有序交付。要区分 MTU、MSS 和应用消息长度,并说明乱序在网络中可以发生,TCP 保证的是交给上层时的顺序。
面试题解答
TCP 根据字节流、接收端 MSS、路径 MTU、首部开销、窗口和发送策略形成报文段。到达顺序可能变化,接收端依据序号重组连续字节后再交付应用。
MTU 和 MSS 的关系
以太网常见 MTU 为 1500 字节,指可承载的网络层包大小,不包含以太网首部和 FCS。在没有选项的 IPv4/TCP 示例中,可放 1500−20−20=1460 字节 TCP 数据;IPv6 基本首部为 40 字节,对应示例为 1440。隧道、扩展首部和 TCP 选项都会改变可用空间,不能把 1460 写成所有网络的固定段长。
MSS 表达接收端可接受的最大 TCP 数据段大小;两个方向分别通告,发送端还需考虑实际路径。应用可以写入远大于 MSS 的消息,由 TCP 分段;小写入也可能被合并,但业务边界仍由应用协议维护。
有序交付例子
假设每段有 1000 字节,起始序号分别为 1500、2500、3500,却按 1500、3500、2500 到达。接收端先交付已有连续部分,缓存后面的 3500 段,等 2500 段补齐后推进连续边界。如果始终补不齐,则需要重传或最终报告连接失败。
与 IP 分片区别
TCP 分段是在传输层生成多个各有 TCP 首部的段;IP 分片是把一个 IP 包的载荷拆到多个片中,后续片通常没有新的完整 TCP 首部。IP 先重组原始包,TCP 再处理段,这两层不能混为一谈。网卡分段与接收聚合卸载还可能使本机抓包看到较大块,不等于线上的帧突破了 MTU。
面试时可以总结为:MSS 和路径 MTU 约束段大小,TCP 序号按字节描述位置,接收端允许网络乱序但按序交付。分段不是业务拆包协议,也不是 IP 分片。
可能追问的问题
TCP 选项增加后,给定 MTU 下的数据长度如何变化?
TCP 分段与 IP 分片分别在哪一层完成?
乱序到达的数据一定立即丢弃吗?
为什么本机抓包可能看到大于 MTU 的 TCP 块?
13. TCP 连接建立和终止
面试题剖析
本题将首部标志与状态生命周期对应起来。需要核准 SYN/FIN 与确认号的关系,明确端口通常在发起连接前已经确定,不把握手理解为双方现场协商服务端端口。
面试题解答
TCP 建立连接时同步双方序号并建立状态,正常终止时分别结束两个发送方向。下面用无应用数据的典型握手说明。
A → B:SYN,seq=x
B → A:SYN+ACK,seq=y,ack=x+1
A → B:ACK,seq=x+1,ack=y+1
SYN 占一个序号,因此确认是 x+1、y+1,而不是 x−1 或 y−1。客户端通常在发起连接时已知道服务端地址与端口,本地临时端口由系统分配或应用绑定;握手不负责随意另选服务端业务端口。
正常关闭
一端发 FIN,另一端 ACK;另一端完成自己的发送后也发 FIN,前一端 ACK 并进入典型的 TIME_WAIT。FIN 同样占一个序号,纯 ACK 不占。收到 FIN 后,应用读完已接收数据再读取会得到 EOF,这代表对端发送方向结束,不等于自己的发送方向必然不能继续使用。

图:关闭方向独立,主动方与客户端不是同义词。
RST 则用于复位或拒绝连接,属于不同的终止路径。握手与关闭发生丢包时可能重传,所以“三次”“四次”并不描述所有实际报文数量。UDP 没有这套 TCP 连接状态,但上层应用依然可以建立自己的逻辑会话。
面试时可以总结为:SYN 初始化发送方向,ACK 确认序号进度,FIN 表示本端字节流结束,RST 表示复位。握手同步序号,挥手独立关闭两个方向,端口与应用消息规则由连接之外的配置和协议设计决定。
可能追问的问题
握手是在协商服务端端口吗?
SYN 和 FIN 为什么都占用序号?
读到 EOF 与收到 RST 有什么不同?
UDP 没有握手是否意味着不能实现应用会话?
14. UDP(用户数据报协议)
面试题剖析
本题从格式与接收语义深入 UDP。应准确说明四个首部字段始终存在、长度包含首部、校验和规则与 IP 版本相关,并区分数据报过大和接收缓冲不足的影响。
面试题解答
UDP 首部固定 8 字节,包含四个 16 位字段。即使某个字段允许填零,也不表示该字段可以从首部删除。

图:UDP 四个字段固定存在,长度字段包含 8 字节首部。
校验和与长度边界
IPv4 下零校验和值表示未提供 UDP 校验和,真正计算结果为零时按规则编码为全 1;普通 IPv6 UDP 通常要求非零校验和,少数专门规定的隧道场景存在例外。校验和不是加密或身份认证。基础定义见 RFC 768。
UDP 长度字段最大为 65535,但在普通无选项 IPv4 包总长约束下,应用数据理论上最多为 65535−20−8=65507 字节。这个理论值不代表推荐发送大小,实际通常应控制在路径 MTU 内,避免 IP 分片。
消息边界与可靠性
每个 UDP 数据报独立交付,接收方通常一次取一条。缓冲区不足可能导致截断,剩余内容通常不能通过下一次读取续上;IPv4 分片则先由 IP 重组,再交给 UDP。报文仍可能丢失、重复和乱序,需要可靠语义的上层可增加重试、编号和去重。
面试时可以总结为:UDP 用固定四字段首部完成端口分用、长度描述和差错检测,保留数据报边界。字段可为零不等于可省略,长度上限不等于合适的发包大小,可靠性取决于上层机制。
可能追问的问题
UDP 四个首部字段哪些可以直接删掉?
IPv4 与 IPv6 的 UDP 校验和规则有什么不同?
为什么 65507 字节只是某种条件下的理论载荷上限?
接收数据报被截断后能否下一次继续读取?
继续阅读
阅读导航




