Android第三次面试总结(网络篇)

在计算机网络领域,网络模型是理解通信原理的基础框架。本文将详细解析 OSI 参考模型和 TCP/IP 模型的分层结构、核心功能及实际应用,并通过对比帮助读者建立完整的知识体系。

一、OSI 参考模型:七层架构的理论基石

OSI(开放系统互连)模型由 ISO 制定,通过七层结构定义了网络通信的标准流程:

1. 物理层(Physical Layer)

  • 核心功能:传输比特流,处理物理介质(电缆 / 光纤 / 无线)的电气特性
  • 关键设备:网卡、集线器、中继器
  • 技术要点:信号编码(如曼彻斯特编码)、接口标准(RJ45)
  • 核心功能:封装帧,实现相邻节点可靠传输
  • 关键协议:以太网协议、PPP 协议
  • 设备示例:交换机、网桥
  • MAC 地址:唯一标识网络设备的 48 位地址

3. 网络层(Network Layer)

  • 核心功能:路由选择与 IP 寻址
  • 关键协议:IP、ICMP、ARP
  • 设备示例:路由器
  • IP 地址:32 位(IPv4)或 128 位(IPv6)逻辑地址

4. 传输层(Transport Layer)

  • 功能:提供端到端的可靠通信,负责将上层数据分段并传输到目标主机,同时处理传输过程中的错误恢复和流量控制。传输层有两种主要的协议:TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)。
  • 协议
    • TCP:面向连接的、可靠的传输协议,提供了数据的有序传输、错误检测和重传机制,适用于对数据准确性要求较高的应用,如文件传输、网页浏览等。
    • UDP:无连接的、不可靠的传输协议,不保证数据的可靠传输,但具有较低的开销和较快的传输速度,适用于对实时性要求较高的应用,如视频流、音频流等。

5. 会话层(Session Layer)

  • 核心功能:会话管理(建立 / 维护 / 终止)
  • 典型协议:NetBIOS、RPC

6. 表示层(Presentation Layer)

  • 功能:负责数据的表示和转换,确保不同系统之间的数据能够正确理解和处理。它处理数据的加密、解密、压缩、解压缩等操作。
  • 协议:常见的表示层协议有 SSL/TLS(Secure Sockets Layer/Transport Layer Security)协议,用于实现数据的加密传输。

7. 应用层(Application Layer)

  • 核心功能:直接服务用户应用
  • 常见协议
    • HTTP(网页浏览)
    • FTP(文件传输)
    • SMTP(邮件发送)
    • DNS(域名解析)

二、TCP/IP 模型:互联网的实际标准

TCP/IP 模型采用四层结构,是互联网通信的事实标准:

1. 网络接口层(Network Interface Layer)

  • 对应 OSI:物理层 + 数据链路层
  • 功能扩展:支持多种物理网络(以太网 / Wi-Fi/PPP)

2. 网络层(Internet Layer)

  • 核心协议:IP 协议(IPv4/IPv6)
  • 配套协议:ICMP(错误报告)、ARP(地址解析)

3. 传输层(Transport Layer)

  • 协议选择
    • TCP(可靠传输)
    • UDP(实时通信)

4. 应用层(Application Layer)

  • 协议演进
    • 传统协议:HTTP 1.1、FTP
    • 现代协议:HTTP/2、QUIC

三、模型对比:理论与实践的碰撞

对比维度 OSI 参考模型 TCP/IP 模型
层次数量 7 层 4 层
设计理念 理论导向,严格分层 实践导向,注重互联
协议独立性 支持多种协议栈 绑定 TCP/IP 协议族
应用场景 教学与理论研究 互联网实际部署
优缺点 结构清晰但实现复杂 高效实用但层次模糊

四、实际应用案例

场景:用户访问网页的数据流

  1. 应用层:浏览器发送 HTTP 请求
  2. 传输层:TCP 建立连接并分段数据
  3. 网络层:IP 选择路由,ICMP 处理错误
  4. 数据链路层:交换机根据 MAC 地址转发帧
  5. 物理层:光信号通过光纤传输

TCP 三次握手与四次挥手详解

一、三次握手(建立连接)

TCP 是面向连接的协议,通过三次握手建立可靠连接,过程如下:

步骤 1:客户端发送 SYN 包

  • 标志位:SYN=1,ACK=0
  • 序列号:seq=x
  • 含义:客户端请求建立连接,初始化序列号为 x

步骤 2:服务器发送 SYN+ACK 包

  • 标志位:SYN=1,ACK=1
  • 序列号:seq=y
  • 确认号:ack=x+1
  • 含义:服务器确认客户端请求,并同步自己的序列号

步骤 3:客户端发送 ACK 包

  • 标志位:ACK=1
  • 序列号:seq=x+1
  • 确认号:ack=y+1
  • 含义:客户端确认服务器的同步,连接建立完成

状态转换

XML 复制代码
客户端                服务器
  |                    |
  |    SYN (seq=x)    |
  |------------------->|
  |                    |  SYN+ACK (seq=y, ack=x+1)
  |<-------------------|
  |    ACK (seq=x+1)   |
  |------------------->|
  |  [连接建立]        |
二、四次挥手(终止连接)

TCP 连接终止需要四次挥手,确保数据完整传输:

步骤 1:客户端发送 FIN 包

  • 标志位:FIN=1,ACK=1
  • 序列号:seq=u
  • 确认号:ack=v
  • 含义:客户端请求关闭写通道

步骤 2:服务器发送 ACK 包

  • 标志位:ACK=1
  • 序列号:seq=v
  • 确认号:ack=u+1
  • 含义:服务器确认客户端关闭请求,继续处理剩余数据

步骤 3:服务器发送 FIN 包

  • 标志位:FIN=1,ACK=1
  • 序列号:seq=w
  • 确认号:ack=u+1
  • 含义:服务器关闭写通道,通知客户端终止连接

步骤 4:客户端发送 ACK 包

  • 标志位:ACK=1
  • 序列号:seq=u+1
  • 确认号:ack=w+1
  • 含义:客户端确认服务器关闭,连接完全终止

状态转换

XML 复制代码
客户端                服务器
  |                    |
  |    FIN (seq=u)    |
  |------------------->|
  |                    |  ACK (ack=u+1)
  |<-------------------|
  |                    |  FIN (seq=w)
  |<-------------------|
  |    ACK (ack=w+1)   |
  |------------------->|
  |  [连接关闭]        |
三、常见问题解析

Q1:为什么三次握手是必要的?

  • 防止历史连接(如延迟的 SYN 包)被错误处理
  • 实现双方序列号同步

Q2:四次挥手的原因?

  • 服务器可能有未发送完的数据,需要单独确认
  • 客户端和服务器的关闭操作是异步的

Q3:为什么需要 TIME_WAIT 状态?

  • 确保最后一个 ACK 到达服务器
  • 清除网络中所有旧数据包
  • 避免新旧连接混淆

Q4:如何优化 TIME_WAIT?

  • 调整内核参数(如 net.ipv4.tcp_tw_reuse)
  • 使用长连接(如 HTTP Keep-Alive)
四、总结对比
阶段 操作次数 核心目的 关键标志
三次握手 3 次 建立可靠连接 SYN, ACK
四次挥手 4 次 优雅终止连接 FIN, ACK
关键机制 - 序列号同步、半关闭、2MSL 等待 -

SSL/TLS 协议

定义与背景
  • SSL(Secure Sockets Layer):是网景公司(Netscape)在 20 世纪 90 年代开发的一种用于保障网络通信安全的协议,主要目的是在互联网上提供数据加密和身份验证功能,防止数据在传输过程中被窃取或篡改。
  • TLS(Transport Layer Security):是 SSL 的后续版本,由 IETF(Internet Engineering Task Force)标准化。TLS 在 SSL 的基础上进行了改进和增强,提供了更高的安全性和更好的性能,目前已经逐渐取代了 SSL。
主要功能
  • 数据加密:通过对称加密算法(如 AES)对传输的数据进行加密,确保数据在传输过程中即使被截获,攻击者也无法获取其中的敏感信息。
  • 身份验证:使用非对称加密算法(如 RSA)对服务器和客户端的身份进行验证,确保通信双方的身份真实可靠。例如,服务器会向客户端发送自己的数字证书,客户端通过验证证书来确认服务器的身份。
  • 完整性验证:通过消息认证码(MAC)等技术对传输的数据进行完整性验证,确保数据在传输过程中没有被篡改。

SSL/TLS 核心工作流程

1. 握手阶段(Handshake Protocol)

目标:协商加密参数、验证服务器身份、生成会话密钥。

  • ClientHello

    客户端发送支持的 TLS 版本、加密套件列表(如 ECDHE+AES256+SHA384)、随机数(ClientRandom)。

  • ServerHello

    服务器选择最高版本协议、加密套件、返回随机数(ServerRandom)和数字证书(含公钥)。

  • 证书验证

    客户端通过 CA 信任链验证服务器证书有效性(域名匹配、有效期、签名合法性)。

  • 密钥交换

    • 客户端生成预主密钥(PreMasterSecret),用服务器公钥加密后发送。
    • 双方通过伪随机函数(PRF)混合 ClientRandom、ServerRandom、PreMasterSecret,生成主密钥(MasterSecret)。
  • 会话密钥生成

    主密钥进一步派生出会话密钥(加密密钥、MAC 密钥),用于后续通信。

2. 加密通信阶段(Record Protocol)

目标:使用对称加密保护数据传输。

  • 数据加密

    客户端和服务器用会话密钥加密应用层数据(如 HTTP 请求 / 响应)。

  • 完整性验证

    每条消息附加 HMAC(基于密钥的哈希),防止篡改或重放攻击。

  • 压缩(可选)

    对加密后的数据进行压缩(现代 TLS 默认禁用)。

3. 连接终止(Connection Closure)
  • 关闭通知

    任意一方发送close_notify警报,对方确认后断开连接。

  • 密钥销毁

    会话密钥随连接关闭失效,下次通信需重新协商。

关键技术

  • 非对称加密(RSA/ECDH):安全传输预主密钥。
  • 对称加密(AES/ChaCha20):高效加密大量数据。
  • 数字证书:通过 CA 机构绑定服务器公钥与身份。
  • HMAC:确保数据完整性和真实性。

简化版流程

  1. 客户端发起加密请求(Hello)。
  2. 服务器响应并出示证书。
  3. 客户端验证证书,生成临时密钥并用服务器公钥加密传输。
  4. 双方生成会话密钥,开始加密通信。
  5. 通信结束后,安全关闭连接。

HTTPS 协议

定义与背景
  • HTTPS(Hypertext Transfer Protocol Secure)是在 HTTP 协议的基础上加入了 SSL/TLS 协议,通过加密和身份验证机制,为 HTTP 数据传输提供了安全性保障。HTTPS 在 URL 中使用 https:// 前缀,默认端口号为 443。
主要作用
  • 保护用户隐私:在用户与网站进行数据交互时,如登录、支付等操作,HTTPS 可以防止用户的敏感信息(如用户名、密码、银行卡号等)被窃取。
  • 防止数据篡改:确保传输的数据在到达目的地之前没有被中间人篡改,保证数据的完整性。
  • 增强网站可信度:使用 HTTPS 的网站会在浏览器地址栏显示安全锁标志,向用户表明该网站是经过身份验证的,增强用户对网站的信任。
工作过程
  1. 客户端发起请求 :客户端在浏览器中输入 https:// 开头的 URL,向服务器发起 HTTPS 请求。
  2. SSL/TLS 握手:客户端和服务器进行 SSL/TLS 握手,协商加密算法、验证身份并生成会话密钥。
  3. 数据传输:双方使用会话密钥对 HTTP 数据进行加密和解密,完成数据的安全传输。
  4. 连接关闭:数据传输完成后,关闭 SSL/TLS 连接。

核心加密算法分类

SSL/TLS 通过非对称加密对称加密哈希与 HMAC三大类算法协同工作,保障通信安全。

1. 非对称加密算法(密钥交换与身份验证)
  • 作用:安全传输临时密钥,验证服务器身份。
  • 常见算法
    • RSA
      • 原理:基于大数分解难题(两个大素数乘积的因数分解)。
      • 应用:加密 PreMasterSecret,数字证书签名。
      • 弱点:计算效率低,密钥长度需≥2048 位(推荐 3072 位)。
    • ECC(椭圆曲线加密)
      • 原理:基于椭圆曲线离散对数问题。
      • 优势:相同安全强度下密钥更短(256 位 ECC ≈ 3072 位 RSA),计算速度快。
      • 应用:ECDHE 密钥交换(如 ECDHE-ECDSA)。
    • DH(Diffie-Hellman)
      • 原理:通过公开参数协商共享密钥,中间人无法推导出密钥。
      • 变种:DHE(临时 DH,每次会话生成新密钥)、ECDHE(椭圆曲线 DH)。
2. 对称加密算法(数据加密)
  • 作用:高效加密传输数据。
  • 常见算法
    • AES(高级加密标准)
      • 分组密码,支持 128/192/256 位密钥。
      • 模式:GCM(认证加密,提供完整性验证)、CBC(需配合 HMAC)。
      • 应用:主流加密套件如 AES-256-GCM。
    • ChaCha20
      • 流密码,性能优于 AES,适合移动端。
      • 常与 Poly1305 结合(ChaCha20-Poly1305)。
    • 3DES
      • 已过时,被 AES 取代,安全性弱于现代算法。
3. 哈希与 HMAC 算法(完整性与真实性)
  • 哈希算法
    • SHA-256/SHA-384
      • 生成固定长度摘要,用于数字证书签名和 HMAC。
    • SHA-1
      • 已被破解,禁止用于 TLS 1.3 及以上。
  • HMAC(基于密钥的哈希)
    • 公式:HMAC (key, data) = H (key XOR opad || H (key XOR ipad || data))
    • 作用:验证数据完整性,防止篡改和重放攻击。

二、密钥交换与协商流程

ECDHE-RSA-AES256-GCM-SHA384套件为例:

  1. 客户端 生成随机数ClientRandom,发送支持的套件列表。
  2. 服务器 选择套件,返回ServerRandom、证书(含 RSA 公钥)。
  3. 客户端 验证证书,生成PreMasterSecret,用RSA 公钥加密后发送。
  4. 双方 通过ClientRandom + ServerRandom + PreMasterSecret,结合 **PRF(伪随机函数)** 生成MasterSecret
  5. MasterSecret派生出会话密钥(加密密钥、HMAC 密钥),用于后续通信。

三、数字证书与签名算法

  • 证书结构
    • 包含服务器公钥、域名、有效期、CA 签名。
    • 签名算法
      • SHA-256 + RSA(如 sha256WithRSAEncryption)
      • SHA-384 + ECDSA(如 sha384WithECDSAEncryption)
  • 验证流程
    客户端用 CA 公钥解密证书签名,比对哈希值确认证书未被篡改。

四、现代加密套件推荐

套件名称 密钥交换 对称加密 HMAC 算法 安全性等级
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 ECDHE-ECDSA AES-256-GCM SHA-384
TLS_AES_256_GCM_SHA384 AES-GCM-SIV AES-256-GCM SHA-384 最高(TLS 1.3)
TLS_CHACHA20_POLY1305_SHA256 X25519(ECDH) ChaCha20-Poly1305 SHA-256

五、为什么需要多种算法?

  1. 非对称加密解决 "密钥交换" 问题,但速度慢。
  2. 对称加密解决 "数据加密" 效率问题,但需安全共享密钥。
  3. 哈希与 HMAC确保数据完整性和真实性。
  4. 数字证书通过 CA 信任链验证服务器身份,防止中间人攻击。

六、注意事项

  • 避免弱算法:禁用 MD5、SHA-1、3DES、RSA 密钥长度<2048 位。
  • 前向保密(FS):优先使用 ECDHE/DHE,确保旧会话密钥泄露不影响新通信。
  • TLS 1.3 优化:减少握手延迟(0-RTT),强制使用 FS,淘汰过时算法。

总结:SSL/TLS 是互联网安全的基础设施,通过分层加密、身份验证和完整性保护,在不安全的网络中构建可信通信通道,其持续演进(如 TLS 1.3)不断提升用户体验与安全性。

感谢观看!!!

相关推荐
Lee川11 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
Lee川14 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i16 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有16 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有17 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫17 小时前
Looper.loop() 循环机制
面试
AAA梅狸猫18 小时前
Handler基本概念
面试
Wect18 小时前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼19 小时前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼19 小时前
Next.js 企业级落地
前端·javascript·面试