网络常见面试题
1、TCP与UDP的区别对比维度TCPUDP传输方式基于数据流基于数据报连接性需要建立连接点对点不需要建立连接支持一对多可靠性高可靠保证数据安全、无丢失、无差错、按序到达不保证送达不保证内容正确机制三次握手、四次挥手、流量控制、拥塞控制、出错重传无上述机制边界保护无边界存在粘包现象有边界不会粘包传输速率相对较慢快典型场景文件传输、网页浏览、邮件视频直播、DNS查询、VoIP如何用 UDP 实现可靠传输模拟的功能实现方式保证数据顺序添加序列号接收端按序号重组保证数据正确增加数据签名与验签如校验和、CRC、MD5保证数据送达要求接收方应答确认ACK并对应答做校验丢失重传发送方启动超时重传机制未收到 ACK 则重发2、高可靠通信含义指传输时数据无差错、无丢失、无失序、按时到达或故障的可靠通知。3、粘包含义以及如何解决3.1 粘包含义维度说明定义发送方发送的若干数据包到达接收方时粘成一包后一包的头紧接着前一包的尾发生位置接收方的接收缓冲区主要原因接收方未及时读取数据堆积在缓冲区次要原因发送方 Nagle 算法将小包拼成大包发送能否在传输层解决❌ 不能只能在应用层解决可能现象一次读取多个完整包或读取到半个包3.2 解决粘包问题解决方法原理优点缺点格式化数据特殊分隔符每条数据有固定的开始符和结束符简单易行需确保数据内部不包含开始/结束符发送长度常用数据前4位或其他固定长度表示数据长度按长度截取通用、可靠实现稍复杂推荐方案发送长度头部加长度字段3.3 补充说明协议是否有粘包原因TCP✅ 有基于数据流无边界UDP❌ 无基于数据报有边界保护SCTP❌ 无基于数据报有边界保护4、OSI七层协议模型并简述各层的功能层级名称主要功能1物理层负责传输比特流定义物理连接的特性2数据链路层提供可靠的数据传输处理帧的传输和错误检测3网络层负责数据包的路由和转发实现不同网络之间的通信4传输层提供端到端的数据传输确保数据可靠传输处理数据分段和重组5会话层建立、管理和终止会话连接处理会话层的控制和同步6表示层处理数据的格式和编码确保数据在不同系统间的兼容性7应用层提供用户接口和网络服务实现特定应用程序的功能5、TCP判断异常断电方法原理说明超时检测设置套接字超时时间超时未收到数据则认为连接异常使用setsockopt设置SO_RCVTIMEO或SO_SNDTIMEO心跳包机制定期发送心跳包若多次未收到响应则判定连接断开应用层实现如每隔 N 秒发送 Ping 包M 次无响应则断开TCP keepalive系统内置的保活机制定期发送探测包通过setsockopt设置SO_KEEPALIVE及相关参数注意TCP 异常断电时不会发送挥手数据包对方无法立即感知必须依靠超时或心跳检测来判定连接状态。6、二层交换机的工作原理维度说明基本作用局域网内数据转发通信前提两台主机连接同一台交换机转发依据MAC地址网口映射表主机通信步骤① 主机A获取主机B的IP → ② 判断是否在同一局域网 → ③ 主机A发送ARP广播请求MAC → ④ 交换机转发广播给所有主机 → ⑤ 主机B回应MAC → ⑥ 主机A构建数据包发送 → ⑦ 交换机查表转发给主机B网口映射表建立交换机根据数据包的源MAC地址和进入网口自动学习网口映射表用途根据目标MAC地址查找对应网口进行转发网口映射表更新按周期定时更新泛洪现象网线插拔/更换网口导致映射丢失交换机将数据包转发给所有主机7、简述两种并发服务器并说明其优缺点以及容易出现的问题对比维度多进程服务器多线程服务器并发方式每个进程独立处理客户端每个线程独立处理客户端优点• 进程隔离性好崩溃互不影响• 编程模型相对简单• 资源占用小• 切换开销小• 共享数据方便缺点• 进程占用空间大• 创建/销毁开销大• 回收进程资源麻烦• 线程间容易产生竞争问题• 需要锁等同步机制• 一个线程崩溃可能影响整个进程容易出现的问题僵尸进程、资源泄漏死锁、数据竞争、条件竞争对程序员要求一般较高8、简述五种IO模型并说明是同步操作还是异步操作I/O 模型同步/异步关键阻塞点数据处理方式阻塞 I/O同步整个 I/O 操作进程全程等待非阻塞 I/O同步数据复制阶段轮询 等待复制I/O 多路复用同步select / epoll 等待 数据复制多路监控仍由进程复制信号驱动 I/O同步数据复制阶段信号通知后进程复制数据异步 I/O异步无内核完成所有操作并通知9、路由器的工作原理步骤操作主体动作说明关键信息变化IP / MAC / 端口作用/说明①主机你的电脑请求 DNS 服务器获取百度 IP无IP/MAC转发变化域名 → IP 解析②主机判断是否在同一网段使用子网掩码对比自己的IP和百度IP决定是否需要经过网关③主机将数据包发送给网关路由器目标 MAC路由器 MAC目标 IP百度 IP不变源 IP主机内网 IP数据包发往网关④路由器网关执行 NAT 端口映射源 IP内网 IP →公网 IP源端口主机端口 →映射后端口实现私有IP ↔ 公网IP转换⑤路由器查询路由表并转发给下一跳路由目标 MAC下一跳路由器 MAC源 MAC当前路由器 MAC逐跳转发到目标网络⑥中间路由器依次查询路由表并转发每跳更新 MACIP 不变数据包到达百度服务器⑦你的路由器接收百度回应的数据包目标 IP路由器公网 IP目标端口映射后端口目标 MAC路由器 MAC外网回应到达网关⑧你的路由器查询 NAT 端口映射表转换回主机目标 IP公网 IP →主机内网 IP目标端口映射后端口 →主机端口目标 MAC路由器 MAC →主机 MAC将数据包正确送回内网主机