版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言网络编程高频面试题及详细答案(实战向)一、网络基础面试题1.简述OSI七层模型和TCP/IP四层模型,以及各层核心作用参考答案:日常开发中核心使用TCP/IP四层模型,OSI七层为理论标准,实际网络通信均以TCP/IP为准。TCP/IP四层模型:链路层:包含以太网、ARP、RARP协议,负责处理物理帧的收发、MAC地址寻址,完成数据在局域网内的传输,校验帧数据完整性。网络层:核心协议IP、ICMP、IGMP,负责跨网段寻址、路由转发,通过IP地址区分不同主机,实现数据从源主机到目标主机的路由选择。传输层:核心协议TCP、UDP,负责端到端的通信,区分主机上的不同进程(通过端口号),提供可靠/不可靠的数据传输服务。应用层:包含HTTP、HTTPS、FTP、SSH、DNS等协议,面向用户进程,定义应用数据的传输格式、交互规则,直接为应用程序提供网络服务。OSI七层在TCP/IP四层基础上,将应用层拆分为应用层、表示层、会话层,将链路层拆分为物理层、数据链路层,仅用于理论学习,工业界不直接使用。2.IP地址、端口号的作用,为什么需要端口号?参考答案:IP地址的核心作用是定位网络中的唯一主机,实现跨网络、跨网段的主机寻址,保证数据能送达目标设备。端口号是主机内进程的唯一标识,取值范围0-65535。其中0-1023为系统保留端口,1024-65535为用户可用端口。一台主机可以同时运行多个网络程序(浏览器、终端、文件传输工具等),仅靠IP地址只能找到主机,无法区分数据该交给哪个进程处理。端口号配合IP地址,实现了主机+进程的精准通信定位,是端到端通信的核心基础。3.大端字节序和小端字节序,网络字节序是什么?为什么需要字节序转换?参考答案:字节序是多字节数据在内存中的存储顺序:小端字节序:低字节数据存低内存地址,高字节数据存高内存地址,x86、ARM架构电脑默认使用小端。大端字节序:高字节数据存低内存地址,低字节数据存高内存地址。网络字节序固定为大端字节序。不同主机、不同CPU架构的字节序不统一,如果直接发送本机字节序数据,会导致接收端解析数据错乱、通信异常。因此网络编程中,所有需要网络传输的多字节数据(端口号、IP地址),必须统一转换为网络大端字节序。常用转换函数:htons、htonl、ntohs、ntohl,分别实现短整型、长整型的本机字节序与网络字节序互转。二、TCP核心面试题(高频重点)1.详细讲解TCP三次握手原理,为什么是三次不是两次?参考答案:TCP是面向连接的可靠传输协议,通信前必须通过三次握手建立专属连接,核心目的是双向确认收发能力正常、同步序列号。三次握手流程:第一次握手:客户端向服务端发送SYN报文,携带客户端初始序列号,客户端进入SYN_SENT状态。目的:验证客户端发送能力正常。第二次握手:服务端收到SYN报文后,回复SYN+ACK报文,携带服务端初始序列号,同时确认客户端序列号,服务端进入SYN_RCVD状态。目的:验证服务端接收、发送能力正常,客户端接收能力正常。第三次握手:客户端收到SYN+ACK报文后,回复ACK确认报文,客户端、服务端同时进入ESTABLISHED连接状态。目的:验证服务端的接收能力正常。为什么不能两次握手?两次握手只能保证客户端的收发能力正常,无法确认服务端的接收能力是否正常。最典型的场景:客户端失效的SYN报文延迟到达服务端,两次握手会让服务端直接建立连接、占用资源,但客户端早已断开,会造成服务端资源浪费。三次握手可以彻底规避这种无效连接问题,保证连接双向有效。2.详细讲解TCP四次挥手原理,为什么需要四次?参考答案:TCP连接是全双工通信,双方均可独立发送、接收数据,因此断开连接需要双向分别断开,无法一次性完成,需要四次挥手。四次挥手流程:第三次挥手:被动关闭方数据发送完毕后,发送FIN报文,告知主动方己方也无数据可发送,进入LAST_ACK状态。第四次挥手:主动关闭方收到FIN报文,回复ACK确认报文,等待超时后释放资源;被动方收到ACK报文,直接释放连接资源,连接彻底断开。核心原因:握手是同步连接,双方无数据传输,可合并报文;挥手是断开连接,被动方可能有残留数据需要传输,必须分两次回复确认和关闭,因此需要四次。参考答案:核心作用两点:保证被动方正常关闭:如果最后一次ACK报文丢失,被动方会重发FIN报文。主动方等待2MSL,可及时接收重发的FIN报文并重新发送ACK,避免被动方一直处于LAST_ACK状态、资源无法释放。清理网络残留报文:等待时长足够让本次连接的所有延迟、冗余报文在网络中彻底失效,避免新连接建立后,旧连接的残留报文干扰新数据传输。4.TCP粘包、拆包问题产生的原因及解决方案参考答案:TCP是流式协议,无数据边界,仅负责字节流传输,不区分数据包,因此会出现粘包、拆包现象。拆包原因:发送数据大于TCP缓冲区大小、大于MSS最大分段大小,系统会自动拆分数据分多次发送。粘包原因:发送数据量小,系统会合并多次小数据统一发送;接收方缓冲区未及时读取数据,后续数据叠加粘连。解决方案(工业常用四种):固定包长:所有数据包统一固定长度,不足部分补空字符,接收方按固定长度读取数据。实现简单,适配性差。尾部分隔符:数据包末尾添加自定义分隔符(如换行符、特殊符号),接收方根据分隔符拆分数据包。适合文本数据,二进制数据易冲突。头部定长+数据体:最常用方案,数据包头部固定4字节存储数据体长度,接收方先读头部获取长度,再读取对应长度的数据体,精准分包。协议封装:使用Protobuf、JSON、自定义结构体封装数据,自带数据边界,彻底规避粘包拆包。5.TCP如何保证传输可靠性?参考答案:TCP通过六大机制全方位保障数据可靠传输,无丢失、无重复、无错乱:序列号+确认应答:每个字节数据分配唯一序列号,保证数据有序、去重;接收方收到数据后返回ACK确认,告知发送方数据接收成功。超时重传:发送方发送数据后启动计时器,超时未收到ACK,自动重传数据,解决报文丢失问题。滑动窗口机制:实现流量控制,根据接收方缓冲区剩余空间,动态调整发送速率,避免发送过快导致接收方缓冲区溢出、数据丢失。拥塞控制:针对网络拥堵场景,通过慢启动、拥塞避免、快重传、快恢复算法,动态降低发送速率,防止网络过载丢包。校验和:收发双方均计算数据校验和,校验失败直接丢弃报文,保证数据完整性。连接管理:三次握手建立可靠连接,四次挥手正常释放连接,避免无效数据传输。三、UDP核心面试题1.UDP和TCP的核心区别,各自适用场景参考答案:对比维度TCPUDP连接特性面向连接,需握手建立连接无连接,无需建立连接,直接收发数据可靠性可靠传输,无丢失、无重复、有序不可靠传输,可能丢包、乱序传输效率头部开销大,校验、重传机制多,速率稍慢头部仅8字节,无冗余机制,传输速度快、延迟低数据边界流式数据,无边界,存在粘包拆包数据包模式,有完整数据边界,无粘包问题资源占用高,需维护连接状态、滑动窗口极低,无需维护连接状态适用场景:TCP:文件传输、网页访问、登录通信、支付传输等对可靠性要求极高,可接受轻微延迟的场景。UDP:直播、短视频、游戏、语音通话、DNS解析等对实时性要求高,少量丢包不影响业务的场景。2.UDP不可靠,为什么不全部用TCP?能否实现可靠UDP?参考答案:TCP的可靠性是牺牲延迟和速率换来的,重传、校验、拥塞控制机制会带来延迟,无法满足实时性业务需求,因此不能完全替代UDP。可以实现可靠UDP,原理是在UDP基础上,上层手动实现TCP的核心可靠机制:自定义序列号、ACK确认、超时重传、流量控制,保留UDP低延迟优势,同时保证数据可靠。常见应用场景:QUIC协议、游戏自定义通信协议。四、Socket编程核心面试题1.简述TCP服务端、客户端完整Socket编程流程参考答案:TCP服务端流程:socket():创建套接字文件描述符,指定TCP协议;setsockopt():可选,设置端口复用、缓冲区大小等参数;bind():绑定固定IP和端口,让客户端可以精准连接;listen():开启监听,设置最大未完成连接数;accept():阻塞等待客户端连接,成功后返回新的通信套接字;read()/write():通过新套接字收发数据;close():关闭通信套接字和监听套接字,释放资源。TCP客户端流程:socket():创建客户端套接字;connect():主动连接服务端IP和端口;read()/write():与服务端收发数据;close():关闭套接字,断开连接。2.bind函数的作用,为什么客户端一般不需要bind?参考答案:bind函数的核心作用是将套接字与固定的IP地址、端口号绑定,让该套接字独占指定端口,用于监听外部连接。服务端必须bind:服务端是被动连接方,必须固定端口,客户端才能通过固定地址和端口发起连接。客户端无需bind:客户端是主动连接方,系统会自动分配随机空闲端口作为临时通信端口,无需手动指定,既简化开发,又能避免端口冲突。如需固定客户端端口,也可手动调用bind绑定。3.listen函数第二个参数的含义参考答案:listen(intfd,intbacklog)中,backlog参数表示TCP未完成连接队列+已完成连接队列的最大总和。内核会维护两个队列:未完成连接队列:存放完成第一次握手,未完成三次握手的连接;已完成连接队列:存放三次握手完成、等待accept读取的连接。当队列满后,新的客户端连接会被拒绝,生产环境一般设置为5-20,无需过大。4.accept函数是阻塞的吗?返回值的意义参考答案:默认状态下accept是阻塞函数,如果没有客户端连接,程序会一直阻塞等待,不会向下执行。可通过设置非阻塞IO改为轮询获取连接。accept返回值是新的通信套接字文件描述符。监听套接字仅用于接收新连接,所有和客户端的数据收发,必须使用accept返回的新套接字,二者分工独立、互不干扰。五、IO模型与高并发面试题1.简述Linux五种IO模型的区别参考答案:网络编程核心IO模型共五种,适配不同并发场景:阻塞IO:默认模型,read/accept/write均阻塞,单线程只能处理一个连接,并发极低,仅适合简单测试程序。非阻塞IO:轮询模式,IO操作不阻塞,无数据时直接返回错误,需要循环轮询,CPU占用极高,极少单独使用。信号驱动IO:内核数据就绪后发送信号通知进程读取,开发复杂度高,网络编程基本不用。IO多路复用:单线程监听多个文件描述符,数据就绪后统一处理,支持高并发,是服务端主流模型,代表:select、poll、epoll。异步IO:内核全权完成IO读写操作,完成后通知进程,无需进程参与等待,并发性能最高,Linux下使用较少。2.select、poll、epoll的核心区别(超高频)参考答案:三者均为IO多路复用模型,核心差异在监听上限、遍历方式、效率、触发模式:监听文件描述符上限:select最大1024,无法修改;poll无上限,仅受系统资源限制;epoll无上限。检测就绪方式:select、poll每次调用都需要遍历所有监听的文件描述符,时间复杂度O(n);epoll内核维护就绪队列,仅遍历就绪fd,时间复杂度O(1)。触发模式:select、poll仅支持水平触发;epoll支持水平触发、边缘触发两种模式,边缘触发效率更高。拷贝开销:select每次调用需要重复拷贝fd集合,开销大;epoll仅初始化一次拷贝,后续无重复开销。总结:高并发场景优先使用epoll,低并发简单场景可使用select,poll基本被淘汰。3.水平触发和边缘触发的区别,边缘触发的注意事项参考答案:水平触发LT:只要文件描述符有未读取的数据,每次epoll_wait都会触发就绪事件,直到数据全部读取完毕。容错性高,编程简单,是epoll默认模式。边缘触发ET:仅在数据状态发生变化的瞬间触发一次事件,后续剩余数据不会再次触发,直到有新数据到来。边缘触发开发注意事项:必须将文件描述符设置为非阻塞模式;每次触发事件后,必须循环读取数据直至read返回-1、数据读取完毕,否则会造成数据残留、事件丢失。六、网络编程常见问题与故障排查1.什么是端口复用?作用是什么?如何设置?参考答案:核心作用:服务重启时,无需等待2MSL超时,解决端口被占用、服务启动失败的问题,大幅提升服务迭代效率。代码设置方式:在socket创建后、bind绑定前,通过setsockopt函数设置SO_REUSEADDR选项,即可开启端口复用。2.简述TCP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2月份班级思想动态报告(2篇)
- 2025全国执业兽医资格(水生动物类)考试题库及答案
- 2025实验室安全考试题库及答案下载
- 专题研究-机构行为2026年券商自营配置特点
- 高一德育教学设计:家校共育“同心圆”的构建与实践
- 2025新《安全生产法》试题及答案
- 2025医院环境卫生监测试题及答案
- 高中政治必修三第五课《我国的根本政治制度》一轮复习教学设计
- 2026 SICU导尿管相关尿路感染试题及答案
- 2025主管护师考试复习计划试题及答案
- 2026年新版预防未成年人犯罪法知识竞赛题库及参考答案
- 2026年水务集团招聘考试笔试试题及答案
- 2026年甘肃省酒泉市金塔县招聘社区工作者考试参考题库及答案解析
- 2026年云南云上云大数据产业发展有限公司及下属子公司第一次社会招聘(32人)笔试模拟试题及答案详解
- 冠状动脉粥样硬化性心脏病患者药物治疗管理路径专家共识
- 纺织厂安全生产管理制度
- 2026中国新能源电池技术研发行业市场现状趋势分析投资策略规划报告
- 2026秋沪教牛津版五年级上英语单词默写(默写)
- 苏教版六年级上册数学《比的意义》教学设计
- JJF(吉)106-2022 水分接收器校准规范
- 中药饮片调剂规范考核试题及答案
评论
0/150
提交评论