尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

网易校招云计算网络开发笔试题:VPC/SDN/VXLAN核心考点全解析

网易校招云计算网络开发笔试题:VPC/SDN/VXLAN核心考点全解析 这一份网易2018校招云计算网络开发工程师笔试卷放到今天来看依然很有参考价值。云计算网络开发这个岗位说白了就是做云厂商最底层的网络基础设施VPC、负载均衡、SDN控制器、NFV网关这些笔试考察的范围横跨网络协议、Linux内核、虚拟化、数据结构和编码能力覆盖面相当广。我去年带团队校招出题时还专门翻过这批老卷子可以说网易这份题的出题思路和目前主流云厂商的校招笔试非常接近技术栈也基本没变。这篇文章我会从多个角度把这份笔试卷涉及的核心知识点、答题思路和备考路线完整拆一遍尽量还原出每个考点背后的“为什么”帮准备云计算网络方向校招的同学少走弯路。不管是为了应付笔试还是真心想入行云网络研发这篇内容都值得仔细看完。1. 试卷考察逻辑解构云网络开发工程师的四个能力层级先说个容易被忽略的问题为什么云计算网络岗的笔试卷子考的东西看起来这么杂网络、操作系统、编程语言、算法混在一起乍看像“四不像”。这就要聊到云网络工程师真实的工作内容了。在云厂商里网络研发不是只跟交换机路由器打交道而是要构建一套完整的虚拟化网络体系让租户觉得“云服务器就像一台独立的物理机器”包含私有IP、子网划分、路由表、安全组、NAT网关、负载均衡。这套体系涉及芯片转发、内核协议栈、用户态进程、控制面协调每一个层面都可能出问题所以笔试必须面面俱到。我通常把这份试卷的考察内容分成四个能力层级第一层是网络协议基本功。TCP三次握手、四次挥手、拥塞控制、VLAN、OSPF这些属于必须拿满分的送分题如果这个层级都丢分后面基本没戏。第二层是云网络核心技术认知。VXLAN封装格式、Overlay网络原理、SDN控制器的基本架构、OpenFlow匹配流程这些是区分“学过网络”和“懂云网络”的分水岭也是这份试卷最有区分度的部分。第三层是Linux系统与编程能力。云计算网络开发大量工作在Linux用户态对路由表、iptables、netfilter、内核网络栈的熟悉程度直接决定了你能不能干活。笔试中体现为系统调用、网络编程、Python/C语言相关题目。第四层是算法与架构设计思维。校招笔试基本都会带两三道算法题云网络场景下多为图论网络拓扑相关、哈希、字符串处理偶尔有系统设计简答题。这四个层级不是相互独立的而是层层递进。网易这份卷子比较好的地方在于它并不只考死记硬背的概念而是经常把两三个知识点揉在一个场景题里考比如给一个VPC网络拓扑让你分析数据包从虚拟机A到虚拟机B的完整转发路径中途涉及ARP、VXLAN封装、路由查询、安全组过滤一张图考五六层知识。后面我会专门挑这类综合题做示范。2. 网络基础核心考点从TCP/IP到路由协议的高频题解析2.1 TCP三次握手与四次挥手不只是背状态要会推演TCP相关问题基本是每张网络笔试卷的必考题网易这份也不例外经常出现的问法有这么几种为什么三次握手而不是两次TCP连接建立时SYN超时重传怎么处理四次挥手中TIME_WAIT状态为什么需要2MSL大量TIME_WAIT会带来什么问题怎么解决单纯背答案是低效的我给你一个通用的推导思路。三次握手的核心作用是“确认双方的收发能力都正常”。第一次握手客户端发SYN服务端收到后只知道客户端能发第二次握手服务端回SYNACK客户端收到后知道自己能发能收、服务端也能发能收第三次握手客户端回ACK服务端收到后确认自己发送能力也正常。如果只有两次握手服务端无法确认自己的发送能力是否可达客户端也没法防止历史失效连接请求突然到达导致的资源浪费。TIME_WAIT这个点更常考原因是主动关闭方发送最后的ACK之后需要等待2MSLMaximum Segment Lifetime才能彻底释放连接。一是为了保证最后的ACK能到达对端如果丢了可以对端重发FIN触发我方重传ACK二是为了让本连接产生的所有报文在网络中自然消失防止影响后续使用相同四元组的新连接。实际生产环境中高并发短连接场景下TIME_WAIT会堆积得很厉害经常看到面试官追问怎么处理常见的答案有开启tcp_tw_reuse用于客户端、调整tcp_max_tw_buckets、或者从设计上改用长连接。2.2 VLAN与二层交换云网络虚拟化的基石概念VLAN的题目相对简单主要是802.1Q的报文格式、VLAN ID的取值范围0-4095可用1-4094、Access口和Trunk口的行为差异。但我们要多想一层VLAN在传统网络里是二层隔离手段到了云网络时代租户数量远超4094个VLAN不够用了怎么办这就是后面VXLAN出现的核心动机也是笔试卷子里的隐藏考点。所以复习VLAN时不要孤立地背概念要把它放到“云网络如何演进”的逻辑链里理解VLAN做二层隔离 - 数量上限4094 - 租户业务需要大二层网络 - VXLAN用24位VNI扩展到1600万。我把这套逻辑线说清楚笔试只要见到VLAN相关场景题你就能顺着这条线推导出答案。2.3 路由协议基础OSPF与BGP在云网络中的角色校招笔试卷对路由协议的考察不会特别深但OSPF区域划分、DR/BDR选举、BGP报文类型Open/Update/Keepalive/Notification、BGP在数据中心网络中的角色这些还算高频。有经验的考生会注意到一个趋势近几年云厂商对BGP的重视程度越来越高因为云网络里要做云专线、混合云、租户自定义路由通告全都依赖BGP与客户侧互通。我对准备这个板块的建议是把BGP的状态机Idle - Connect - Active - OpenSent - OpenConfirm - Established捋一遍再把iBGP和eBGP的区别、IBGP水平分割规则搞清楚应付校招绰绰有余。不建议在这块死抠太偏的细节比如BGP路径属性里的Originator_ID这种笔试很少涉及性价比不高。2.4 高频记忆点速查表知识点核心要点云网络中的实际场景TCP三次握手SYN、SYNACK、ACK确认双端收发能力客户端与网关建立连接TCP拥塞控制慢启动、拥塞避免、快重传、快恢复调控云存储数据迁移带宽TIME_WAIT2MSL等待保证ACK可达与报文消逝高并发短连接导致端口耗尽802.1Q VLAN4字节Tag12位VID单租户二层隔离VXLAN24位VNIUDP封装4789端口Overlay网络租户隔离OSPF链路状态路由协议区域划分VPC内自愈组网BGP路径矢量协议TCP 179端口专线接入、租户路由通告3. 云网络核心技术Overlay、VXLAN与SDN一网打尽3.1 为什么一定要引入Overlay网络这是面试官最爱问的“拔高题”也是校招试卷里真正考出水平的地方。传统网络依靠VLAN做二层隔离最多4094个大规模公有云根本不够用。更要命的是物理网络拓扑往往是三层架构而租户虚拟机之间的通信要求二层互通同子网广播、MAC地址学习如果每次创建VPC都去物理交换机上配置VLAN和端口交付周期从分钟级变成天级根本没法做云。Overlay网络的思路是在现有物理网络上叠加一层虚拟网络把租户的报文封装在物理网络传输的格式里通过VXLAN、GRE这类隧道技术在IP网络上传输。虚拟机根本感知不到物理网络的存在它看到的是一张独立的、属于自己的虚拟化网络。这就相当于在现成的公路网络上加了一层“空中飞行通道”载着租户的包裹直接越过地面拥堵。3.2 VXLAN报文封装细节从内到外逐层拆包VXLAN相关题目几乎必考而最经典的题目就是“画一个VXLAN封装格式说明各字段含义”。答题思路要清晰按从内到外的顺序展开原始报文虚拟机发出的以太网帧包含源/目的MAC、源/目的IP、四层头与载荷。VXLAN封装时先加一个8字节的VXLAN头核心字段是24位的VNIVXLAN Network Identifier用来标识租户VPC这就是支持1600万租户的关键然后加上UDP头目的端口默认4789最后在外面加一个新的IP头和一个新的MAC头这个外层IP是物理网络中源和目的VTEPVXLAN Tunnel End Point的IP地址。我建议你答题时顺便说明一下MAC地址学习过程。当虚拟机A要发数据给同VPC的虚拟机B时VTEP-A在VNI对应的转发表里查B的MAC地址如果没查到就做广播通过组播或头端复制送到所有VTEPVTEP-B应答后VTEP-A就学习到“B的MAC VNI VTEP-B的IP”这条转发项。考试时把这个过程写清楚面试官会认为你是真懂VXLAN的而不只是背了格式。3.3 SDN控制平面与数据平面分离SDN在笔试里的考察点比较固定一是OpenFlow协议的基本工作流程二是SDN控制器与OpenStack Neutron、OVSDB的配合方式。答题时抓住核心思想传统网络的路由决策分散在各台设备上SDN把决策逻辑集中到控制器底层交换机/OVS只负责按流表项转发。一个常见的场景题是这样用户在云控制台创建了一个VPC和子网点击确认后OpenStack Neutron通过消息队列通知SDN控制器SDN控制器计算出该租户需要的网络资源然后通过OpenFlow或OVSDB协议将对应的流表下发到所有涉及的虚拟交换机上。这里有一个容易踩坑的点很多同学把SDN理解为“用软件控制网络”这种说法太模糊。面试官想听的是“逻辑控制与转发分离、集中式控制、开放接口、网络可编程”这四个特征。答题时围绕这四个特征展开基本能稳拿分。4. 操作系统与网络编程Linux网络栈是云网络的主战场4.1 Linux协议栈收发流程一个包从网卡到应用要走多远云网络开发绕不开Linux笔试和面试里Linux网络相关题目占比不低。我见过的高频题有描述一个数据包从物理网卡到用户态进程的完整过程什么是内核协议栈、什么是用户态协议栈socket、bind、listen、accept的底层流程。这类题要有“分层讲述”的意识网卡收到报文 - DMA拷贝到内核环形缓冲区 - 触发硬中断 - ksoftirqd处理软中断 - 协议栈逐层剥头L2/L3/L4 - 放入对应socket接收队列 - 唤醒用户态进程 - recvfrom拷贝到用户缓冲区。这里有一个拓展考点越来越流行为什么云网络场景下要引入DPDK用户态转发原因无非三点中断开销大、内核协议栈处理路径长、内存拷贝多。DPDK通过轮询模式、大页内存、用户态驱动绕过内核协议栈包处理性能从几百万PPS提升到上千万PPS。笔试试卷如果考到“云网络为什么需要高性能用户态网关”这几个点就是核心答案。4.2 网络namespaceVPC隔离的底层机制网络namespace是理解云网络隔离的钥匙腾讯、阿里、网易的云网络笔试卷都爱考。一个网络namespace拥有独立的网络协议栈、路由表、iptables规则和网络设备虚拟机或者容器就运行在各自的namespace里彼此天然隔离。同一台物理机上两个不同租户的虚拟机即使IP地址相同、MAC地址相同也不会冲突。看题的时候只要理解“namespace就是一份独立的网络环境”很多隔离类问题都能迎刃而解。4.3 负载均衡核心算法从轮询到一致性哈希云网络开发岗位必问负载均衡笔试里通常以选择题和简答题出现。把几类核心算法横向对比列出来方便记忆算法优点缺点适用场景轮询实现简单不考虑后端差异后端能力一致的场景加权轮询可调后端权重静态配置不适应动态变化后端性能差异明显的场景最少连接动态感知连接数连接数不一定反映真实负载长连接服务一致性哈希增加/减少节点影响范围小可能导致负载不均缓存类服务顺便说一句云厂商的负载均衡SLB/LB产品在实现上通常还会加一层比如四层LB用DPDK收包、按五元组哈希选后端、使用conntrack维护会话表七层LB要处理HTTP头、cookie、websocket升级等。校招笔试对这些架构细节不会深挖但把算法比较答透已经能超过大部分候选人。5. 编程题与代码架构用通用模板解云网络场景算法题5.1 手撕代码云网络笔试中的高频算法类型网易这份笔试卷的编程题不算特别难但带有明显的网络色彩常见的题型有字符串处理解析CIDR如12.34.56.0/24判断两个网段是否有交集合并网段。图论基础给一个网络拓扑节点和边求最短路径、判断连通性这类题对应路由计算。哈希与统计一组IP访问日志统计访问次数TopN。贪心/动态规划比如分配IP池使得可用地址最多。我建议准备时重点刷LeetCode上与之相关的题。如果要推荐具体题号数组类必刷11题“盛最多水的容器”、双指针类、图论里的中等难度题足够。核心不是刷难题而是能把常见算法快速迁移到云网络场景比如看到“合并区间”就联想到“合并CIDR网段”看到“岛屿数量”就联想到“网络故障域划分”。5.2 云网络场景Python代码架构模板笔试不一定考写完整工程代码但现实中云网络团队确实需要一套可维护的Python代码架构。我之前实践过一个比较通用的模板适合配置管理、运维脚本、拓扑计算这类项目你面试时也可以作为项目经验讲核心思路是分层结构configs放配置文件utils放公共工具IP转换、日志、时间戳services放业务逻辑路由计算、VLAN分配、VNI管理models放数据模型租户、VPC、Subnetapi层提供命令行或HTTP接口。目录结构大致如下project/ ├── configs/ │ └── settings.ini ├── models/ │ ├── __init__.py │ ├── vpc.py │ └── subnet.py ├── services/ │ ├── __init__.py │ ├── ipam.py │ └── route_calculator.py ├── utils/ │ ├── __init__.py │ ├── ip_tools.py │ └── logger.py ├── api/ │ └── cli.py └── tests/一个小例子IP地址转换成整数的工具函数在云网络场景中非常常用因为IP分配和管理本质上是在处理整数区间import ipaddress def ip_to_int(ip: str) - int: return int(ipaddress.ip_address(ip)) def int_to_ip(num: int) - str: return str(ipaddress.ip_address(num)) def is_cidr_overlap(cidr_a: str, cidr_b: str) - bool: net_a ipaddress.ip_network(cidr_a, strictFalse) net_b ipaddress.ip_network(cidr_b, strictFalse) return net_a.overlaps(net_b) if __name__ __main__: print(is_cidr_overlap(10.0.0.0/24, 10.0.0.128/25)) print(is_cidr_overlap(10.0.1.0/24, 10.0.2.0/24))笔试现场如果用Python写算法题记住几个提升印象分的细节用ipaddress库而不是手写正则代码中加入类型注解命名符合PEP8规范主入口写if__name__ __main__。这些不是硬性要求但能让面试官觉得你有工程素养而非裸考选手。6. 项目实战与学习路线从会做题到真正入门云网络6.1 三步学习路线基础、核心、实践我在很多社区分享里都提到过“云计算学习路线图”这里把它映射到云计算网络开发这个细分方向分三步走。第一步是夯实网络基础。用一到两周时间把TCP/IP协议栈过一遍推荐看《TCP/IP详解卷1》重点看IP分片、TCP状态机、拥塞控制三个章节。同时把《计算机网络自顶向下方法》当辅助教材避免陷入细节出不来。第二步是攻克云网络核心。VXLAN、OpenFlow、OVS、SDN控制器是核心关键词找一些白皮书和开源项目源码看。强烈推荐把Open vSwitchOVS源码编译一遍亲手创建几个netns用ovs连起来玩一玩ping通了再抓包看VXLAN封装这个过程比看十篇文章都有效。第三步是做项目实战。没有真实生产环境也可以自己搭实验环境两三个网段的虚拟机、一台安装Open vSwitch和Ryu控制器的服务器、用Mininet模拟拓扑。自己实现一个简单的二层转发应用再实现一个下发流表让主机互通的应用这个项目写到简历上比空洞地写“熟悉SDN”有说服力得多。6.2 校招项目实战建议三个方向任选如果你现在还没项目经历我给你三个可以快速启动、又能讲出亮点的方向方向一是基于OVS的租户隔离实验。用Mininet创建多主机拓扑给不同主机打上不同VLAN/VXLAN标签验证同租户通信、跨租户隔离记录抓包结果和流程图。方向二是写一个轻量级IP地址管理IPAM工具。实现IP段的增删改查、自动分配、冲突检测、释放回收用Python写一个命令行工具或简单Web API这一套就是云网络里地址管理模块的微缩版。方向三是模拟VPC路由器的数据包转发路径。给定一个VPC内的路由表和目的地址实现最长前缀匹配算法输出下一跳。这个方向既能体现算法能力又能体现对云网络核心概念的理解。6.3 常用资料和工具储备比较好的学习资料就下面几条RFC 7348VXLAN规范、Open vSwitch官方文档、OpenStack Neutron架构文档、《SDN软件定义网络》Kreutz等著。工具方面Wireshark抓包必会tcpdump命令行抓包必会熟悉ovs-vsctl、ovs-ofctl、ip netns、bridge等命令。这些工具校招笔试不会直接考但项目实战和面试追问环节很加分。7. 常见失分点与备考避坑清单7.1 四个最容易丢分的地方从我看到的校招笔试答卷情况来看失分一般集中在这四个地方。第一个是对协议细节一知半解。比如知道VXLAN是基于UDP封装但忘了目的端口是4789知道VNI是24位但不知道VNI和VLAN ID的区别。解决办法是拿真实报文逐层抓包看而不是只记表格。第二个是场景题缺乏整体思维。遇到“从VM到VM的完整数据路径”这类题很多同学只看L2或只看L3忽略路由查询、ARP广播、安全组、NAT的存在。正确的答题习惯是列出所有可能参与的网络组件按数据流向逐层推演宁可多写不多写错。第三个是算法题忽略边界条件。IP地址转整数时忘记判断非法输入CIDR合并没考虑子网嵌套。我的建议是写题之前先想测试用例尤其是空输入、最大最小值、包含关系这几种能帮你避开绝大多数扣分点。第四个是代码风格和可读性差。很多同学笔试写的代码没有类型注解、没有函数拆分、一个main函数几十行即使逻辑对了分数也上不去。把代码写清楚字迹或排版整理清爽这是白送的印象分。7.2 笔试临场策略与时间分配结合校招笔试的时间限制我建议的时间分配策略是选择题和填空题控制在30分钟以内这些是知识积累题不会就是不会不要恋战简答题每道控制在8到10分钟答出关键架构和流程即可不要过度展开编程题留40分钟左右先写核心函数保证主流程跑通再做边界优化。如果三道编程题中有明显偏难的一道果断放到最后先把能拿的分稳住。顺便提一个只有老手才懂的小技巧做简答题时尽量画关键路径的箭头图或分步列表阅卷时信息提取速度快比大段文字描述的得分率明显更高。校招笔试卷的阅卷时间很短你替阅卷人节省时间阅卷人就会对你有好感。8. 面试官视角从笔试到面试云网络岗位到底想要什么样的人最后再从出题人和面试官的角度聊聊。笔试只是第一关但它的考察结果确实能筛掉一大部分人。云网络岗位的面试官真正想找的人是“有完整的网络知识体系、有动手调试能力、有遇到问题能自己定位解决的能力”的人。因此如果你笔试通过了接下来面试时被追问的往往就是笔试里的场景题——VXLAN封装里那个UDP校验和到底怎么算的、跨宿主机通信时ARP请求怎么被抑制和代理、VPC路由表最长前缀匹配的代码怎么优化。这些问题都是笔试内容的延伸。所以不要抱着“应付笔试”的心态去准备你要相信笔试考的就是团队实际工作需要的核心知识。把每道题吃透一次校招复习下来相当于系统学了一遍云网络的核心课程这是很划算的投入。我个人在实际操作中的体会是面云网络这个方向比刷多少道题更重要的是真机环境里亲手配置一次OVS、亲手抓包看一次VXLAN头、亲手踩一遍KVM虚拟机网络不通的坑。这些经验笔试不一定直接考但它们让你在答任何题目时都有画面感能答出只有做过的人才会写的细节而这种细节才真正让你从几百份考卷里被记住。笔试只是门槛动手能力才是走远的关键。
返回列表