• 面试官:当你在浏览器上输入一个url,回车之后发生了什么
  • 我:

    你在浏览器输入 URL 并回车:

    1. 解析 URL(协议、主机、路径等)
    2. 浏览器查找缓存(DNS、本地缓存、HTTP 缓存等)
    3. DNS 域名解析(将域名转换为 IP)
    4. 建立 TCP 连接(三次握手)
    5. 发起 HTTP 请求
    6. 服务器处理请求,返回响应(HTML 等)
    7. 浏览器解析渲染页面(HTML -> DOM、CSS、JS 执行)
    8. 页面展示出来
  • 面试官:TCP和UDP的区别

  • 我:

    • TCP 像打电话📞:你要接通对方,确保每句话听清楚。
    • UDP 像寄明信片📮:你写完直接发,收不收到不管,发的快。

    核心区别详解

    • 1️⃣ 连接机制

      • TCP 是面向连接的,通信前要建立连接(三次握手)。
      • UDP 是无连接的,直接发送,不需要握手。
    • 2️⃣ 是否可靠

    • TCP 保证可靠传输
      • 包含顺序控制
      • 有确认应答 ACK
      • 丢包重传(超时重传、滑动窗口)
      • 有拥塞控制
    • UDP 是尽力而为,不可靠
      • 不确认、不重传、不排序,收不到就丢了
      • 程序自己实现可靠性(如 QUIC 或 RTP)

    3️⃣ 传输效率

    • UDP 更轻便、快
      • 无连接开销、无状态
      • 适合实时性强的通信(如直播、语音、游戏)
    • TCP 更可靠
      • 适合要求数据不能出错的场景
  • 面试官:TCP的三次握手,必须三次吗,两次行不行

  • 我:

    步骤谁发出内容说明
    第一次客户端SYN=1客户端请求建立连接
    第二次服务端SYN=1, ACK=1服务端收到请求并同意连接
    第三次客户端ACK=1客户端确认服务端响应,连接建立完成

    🌟 场景类比:你和朋友打电话
    你 = 客户端(Client)
    朋友 = 服务端(Server)

    ✅ 如果用三次握手:
    你打电话过去,说:“喂,我想和你聊聊!”(SYN)
    → 表示你能说。

    朋友接到电话,回应说:“好的,我也能听见你,也能说话!”(SYN + ACK)
    → 表示他能听、能说。

    你回应:“我听到你了,咱开始聊吧!”(ACK)
    → 表示你能听到他,双向都通了,通信正式开始。

    ❌ 如果只用两次握手:
    你说:“我想聊聊”(SYN)
    朋友说:“好的,我能听到你,也能说话”(SYN + ACK)
    🚨 但是你没回应!
    这时候你可能没听到,或者你已经不想聊了(网络问题、掉线、退出)。
    但朋友误以为你要开始聊天,于是一直在等你说话……

  • 面试官:TCP的四次挥手

  • 我:

    TCP 是 全双工(双方都能同时收发数据),所以断开连接时,两边都需要分别关闭 自己的发送通道。
    因此需要两次 FIN + 两次 ACK,总共四次。

    客户端(Client) 服务端(Server)
    |—- FIN ——————->| (1)我数据发完了
    |<— ACK ———————| (2)收到,但我还有数据
    |<— FIN ———————| (3)我也发完了
    |—- ACK ——————->| (4)收到,连接关闭

  • 面试官:TCP的四层模型是什么

  • 我:
    层级名称功能简介对应协议举例对应 OSI 七层
    1网络接口层(或链路层)负责数据在物理网络中的传输,例如以太网、Wi-Fi、光纤等Ethernet、Wi-Fi、ARP、PPPOSI 的第1层(物理层)和第2层(数据链路层)
    2网络层(或网际层)实现网络之间的通信和寻址,提供数据包的路由功能IP、ICMP、ARP、RARPOSI 的第3层(网络层)
    3传输层提供端到端的通信服务(可靠或不可靠),负责数据的传输控制、重传、流控等TCP、UDPOSI 的第4层(传输层)
    4应用层提供应用程序之间的通信接口,如网页访问、邮件发送等HTTP、FTP、SMTP、DNS、SSH、Telnet 等OSI 的第5层~第7层(会话层、表示层、应用层)