Socket 高频面试题及详细答案(真实面试版)_第1页
Socket 高频面试题及详细答案(真实面试版)_第2页
Socket 高频面试题及详细答案(真实面试版)_第3页
Socket 高频面试题及详细答案(真实面试版)_第4页
Socket 高频面试题及详细答案(真实面试版)_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Socket高频面试题及详细答案(真实面试版)一、基础概念类(入门必问)1、什么是Socket?它的本质是什么?Socket俗称套接字,是操作系统提供给应用程序的网络编程接口,也是应用层与传输层之间的通信桥梁。本质上Socket不是协议,而是一套读写网络数据流的文件描述符。操作系统把网络通信抽象成文件操作,应用程序可以像读写本地文件一样,通过Socket收发网络数据。简单说:IP地址定位主机,端口定位进程,Socket就是「IP+端口」的通信端点,两台主机通过Socket建立数据传输通道。2、Socket、TCP、HTTP三者的区别和关系?TCP:是传输层协议,负责可靠的数据传输,定义了数据传输的规则、校验、重传、拥塞控制等机制。Socket:是操作系统提供的编程接口,是调用TCP/UDP协议、实现网络通信的工具,依托传输层协议工作。HTTP:是应用层协议,基于TCP实现,定义了客户端和服务端数据交互的格式、请求响应规范,是业务层面的通信规则。层级关系:HTTP(应用层)→TCP(传输层)→Socket(编程接口)→网络链路3、Socket的核心组成是什么?一个完整的Socket通信端点由四元组组成:本机IP地址本机端口号远端IP地址远端端口号四元组唯一确定一条网络连接,只要任意一个参数不同,就是不同的连接。二、TCPSocket核心原理(面试重点)4、TCP三次握手在Socket编程中对应的流程?三次握手是TCP建立连接的核心过程,对应服务端、客户端Socket调用逻辑:服务端流程:创建Socket→bind绑定端口→listen监听→阻塞等待连接客户端流程:创建Socket→connect发起连接请求三次握手对应过程:客户端发送SYN报文(请求连接)服务端收到SYN,返回SYN+ACK(同意连接、确认收到请求)客户端收到响应,发送ACK,连接正式建立整个握手过程由操作系统内核完成,应用层只需要调用Socket对应接口即可。5、TCP四次挥手对应的Socket断开流程?TCP是全双工通信,读写通道独立,断开连接需要四次挥手,对应close操作:主动关闭方调用close,发送FIN报文,表示不再发送数据被动关闭方收到FIN,返回ACK,确认关闭写通道,此时被动方还能继续发数据被动方数据发送完毕,调用close,发送FIN报文主动方收到FIN,返回ACK,四次挥手完成,连接彻底断开6、为什么TCP建立连接是三次握手,断开是四次挥手?三次握手:建立连接时,读写通道可以同时确认,SYN和ACK可以合并发送,只需要三次就能确认双方收发能力正常。四次挥手:连接断开时,读写通道相互独立。一方关闭写通道后,另一方可能还有剩余数据要传输,不能直接关闭连接,必须分两次发送FIN和ACK,所以需要四次。核心作用两点:确保被动关闭方收到最后一次ACK,避免对方重发FIN报文导致连接残留等待链路中残留的过期报文全部失效,避免新连接收到旧连接的脏数据MSL是报文最大生存时间,2MSL可以保证网络中所有残留数据包彻底消失。三、TCP粘包拆包(最高频实战题)8、什么是TCP粘包和拆包?为什么会出现?核心前提:TCP是流式协议,无消息边界,只保证字节顺序和可靠传输,不区分业务数据包。粘包:多个独立的业务数据包,被TCP合并成一个数据包接收。原因是内核缓冲区缓存了数据,一次性读取多条数据。拆包:一个完整的业务数据包,被TCP拆分成多次接收。原因是数据包大于TCP缓冲区大小或MTU最大传输单元。UDP不会出现粘包拆包,因为UDP是面向报文的协议,有消息边界。9、TCP粘包拆包的解决方案?所有方案的核心:给数据流添加消息边界,让接收方可以区分完整数据包。常用四种方案:固定长度报文:每个数据包长度统一,接收方每次读取固定字节数,缺点是灵活性差、浪费流量。分隔符结尾:数据包末尾添加自定义分隔符(如换行符、特殊符号),接收方读到分隔符即判定为一条完整消息,适合文本数据。报文头+报文体(最常用):消息头部固定位置存储报文长度,接收方先读取头部获取长度,再读取对应长度的报文内容,适配所有场景。协议封装:使用成熟序列化协议(Protobuf、JSON、MessagePack),自带消息边界和解析规则。四、TCP与UDPSocket对比10、TCP和UDP的核心区别?各自适用场景?对比维度TCPUDP连接特性面向连接,需三次握手建立连接无连接,无需建立连接,直接发包可靠性可靠传输,重传、校验、有序、无丢失不可靠,无重传机制,可能丢包、乱序传输方式流式传输,无消息边界面向报文,有消息边界速度开销速度慢,头部开销大,机制复杂速度快,开销小,简单高效适用场景文件传输、接口请求、登录数据、支付数据(要求可靠)直播、语音通话、游戏对局、视频传输(要求实时)11、UDP如何实现可靠传输?UDP本身不可靠,如需可靠传输,需要应用层手动实现TCP机制,常见方案:添加报文序号,解决乱序问题接收方返回ACK确认报文发送方超时重传机制报文校验和校验,剔除错误数据常见应用:QUIC协议、游戏自定义通信协议,都是基于UDP实现的可靠传输。五、Socket实战问题与异常处理12、Socket中send/recv返回值代表什么?send返回值:实际成功写入内核缓冲区的字节数,不代表数据已经被对方接收。缓冲区满时会阻塞或返回异常。recv返回值:实际读取到的字节数。返回大于0:正常读取到数据返回0:对方主动关闭连接(四次挥手完成)返回-1:连接异常、中断或超时13、什么是半关闭状态?Socket如何实现半关闭?半关闭指一方关闭写通道,保留读通道,不再发送数据,但可以继续接收对方的数据。Socket中通过shutdown方法实现半关闭,区别于close:close:彻底关闭读写通道,释放Socket资源shutdown:可以单独关闭读或写通道,保留另一半通信能力适用场景:文件传输完毕后关闭写通道,等待对方返回接收结果。14、端口占用如何解决?SO_REUSEADDR作用?15、长连接和短连接的区别?适用场景?短连接:每次请求建立一次连接,请求完成立即断开。流程:建立连接→传输数据→关闭连接。优点:资源占用低,无需维护连接;缺点:频繁握手挥手,开销大。适用于接口请求、网页访问等低频、单次交互场景。长连接:连接建立后长期保持,多次数据传输复用同一个连接,空闲时通过心跳保活。优点:省去握手开销,传输效率高;缺点:占用服务端文件描述符资源。适用于即时通讯、直播、游戏、物联网设备等高频、持续交互场景。16、长连接为什么需要心跳包?心跳机制原理?网络链路不稳定、客户端异常离线、防火墙空闲断开等情况,会导致死连接(服务端保留无效连接,占用资源)。心跳机制原理:客户端/服务端定时发送极小的探测数据包,对方收到后回复响应。若连续多次无响应,则判定连接断开,主动关闭Socket释放资源。六、进阶面试题17、服务端如何支撑高并发Socket连接?传统BIO单线程单连接,无法支撑高并发,高并发场景均使用IO多路复用,主流方案:select:兼容全平台,最大文件描述符有限制,效率较低poll:无最大连接数限制,但依然存在轮询遍历开销epoll(Linux)/kqueue(Mac):事件驱动模式,只监听活跃连接,无轮询开销,支持十万、百万级并发连接,是Nginx、Redis、WebSocket高并发的核心配合线程池、连接池、心跳剔除无效连接,可实现高并发Socket服务。BIO(阻塞IO):同步阻塞,连接未就绪、数据未读完时线程一直阻塞,单线程只能处理一个连接,并发极差NIO(非阻塞IO):同步非阻塞,配合多路复用器,一个线程监听多个连接,只处理就绪的连接,高并发首选19、WebSocket和Socket的关系?Socket是底层通信接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论