公司动态
从TCP/IP到VXLAN:核心网络研发校招笔试考点全解析
1. 试卷概览核心网络研发到底在考什么每年校招季百度等大厂的笔试题目一出来总能在技术圈里引起一波讨论。这份2018校招核心网络研发工程师第二批笔试题放在今天看依然有很强的参考价值。原因很简单网络基础知识的考察方式这几年变化不大变的只是题目包装的外壳。先说结论这份试卷考察的不是“你会不会背OSI七层模型”而是“你有没有真正理解数据包从一端到另一端的过程中每一层都发生了什么”。核心网络研发这个岗位在百度内部对应的业务方向大致是数据中心网络、骨干网流量调度、网络性能优化、自研网络设备/软件交换机等。这类岗位的研发工程师日常打交道的是交换芯片、路由协议、流量调度算法、内核协议栈这些东西。所以和普通后端开发笔试题有个明显差异后端考的是Redis、MySQL、消息队列用没用过核心网络考的是BGP选路原则、TCP拥塞控制细节、DPDK收包流程这类偏底层的硬核知识。这个岗位的笔试筛人逻辑很直接——网络基础不扎实的人进来也没法干活。因为核心网络研发面对的故障场景往往是“某个数据中心出口流量异常”如果连报文转发路径都画不清楚根本无从排查。对准备面试的同学来说这份题的价值在于它划出了一个相对清晰的能力边界。你不需要去背各种框架API但你需要把计算机网络这本厚书真正读透并且能动手验证每个协议的行为。对已经工作的工程师来说这份题也是一面镜子能照出自己基础知识的磨损程度——很多知识点工作后不用真的会忘。2. 题型分布与设计逻辑2.1 选择题广度优先的基础筛查笔试题的第一部分通常是选择题覆盖的面非常宽。从协议栈各层的关键机制到网络设备的转发原理再到网络编程的常见API行为都会涉及。这类题目的设计逻辑是用相对小的成本快速筛查候选人的知识覆盖面。选择题里高频出现的知识点我整理了一下TCP协议三次握手状态变迁、四次挥手TIME_WAIT含义、拥塞控制各阶段慢启动、拥塞避免、快重传、快恢复、滑动窗口与流量控制区别IP协议分片与重组、TTL变化、子网划分与CIDR计算路由协议OSPF区域类型、BGP路径属性与选路规则、路由优先级比较传输层与数据链路层MAC学习、VLAN Tag、STP状态机socket编程listen backlog作用、非阻塞IO行为、epoll的LT/ET模式差异坦白讲这些知识《TCP/IP详解》卷一和卷二覆盖了90%。但笔试不会直接问你“TCP头部有哪些字段”而是会包装成具体场景。比如给你一个连接状态序列让你判断哪个状态不可能出现或者给你一个网络拓扑和路由表让你判断某条流量的实际转发路径。应对选择题没有捷径唯一的办法是把每个协议的关键机制理解到能解释“为什么这么设计”的程度。死记硬背的答案在稍微变形的题目面前会瞬间失效。2.2 简答题检查表达与逻辑能力简答题部分通常考察两类能力一是对协议细节的准确描述能力二是面对问题时的分析思路。这类题目往往没有唯一标准答案但存在明显的采分点。以TCP可靠性相关的题目为例答题时需要覆盖的要点包括确认与重传机制累积确认、超时重传、快速重传、SACK选择性确认数据校验检验和计算覆盖范围流量控制通过接收窗口大小调节发送速率拥塞控制通过拥塞窗口感知网络状态这些机制组合在一起才构成了TCP的可靠性保证。答题时如果只写“TCP是可靠传输协议有确认机制”等于没答。正确的答题方式是先给结论再拆解机制最后说明各机制之间的配合关系。阅卷人看的是你能不能把一个复杂系统条理清晰地讲明白。2.3 综合设计题从知识到能力的跨越最后一部分通常是综合题或设计题也是拉开差距的关键。这类题目会给出一个相对真实的网络场景比如“设计一个支撑数万台服务器的数据中心网络架构”或者“某个视频业务出现卡顿如何定位瓶颈”。到这里题目真正开始考察岗位所需的综合能力。设计数据中心网络你需要知道传统三层架构接入/汇聚/核心和CLOS/spine-leaf架构的区别服务器规模对网络收敛比的要求VXLAN在数据中心里的作用以及它为什么能解决VLAN数量上限和虚拟机迁移跨二层的问题路由协议在数据中心内的选择为什么很多场景用OSPF或BGP而不是RIPEBGP在数据中心的特殊用法这类题目没有标准答案但能看出候选人是否有全局视野。设计一个方案不难难的是在方案里体现出对成本、性能、可维护性、扩展性的综合权衡。3. 核心考点深度拆解3.1 TCP/IP协议栈从状态机到拥塞控制TCP是笔试中雷打不动的核心考点。我对这道题印象太深了因为第一次做的时候直接画错了状态机。先看最基础的三次握手和四次挥手。三次握手的本质是“双方确认彼此的收发能力都正常”。第一次握手客户端发送SYN服务端收到后知道自己能收、客户端能发第二次握手服务端回SYNACK客户端收到后知道自己能发能收、服务端能发能收第三次握手客户端回ACK服务端收到后确认自己能发、客户端能收。这三步缺一不可因为TCP是双向通信必须让双方都确认对方具备收发能力。四次挥手的核心是TIME_WAIT状态。主动关闭方在发送最后一个ACK后要进入TIME_WAIT并等待2MSL报文最大生存时间才能完全关闭。为什么需要这个等待两个原因第一确保最后一个ACK能到达对端如果丢失对端会重发FIN此时主动关闭方还能响应第二让网络中迟到的重复报文段自然消亡避免污染新连接。这个考点几乎年年出现因为TIME_WAIT的状态时间是2MSL不是1MSL很多人记错。再说拥塞控制这是简答题里区分度最高的部分。慢启动阶段cwnd从1个MSS开始每经过一个RTT翻倍呈指数增长当cwnd达到ssthresh后进入拥塞避免阶段每经过一个RTT只增加1个MSS线性增长出现丢包后如果是超时重传ssthresh降为当时cwnd的一半cwnd重置为1重新慢启动如果是快速重传收到三个重复ACK则执行快恢复ssthresh降为一半cwnd直接设为新的ssthresh进入线性增长。很多人会把快重传和快恢复搞混。快重传是发送方收到三个重复的ACK后立即重传丢失的数据包不需要等超时快恢复是拥塞避免阶段的一种处理方式避免cwnd直接从1重启导致带宽利用率骤降。这两个机制是配合使用的。笔试中的TCP题目很少直接考定义更多是结合tcpdump抓包截图让你分析某个时间段内发生了什么。比如看到一个连接上既有大量重复ACK又有窗口缩为0的通告就该意识到网络可能出现了拥塞同时接收方应用程序可能在慢速消费。这种题目考的是你能否把协议机制和实际现象对应起来。3.2 路由与交换BGP和OSPF的博弈路由协议在核心网络岗的笔试中占据很大比重。因为核心网络研发日常工作要面对的就是大规模网络里的路由规划与流量调度。BGP边界网关协议是必考的。几个高频考点BGP是路径矢量协议基于TCP 179端口建立邻居关系eBGP和iBGP的区别eBGP传输公网路由下一跳会改变iBGP传输内部路由下一跳保持不变所以需要full-mesh或路由反射器解决水平分割问题BGP选路原则超过十条笔试常考前几项权重Weight 本地优先级Local Preference 本地起源Originate AS路径长度AS Path 起源类型Origin MED eBGP优于iBGP IGP metric路由聚合对AS Path的处理聚合时通常携带发起聚合的AS号并附加aggregator属性标注聚合者OSPF的考点集中在链路状态协议与距离矢量协议的本质区别OSPF的每台路由器都拥有全网拓扑信息通过SPF算法计算最短路径树区域划分的作用area 0是骨干区域非骨干区域必须与骨干区域相连避免路由环路DR/BHR选举机制以及选举在哪些接口上不会发生如点对点链路LSA类型Router LSA、Network LSA、Summary LSA、ASBR Summary LSA、AS External LSA交换部分的典型考点是生成树协议STP。它解决的核心问题是二层网络中存在冗余链路时如何避免广播风暴和MAC地址表抖动。STP通过选举根桥、根端口、指定端口将环形拓扑裁剪为树形拓扑。RSTP的改进在于端口角色和状态收敛速度MSTP则进一步实现了多实例负载分担。实际上现在大型数据中心内部二层网络基本被spine-leaf架构和VXLAN取代STP用的场景越来越少。但笔试考STP考的不是你将来会不会用而是你是否理解“环路意味着什么协议如何通过选举解决冲突”这个底层思维模型。3.3 数据中心网络VXLAN与SDN的现代战场这一块是核心网络研发岗位面试的加分项。笔试中如果出现通常和综合设计题结合。传统数据中心网络用VLAN做二层隔离但VLAN ID只有4096个且跨机柜的二层域扩展依赖STP收敛慢、链路利用率低。VXLAN的出现解决了两件事一是通过24比特的VNIVXLAN Network Identifier提供高达1600万的隔离空间二是通过底层IP网络承载二层报文实现大二层网络的跨度。VXLAN的原理是在原始以太网帧外面封装UDP/IP头用UDP目的端口4789标识VXLAN流量VTEPVXLAN Tunnel Endpoint负责封装和解封装。SDN软件定义网络在笔试中的考察点通常集中在控制平面与转发平面分离思想上。传统网络设备的控制逻辑是分布式自治的每台设备独立计算转发路径并维护路由表而SDN的理念是把控制逻辑集中到控制器上由控制器通过OpenFlow等协议统一下发流表到交换机。它带来的好处是网络策略下发灵活全局可视可控但代价是控制器的性能和可靠性成为单点瓶颈因此实际部署中通常用控制器集群。笔试中如果让你比较传统网络和SDN的优劣建议不要只罗列概念。你可以从故障恢复这个角度展开传统网络中链路故障依赖路由协议收敛OSPF收敛时间通常在百毫秒到秒级SDN网络中控制器可以预先下发备用流表或者通过快速感知拓扑变化下发新路径理论上能做到亚毫秒级切换。但SDN增加了一个控制通道的时延如果控制器和交换机之间链路拥塞反而会拖慢故障恢复速度。这样回答就体现了你自己的思考。3.4 Linux网络与高性能编程内核协议栈的隐藏考点核心网络研发和Linux内核协议栈打交道非常频繁所以笔试中经常出现Linux网络编程和内核网络子系统的题目。epoll是高频考点。相同规模的并发连接下epoll模型解决了select和poll的两个痛点一是fd数量限制select默认只能监听1024个fd二是每次调用都需要把整个fd集合从用户态拷贝到内核态效率随fd数量增加急剧下降。epoll通过三个关键设计解决这些问题epoll_event回调机制不是每次轮询所有fd而是只通知真正就绪的事件mmap共享内存映射用户态和内核态通过共享内存传输就绪事件减少拷贝水平触发LT和边缘触发ET两种模式ET模式是状态变化时通知一次需要一次性把数据读完否则可能漏掉后续数据题目如果深入一层可能会问你“为什么epoll的ET模式下读数据要用非阻塞IO循环读直到EAGAIN”。原因是ET模式下如果一次没有把缓冲区读完内核不会再通知你这个fd上有新数据除非新的数据到达触发下一次状态变化。用阻塞IO配合循环读在数据没读完时会阻塞住影响事件循环处理其他事件所以必须用非阻塞IO碰到EAGAIN就收手。零拷贝Zero-Copy也是笔试常客。传统文件发送路径是磁盘 - 内核缓冲区 - 用户缓冲区 - 内核socket缓冲区 - 网卡。sendfile系统调用能把磁盘文件直接通过内核空间发送到网卡避免两次用户态与内核态之间的上下文切换和数据拷贝。再进一步io_uring是Linux 5.1引入的新型异步编程模型通过共享的SQ/CQ环形队列减少系统调用次数在网络和存储场景下都有明显的性能优势。如果你是备考状态建议在本地用tcpdump配合nc或curl做一些实验建立连接看握手包发送数据看序列号变化tcpdump的观察结果会远比单纯背状态机牢固。3.5 算法与数据结构工程能力的基本盘作为研发岗笔试算法题通常必不可少。核心网络岗位的算法题并不比后端研发岗位简单。因为网络场景里有大量问题本质上是算法问题比如BGP路由查表的最长前缀匹配LPM需要用trie树垃圾邮件识别中的文本相似度计算需要用到哈希或布隆过滤器数据中心流量调度中的负载均衡算法需要对一致性哈希有深入理解。如果你在网上搜索这份笔试题的讨论很多人会提到字符串处理和数组操作的题目。这些题目本身不算难但要求你的编程基本功扎实边界条件处理、时间复杂度分析、代码规范性。一个常见的题目是字符串转换成整数。看起来简单但考察点很密集空字符串怎么处理正负号怎么处理溢出如何检测非法字符如何识别是否需要支持不同进制。一个函数可能隐藏五个以上的边界条件能一次性写对并不容易。另一个高频题是链表反转或合并有序链表。这类题考察的是指针操作的熟练度以及是否具备“画图辅助思考”的习惯。建议做题时先在纸上画链表节点变化再动手写代码错误率会大幅下降。针对算法部分的准备我给的建议是每天保持3-5道题的训练量重点覆盖数组、链表、字符串、栈、队列、二叉树、哈希表这几类数据结构。不要只做简单题至少要有30%的题涉及中等以上难度否则考场上遇到新题容易慌。这个岗位的算法题更重视你能否把场景抽象成算法所以平时要练习读题的归纳能力。4. 笔试实战答题策略与踩坑记录4.1 时间分配与答题顺序校招笔试时间通常比较紧选择题部分也不宜恋战。根据我这几年观察到的考生反馈一个比较合理的时间分配是选择题和填空题占总时间30%以内简答题占总时间30%综合设计和编程题剩余40%答题顺序上我个人的建议是先做简答题里你最熟悉的协议题再回头处理选择题。因为简答题的采分逻辑是“列出关键点”你不会的部分能靠知识框架推导出一部分而选择题一旦做错就知道错了容易影响心态。先把稳拿的分数拿到手再去碰设计题可以缓解时间压力。选择题中如果遇到计算题比如子网划分、CIDR计算、端口号、协议默认值这类“硬知识点”先跳过最后有时间再回头算。这类题目只要公式熟就能做对卡在最前面反而浪费宝贵的窗口时间。4.2 简答题的采分点与答题范式简答题不是作文题不需要写长篇大论但必须说到点子上。这里分享一个我总结的答题范式在面试中也适用第一步亮出关键词。比如题目问“TCP如何保证可靠传输”你第一句就写“TCP通过确认与重传、校验、流量控制、拥塞控制四类机制保证可靠性”。这样阅卷人一眼就能看到你覆盖了哪些方面。第二步逐个展开核心机制每个机制给一句定义、一句作用、一句场景或限制。比如重传机制你要说明累计确认是什么、超时重传和快重传的区别、SACK解决什么问题这就够了。第三步如果需要举一个小场景说明机制之间的配合。比如“当网络出现拥塞时发送端检测到三个重复ACK触发快重传同时进入快恢复降低发送速率但不回到慢启动重新探测”这比单纯背概念有说服力。答题时最忌讳的是把概念背得一字不差却不提协议为什么要这么做。比如“为什么TCP需要TIME_WAIT状态”这道题只写“为了可靠终止连接”能拿一半分补充“让迟到的报文段在网络中消失”就能拿全分如果你还能提到“避免前后连接混淆”并解释MSL的含义基本就是标准答案了。4.3 综合设计题的思路展示综合设计题考察的是方案设计能力。这类题最怕的是只给结果不给理由。比如让你设计一个支撑数千台服务器规模的网络方案你的回答至少应该包含逻辑清晰的几个部分物理拓扑选型用三层架构还是spine-leaf。如果规模大、东西向流量占比高spine-leaf的CLOS拓扑更合适因为每台服务器到任意其他服务器的跳数固定spine一跳且扩展性好——横向增加leaf机架纵向增加spine交换机容量。二层与三层设计二层域控制在leaf交换机以内跨机架互通走三层。这样可以避免大二层的广播域问题也让路由协议做ECMP负载分担成为可能。如果需要跨数据中心二层互通引入VXLAN技术通过underlay的IP网络承载overlay的二层流量。路由协议选择核心网络内部建议跑OSPF或BGP。如果对故障收敛时间敏感可以考虑BGPBFD联动将故障探测时间从秒级压缩到毫秒级。冗余设计关键链路要做bond链路聚合交换设备要做堆叠或vPC跨设备链路聚合路由层面靠ECMP和BGP多路径实现冗余。安全与隔离通过VRF或VXLAN实现不同业务之间隔离避免广播风暴和路由泄露影响全局。答题时把每一部分都放到“业务需求-技术方案-效果与代价”的结构里会让阅卷人觉得你思考全面、可落地性强。实际上能在笔试环节就把方案思路表达成这个结构的人面试通过率也普遍更高。4.4 高频错误与避坑清单我整理了这份笔试和同类考试里考生最容易犯的几个错误每一条都是实际踩坑的记录。第一类是状态与模式混淆。典型的包括建立连接是三次握手断开连接是四次挥手主动关闭方才能进入TIME_WAIT被动关闭方进入CLOSE_WAIT非阻塞connect返回EINPROGRESS并不表示失败需要后续检查socket是否可写epoll的ET模式不是性能更高而是事件通知次数更少要求caller处理更谨慎。第二类是数值记忆模糊。BGP的端口号是179DNS是53HTTP是80HTTPS是443很多考生会把179和69记混。实际上69是TFTP用法完全不同。UDP头部长度固定8字节TCP头部最小长度20字节最大能到60字节因为选项字段最多40字节。IPv4头部的IHL字段单位是4字节所以IPv4头部最小值为5对应20字节。第三类是原理理解不深导致的“想当然”。比如认为TCP窗口越大越好。实际上TCP窗口大小受限于接收缓冲区大小也受限于发送方的拥塞窗口。窗口过大会导致缓冲区占用过高内存压力增大过小则容易限制吞吐。再比如认为VLAN和VXLAN是一回事这个错误在面试中也常常出现——VLAN是二层隔离VXLAN是二层扩展方向完全不同。还有一类错误是概念跳跃。题目中涉及LVS和负载均衡时混淆四层和七层四层LB转发TCP/UDP流量作用于传输层通常基于IP端口做转发决策七层LB处理HTTP/HTTPS等应用层协议可以按URL、Cookie、Header等条件路由。这两种机制的网络路径优化、会话保持策略完全不同答题时先锁定题目的协议层级再作答能有效避免跑偏。5. 备考路线与进阶资源5.1 基础阶段的资源组合如果你想系统准备核心网络研发岗位的笔试我建议的基础书单是这样的《计算机网络自顶向下方法》作为入门图谱适合建立整体概念《TCP/IP详解 卷1协议》必须研读重点看TCP的状态机、超时重传、拥塞控制以及IP路由相关章节《TCP/IP详解 卷2实现》可以选择性地阅读ip_input和tcp_input相关代码内核实现细看会占用不少时间但能帮你把很多概念落地《Unix网络编程 卷1》重点看socket API和IO模型尤其是select/poll/epoll对比《路由与交换技术》或Cisco方向的教材帮助理解BGP和OSPF的配置与原理。如果你有Linux环境强烈建议配合tcpdump和wireshark做抓包实验。用wireshark分析一次完整的三次握手和四次挥手过程你会在可视化界面上比在书里更直观地记住每个标志位的含义和时序。我自己当年就是这么学会TCP的。5.2 进阶与实战方向当基础概念和实验都过了一遍之后建议往现代网络技术方向延伸。以下几个方向是核心网络研发实际工作经常涉及的第一数据中心网络自动化。围绕Netconf/YANG模型、gRPC、Telemetry技术或自研控制器的项目是加分项。如果你能写一个简单的网络监控脚本或自动化配置工具面试时可以现场演示效果优于纯背概念。第二内核网络性能优化。接触一下XDPeXpress Data Path和DPDK它们都是内核协议栈之外的高性能数据通路方案。理解它们的原理和应用场景会让你在讨论网络性能调优时区别于只会调sysctl参数的候选人。第三云网络产品领域。这类产品涉及VPC、负载均衡、NAT网关、安全组等多个模块底层都依赖网络虚拟化技术。如果你了解过这些产品形态在综合设计题里会多一个实际业务视角如果你能聊清楚VXLAN、Open vSwitch、隧道封装等底层机制整个面试的深度会显著提升。5.3 从笔试到面试的经验延伸笔试只是一道门后面还有更深入的面试。但值得高兴的是如果笔试准备到位了很多东西会在面试中继续发挥作用。面试中很有可能被问到和笔试相同或相近的问题“TCP为什么需要三次握手”、“数据库连接池为什么总出现TIME_WAIT”、“遇到网络延迟抖动你怎么排查”。这些问题的准备方法其实和笔试简答题相同结论先行原理展开最后给一两个真实场景的排查经验。再往深一层面试官可能会考察你动手排障的能力。你可以准备一套自己熟悉的排查路线图从tcpdump抓包到ss查看连接状态从route看路由表到ping/traceroute看路径从iperf做带宽测试到用netstat统计重传率。这套工具链在笔试和面试中都不太可能直接问但它是核心网络研发日常工作的真正底色。另外一个经验是准备笔试时不要只准备题目本身。花时间把这些题目背后的知识体系铺开联系到真实业务场景想一想“如果这个知识点在现网失效了症状会是什么”这种思考方式能让你在面试中游刃有余。因为面试官往往不会问标准答案而会顺着你的回答追问“然后在你的场景里会出现什么现象”这时候你平时的积累就会自然流露出来。6. 实践心得刷这套题的实际收获回头看这套2018年核心网络研发工程师笔试题我认为它的价值远不止“一份校招考题”这么简单。它的出题范围覆盖了TCP协议栈、路由协议、交换技术、Linux网络编程、算法基础和数据中心网络等模块几乎就是一个合格网络研发工程师能力模型的完整框架。我当时刷这套题时的感受是选择题能让我快速定位哪些知识点只是“眼熟”而不是“真懂”简答题逼我用结构化语言表达网络概念这对技术表达能力是很好的训练综合设计题则让我第一次以一种宏观视角思考“整个数据中心网络如何设计”。如果你正在准备面试我的建议是不要只关注题目本身的对错而是把每一道题当作一次“为什么”的追问。TCP为什么需要第三次握手BGP为什么有那么多路径属性数据中心为什么要用VXLAN而不是VLANSTP为什么要有五种端口状态这些问题才是核心网络研发工程师真正的日常。最后分享一个我在实际项目中验证过很多次的经验网络问题的排查最终拼的就是你对协议底层机制的理解深浅。数据包在中间某段丢了你能从TCP重传的特征推测出丢包位置应用出现卡顿你能从BGP路由的AS路径找到跨域传输的瓶颈。这些能力都不是一天练成的靠的就是把基础的协议原理一遍遍吃透并在实战中反复验证。这套题放到今天依然值得每个网络方向的技术人认真做一遍。它的意义不在于“通过校招”而在于帮你建立一张属于自己的网络知识地图。有了这张地图后续不管接触什么新协议、新架构你都能快速定位它在整个网络体系中的位置并理解它出现的原因和解决的问题。