20250114面试鸭特训营第22天

更多特训营笔记详见个人主页【面试鸭特训营】专栏

250114

1. TCP/IP 四层模型是什么?

  • TCP/IP四层模型是一个基于实际网络通信的分层协议模型,主要用于描述互联网通信协议的体系结构。
  • 它将网络通信过程分为四个层次,分别为:网络接口层、互联网层(网络层)、传输层、应用层。

网络接口层

  • 负责在计算机和网络硬件之间传输数据。
  • 负责在物理网络上发送和接受数据帧,包括以太网、Wi-Fi 等协议。
  • 典型协议
    • Ethernet(以太网)
    • PPP(点对点协议)
    • ARP(地址解析协议)

互联网层(网络层)

  • 负责将数据包从源地址传递到目标地址。
  • 通过 IP 协议提供数据包和路由的转发。
  • 实现不同网络之间的数据传输和路由选择。
  • 典型协议
    • IP(互联网协议)
      • IPv4(IP协议第4版)
      • IPv6(IP协议第6版)
    • ICMP(互联网控制消息协议)
    • IGMP(互联网组管理协议)

传输层

  • 负责在两个主机之间提供端到端的数据传输服务(通信服务)。
  • 负责数据的分段、传输和重组,确保数据可靠性。
  • 典型协议
    • TCP(传输控制协议)
      • 面向连接,提供可靠的数据传输。
    • UDP(用户数据报协议)
      • 面向无连接,提供快速但不可靠的数据传输。

应用层

  • 通过各种协议提供网络应用程序的功能。
  • 为用户提供应用程序接口,直接与用户交互,支持网络应用程序和服务的实现。
  • 典型协议
    • HTTP/HTTPS(超文本传输协议/安全超文本传输协议)
    • FTP(文件传输协议)
    • SMTP(简单邮件传输协议)
    • DNS(域名系统)
    • SSH(安全外壳协议)

分层的优点

  • 简化设计与实现
    • 通过将网络功能分解为不同的层,每一层只负责特定的任务,且只和相邻的上下层进行交互,简化了设计和实现的复杂性。
  • 模块化
    • 每一层可以独立发展和优化,不同层次之间通过标准接口记性通信,便于各层的更新和替换。
  • 互操作性
    • 明确定义每个层次之间的接口和协议,不同厂商或组织开发的网络设备和软件可以相互兼容,使得不同的网络设备和系统能够在不同的层次上进行无缝互操作,提升了网络的兼容性。
  • 故障隔离
    • 每个层次都有自己的错误检测、纠错和恢复机制,且分层结构能够帮助网络工程师定位问题所在的层次,从而更快地进行故障排除。

应用层主要包头信息和单位

  • 包头信息主要字段
    • HTTP:Host(目标主机)、User-Agent (客户端类型)、Content-Length (内容长度)等。
    • DNS:Transaciton ID (事务 ID )、Flags (标识符)、Query / Response (查询 / 标识响应)等。
  • 数据单位
    • 数据(Data)

传输层主要包头信息和单位

  • 包头信息主要字段
    • TCP:Source Port(源端口)、Destination Port (目的端口)、Sequence Number (序列号)、Acknowledgment Number (确认号)、Flags (控制标志)等。
    • UDP:Source Port(源端口)、Destination Port (目的端口)、Length (数据包长度)、Checksum (校验和)等。
  • 数据单位
    • 报文段(Segment)

网络层主要包头信息和单位

  • 包头信息主要字段
    • IP :Source IP Address(源 IP 地址)、Destination IP Address (目的 IP 地址)、TTL (生存时间)、Protocol (上层协议类型)等。
  • 数据单位
    • 数据包(Packet)

网络接口层主要包头信息和单位

  • 包头信息主要字段
    • 以太网 :Source MAC Address(源 MAC 地址)、Destination MAC Address (目的 MAC 地址)、Type (上层协议类型)等。
  • 数据单位
    • 帧(Frame)

2. Cookie、Session、Token 之间有什么区别?

  • 存储位置:存储在客户端(浏览器)。
  • 数据格式:键值对,最大大小约为4KB。
  • 生命周期
    • 会话Cookie:浏览器关闭后失效。
    • 持久Cookie:设置ExpiresMax-Age后可长期存储。
  • 安全性
    • 可设置HttpOnly标记,防止JavaScript访问。
    • 可设置Secure标记,仅通过HTTPS传输。
  • 作用域:可设置DomainPath限定适用范围。
  • 主要用途:
    • 存储用户偏好设置(如主题、语言)。
    • 保持用户登录状态、跟踪用户行为。
    • 保存会话标识符(如Session ID)以维持用户会话。

Session

  • 存储位置:数据存储在服务器端,客户端只存储一个Session ID(通常通过Cookie传递)。
  • 数据管理:会话数据存储在服务器内存或数据库中。
  • 生命周期:通常与用户会话绑定,用户关闭浏览器或Session超时后失效。
  • 安全性:比Cookie更安全,敏感数据不会暴露给客户端。
  • 依赖Cookie:通过Cookie传递Session ID,无Cookie时可通过URL参数传递。
  • 典型用途
    • 服务器端会话状态管理。
    • 存储用户的临时状态信息(如购物车、登录状态等)。

Token

  • 存储位置:通常存储在客户端(浏览器的本地存储或会话存储,也可以通过Cookie传递)。
  • 数据格式:常用 JWT(JSON Web Token) ,由Header、Payload和Signature组成。
  • 自包含性:Token自身包含认证信息,无需依赖服务器存储会话状态(即无状态)。
  • 安全性
    • 加密性:可签名或加密,防止篡改。
    • 不应直接暴露敏感信息。
  • 生命周期
    • Access Token(短生命周期)。
    • Refresh Token(用于刷新Access Token,有较长生命周期)。
  • 典型用途
    • 无状态认证和授权。
    • 分布式系统中的用户认证和授权。

表格对比

特性 Cookie Session Token
存储位置 客户端 (浏览器) 服务器端 (Session ID在客户端) 客户端 (可选:Cookie或LocalStorage)
存储数据 小量数据(4KB) 任意复杂数据 编码后的认证信息
状态管理 无状态 有状态 无状态
安全性 易被劫持 (需配合安全措施) 更安全 相对安全 (需保护Token不泄露)
适用场景 用于保存用户偏好设置、Session ID、记住登录状态等小型数据 小型数据存储、标识用户 客户端状态的简单存储和跟踪 用于需要存储用户状态的场景,比如购物车、短期登录会话 短期用户会话 服务器端的复杂状态管理 特别是需要存储大量会话数据时 分布式认证、API接口调用无状态的认证和授权 特别是在分布式和跨域环境下

3. 从网络角度来看,用户从输入网址到网页显示,期间发生了什么?

  1. 浏览器解析 URL
    • 浏览器会解析 URL ,根据请求信息生成对应的 HTTP 请求报文。
  2. DNS 解析
    • 请求需要知晓浏览器对应的 IP 地址才能通信。
    • 浏览器会先检查本地缓存、操作系统缓存、路由器缓存
      • 如果命中 IP 缓存,则直接使用。
      • 如果未命中 IP 缓存,浏览器向配置的 DNS 服务器发送查询请求, DNS 服务器递归查询,最终返回 IP 地址(如 192.0.2.1)。
  3. TCP 或 UDP
    • 浏览器会调用 Socket 库委托协议栈工作,根据指定的情况选择 TCP 或 UDP 。
    • 如果使用 TCP ,需要通过三次握手与服务端建立连接,然后才能发送数据。
    • 此时得到了封装了 HTTP 数据的 TCP 数据包。
  4. IP
    • 在 TCP 数据包的基础上,再封装源地址 IP 和目标地址 IP 等信息,得到网络包。
    • 有了 IP 就能在多个网络节点中确定数据包的传输路径,最终能找到目标服务器。
  5. MAC
    • 得到网络包之后,需要在 IP 头部的前面加上 MAC 头部,封装发送方 MAC 地址。
    • MAC 用来确保子网内设备两点之间的通信寻址(IP 是多个网络节点的传输寻址)。
  6. 网卡
    • 这时,网络包还是存储在内存中的二进制数据。
    • 网卡把二进制数据转换为电信号,通过网线进行传输。
  7. 交换机
    • 通过网线会连接到交换机,交换机是二层网络设备。
    • 交换机工作在 MAC 层,它会根据数据包中的 MAC 头找到另一个设备连接在交换机的哪个端口,然后传输。
    • 如果找不到对应的端口,则会向交换机上的除源端口外的所有端口广播。
  8. 路由器
    • 路由器是三层网络设备(包含 IP 层),也是用于进行转发。
    • 利用路由器,数据在不同网络节点之间转发,最后到达服务器。
  9. 层层验证
    • 服务器确认 MAC 地址匹配、 IP 地址匹配。
    • 如果是 TCP 协议,就看看序列号是否匹配,若匹配根据端口找到对应的监听进程,此时服务器上对应的应用就接收到了数据。
  10. 服务器处理
    • 服务器在收到请求后,处理响应的业务逻辑,生成 HTTP 响应。
    • 这期间可能涉及到读取数据库、访问文件系统等。
    • 最终会生成响应给客户端(一层层的封装 TCP 、 IP 、 MAC 等头部数据,得到最终传输的数据包),从网卡到交换机到路由器...
  11. 浏览器接收响应并渲染页面
    • 经过多个路由器的转发后,浏览器最终会接收到服务器响应的数据,进行页面渲染。
相关推荐
9号达人6 小时前
普通公司对账系统的现实困境与解决方案
java·后端·面试
程序员杰哥7 小时前
软件测试之压力测试详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·压力测试
勤劳打代码7 小时前
条分缕析 —— 通过 Demo 深入浅出 Provider 原理
flutter·面试·dart
努力学算法的蒟蒻7 小时前
day10(11.7)——leetcode面试经典150
面试
进击的野人8 小时前
JavaScript 中的数组映射方法与面向对象特性深度解析
javascript·面试
南山安8 小时前
以腾讯面试题深度剖析JavaScript:从数组map方法到面向对象本质
javascript·面试
橘颂TA9 小时前
【剑斩OFFER】算法的暴力美学——二分查找
算法·leetcode·面试·职场和发展·c/c++
吃着火锅x唱着歌18 小时前
LeetCode 1128.等价多米诺骨牌对的数量
算法·leetcode·职场和发展
java1234_小锋20 小时前
Spring事件监听的核心机制是什么?
java·spring·面试
小当家.10520 小时前
[LeetCode]Hot100系列.贪心总结+思想总结
算法·leetcode·职场和发展