当前位置: 首页 > news >正文

面试:计算机网络

一、网络分层与URL流程

1. 模型掌握
  • TCP/IP四层模型

    层级功能 & 协议
    应用层提供应用接口(HTTP、DNS、FTP)
    传输层端到端传输(TCP可靠、UDP快速)
    网络层路由与寻址(IP、ICMP)
    网络接口层链路传输(以太网、WiFi,含物理层+数据链路层)
  • OSI七层(辅助理解,对比记忆):物理层→数据链路层→网络层→传输层→会话层→表示层→应用层(重点记前四层与TCP/IP的对应)。

2. DNS执行原理
  • 流程:本地缓存(浏览器→系统)→ 本地DNS服务器(递归查询)→ 根服务器→顶级域名服务器→权威域名服务器(迭代查询)→ 返回IP。
  • 协议选择:解析用 UDP(速度快,域名查询数据量小);区域传送(主从DNS同步数据)用 TCP(可靠,数据量大)。
3. 浏览器输入网址的过程(高频题,按步骤答):
  1. DNS解析:域名→IP(如上流程)。
  2. TCP连接:三次握手(SYN→SYN+ACK→ACK)建立连接。
  3. HTTP请求:发送请求报文(方法、URL、请求头、请求体)。
  4. 服务器响应:返回响应报文(状态码、响应头、响应体)。
  5. 资源加载:解析HTML,请求CSS/JS/图片等静态资源(长连接下复用TCP连接)。

二、TCP/UDP

1. TCP与UDP的区别
维度TCP(如文件下载)UDP(如视频通话)
连接性面向连接(三次握手)无连接(直接发)
可靠性可靠(确认、重传、排序)不可靠(丢包不管)
传输单位字节流(无边界,有序)数据报(有边界,无序)
拥塞控制有(慢启动、拥塞避免)
2. 三次握手 & 四次挥手
  • 三次握手(建立连接)

    • 客户端→服务端:SYN(同步序列号,seq=x)
    • 服务端→客户端:SYN+ACK(seq=y,ack=x+1)
    • 客户端→服务端:ACK(ack=y+1)
      为什么三次? 双向确认“双方能发能收”:若两次,服务端无法确认客户端是否能接收自己的SYN+ACK(比如客户端的ACK丢包,服务端会一直重发)。
  • 四次挥手(关闭连接)

    • 主动方→被动方:FIN(seq=u,不再发数据)
    • 被动方→主动方:ACK(ack=u+1,先确认,可能还在发数据)
    • 被动方→主动方:FIN(seq=v,自己也不发了)
    • 主动方→被动方:ACK(ack=v+1)
      为什么四次? 被动方收到FIN后,可能还有未发完的数据,需先ACK确认,再发自己的FIN,故分两步;而三次握手是“同步序列号”,可合并SYN和ACK。
3. TCP可靠传输的机制
  • 序列号+确认应答:保证数据有序、不丢包。
  • 超时重传:未收到ACK则重发。
  • 滑动窗口:流量控制(接收方告知窗口大小,避免对方处理不过来)。
  • 拥塞控制:慢启动、拥塞避免(避免网络拥塞)。
  • 校验和:检测报文是否损坏。
4. 长连接与短连接
  • 短连接:一次HTTP请求-响应后,立即关闭TCP连接(HTTP/1.0默认)。
  • 长连接:TCP连接复用,可发多次HTTP请求-响应(HTTP/1.1默认,通过 Connection: keep-alive 维持)。

三、HTTP及扩展

1. HTTP与HTTPS的区别
维度HTTPHTTPS
传输明文(易窃听、篡改)SSL/TLS加密(安全)
端口80443
性能无加密开销,速度快握手耗时长,需解密
证书需CA签发的数字证书(防冒充)
2. HTTP版本(1.0→1.1→2.0)
  • 1.0:默认短连接,每次请求新建TCP,效率低。
  • 1.1:默认长连接(keep-alive),管线化(批量发请求,但仍有 队头阻塞:一个请求卡壳,后续请求也卡)。
  • 2.0:二进制帧、多路复用(同一连接并行发请求,解决队头阻塞)、头部压缩(HPACK)、服务器推送。
    迭代原因:解决性能瓶颈(如1.1的连接复用但队头阻塞,2.0优化传输效率)。
3. WebSocket
  • 是什么:基于HTTP握手的全双工协议(客户端和服务端可双向实时发消息,如聊天、股票行情)。
  • 核心:握手阶段用HTTP(Upgrade: websocket),之后脱离HTTP,复用TCP连接。
4. HTTPS的机制(SSL/TLS握手)(分步骤答):
  1. 客户端Hello:发支持的加密套件(如ECDHE)、随机数(Client Random)。
  2. 服务端Hello:选加密套件,发随机数(Server Random)、数字证书(含公钥、域名、CA签名)。
  3. 客户端验证证书:检查有效期、域名匹配、CA信任链,生成预主密钥,用服务端公钥加密发送(ECDHE则交换公钥参数,实现前向安全)。
  4. 服务端解密:用私钥解预主密钥,结合双方随机数,生成会话密钥(对称加密,速度快)。
  5. 后续通信:用会话密钥加密数据,双向传输。
5. Cookie、Session、Token(对比记忆):
类型存储位置特点 & 问题适用场景
Cookie客户端(浏览器)易被劫持,存储量小(4KB)简单会话标识(如SessionID)
Session服务端(内存/DB)依赖Cookie传ID,集群需共享(如Redis)服务端需存状态的场景
Token客户端(LocalStorage等)无状态,服务端验签名(如JWT)前后端分离、跨域场景
http://www.dtcms.com/a/349774.html

相关文章:

  • 《输赢》电视剧总结学习
  • 数据结构:红黑树(Red-Black Tree)
  • 电商秒杀场景下,深挖JVM内存泄漏与多线程死锁的解决方案
  • Python3.14安装包下载与保姆级图文安装教程!!
  • PyTorch实战(1)——深度学习概述
  • 【动态规划】309. 买卖股票的最佳时机含冷冻期及动态规划模板
  • webpack文件指纹:hash、chunkhash与contenthash详解
  • 基于 OpenCV 与 Mediapipe 的二头肌弯举追踪器构建指南:从环境搭建到实时计数的完整实现
  • 【CV】图像基本操作——①图像的IO操作
  • 系统架构设计师-计算机系统存储管理-页式、段氏、段页式模拟题
  • [系统架构设计师]专业英语(二十二)
  • Python爬虫第四课:selenium自动化
  • Qwt7.0-打造更美观高效的Qt开源绘图控件库
  • macbook国内源安装rust
  • leetcode LCR 012.寻找数组的中心下标
  • 如何在 Jenkins 中安装 Master 和 Slave 节点以优化 CI/CD 流程
  • init.environ.rc详解
  • CORS解决跨域问题的多个方案 - nginx站点配置 / thinkphp框架内置中间件 / 纯前端vue、vite的server.proxy代理
  • THM Rabbit Hole
  • 安全合规:AC(上网行为安全)--中
  • 【iOS】内存管理及部分Runtime复习
  • Next.js 15.5.0:探索 Turbopack Beta、稳定的 Node.js 中间件和 TypeScript 的改进
  • 力扣每日一题保持手感——498.对角线遍历
  • Node.js特训专栏-性能优化:24.V8引擎内存管理机制
  • ADQ3系列USB 3.2接口版本数字化仪隆重登场
  • 力扣82:删除排序链表中的重复元素Ⅱ
  • 十分钟速通集群
  • Linux 软件编程(十一)网络编程:TCP 机制与 HTTP 协议
  • DataEase+MaxKB:让BI再多个“A”
  • 从零开始学习单片机15