面试:计算机网络

一、网络分层与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的区别
维度 HTTP HTTPS
传输 明文(易窃听、篡改) SSL/TLS加密(安全)
端口 80 443
性能 无加密开销,速度快 握手耗时长,需解密
证书 需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) 前后端分离、跨域场景