部分内容来源于 Java-Guide
基础
分层模型
OSI七层模型与TCP/IP四层模型分别是什么?
- OSI七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
- TCP/IP四层:网络接口层、网际层、传输层、应用层。
每层功能?
- 应用层:为用户提供服务
- 表示层:数据表示(转换、加解密、解压缩)
- 会话层:管理应用程序之间的会话
- 传输层:主机通信(TCP/UDP)
- 网络层:路由、寻址、IP
- 数据链路层:帧编码、纠错、MAC地址
- 物理层:网卡、光纤
计算机网络体系是怎么工作的?
三个核心原则:
- 分层解耦(分工协作)
- 每一层只干自己的活,不越界。比如传输层只关心端到端可靠性,不关心数据内容;应用层只关心业务逻辑,不关心数据怎么走光纤。
- 好处:各层独立升级(比如物理层从网线换光纤,应用层代码丝毫不用改)。
- 对等通信(虚拟通信)
- 虽然数据是物理上从上往下发、从下往上收,但逻辑上,发送端的“网络层”觉得是在和接收端的“网络层”直接沟通(实际上中间隔着下层)。这种“对等层之间的协议”决定了整个体系的稳定性。
- 封装与解封装(带信封装)
- 发送方:数据每往下一层,就包一层“信封”(头部 Header);
- 接收方:每往上一层,就拆一层“信封”。
整个体系就是“数据不动,协议动”——用户数据本身没变过,每一层都在它外面加上了自己的控制信息(头部),直到变成比特流传输出去。
网络层
- IP(Internet Protocol,网际协议):主要作用是定义数据包的格式、对数据包进行路由和寻址,以便它们可以跨网络传播并到达正确的目的地。
- ARP(Address Resolution Protocol,地址解析协议),用于在局域网(LAN)中进行主机通信,是一种用于将网络层的地址转换为数据链路层地址的重要网络协议。 在TCP/IP网络中,ARP的主要功能是将IP地址转换为MAC地址。
- ICMP(Internet Control Message Protocol,互联网控制报文协议):一种用于传输网络状态和错误消息的协议,常用于网络诊断和故障排除。例如,Ping 工具就使用了 ICMP 协议来测试网络连通性。
- NAT(Network Address Translation,网络地址转换协议):NAT 协议的应用场景如同它的名称——网络地址转换,应用于内部网到外部网的地址转换过程中。具体地说,在一个小的子网(局域网,LAN)内,各主机使用的是同一个 LAN 下的 IP 地址,但在该 LAN 以外,在广域网(WAN)中,需要一个统一的 IP 地址来标识该 LAN 在整个 Internet 上的位置。
传输层
TCP/UDP区别?
| 特性 | TCP | UDP |
|---|---|---|
| 连接性 | 面向连接 | 无连接 |
| 可靠性 | 可靠 | 不可靠(尽力而为) |
| 状态维护 | 有状态 | 无状态 |
| 传输效率 | 较低 | 较高 |
| 传输形式 | 面向字节流 | 面向数据报(报文) |
| 头部开销 | 20 - 60 字节 | 8 字节 |
| 通信模式 | 点对点(单播) | 单播、多播、广播 |
| 常见应用 | HTTP/HTTPS, FTP, SMTP, SSH | DNS, DHCP, SNMP, TFTP, VoIP, 视频流 |
TCP三次握手的过程? 客户端发送SYN → 服务端回复SYN+ACK → 客户端回复ACK,连接建立。
TCP四次挥手的过程? 主动方发送FIN → 被动方回复ACK → 被动方发送FIN → 主动方回复ACK。
TIME_WAIT状态的作用?
确保最后一个ACK能到达对方,让迟到的报文段有足够时间被丢弃。可通过net.ipv4.tcp_tw_reuse允许复用。
CLOSE_WAIT状态是什么?成因? 被动关闭方收到FIN后回复ACK进入的状态,表示等待应用层调用close()。堆积说明程序没正确关闭连接。
TCP 如何保证可靠传输?(重传/滑动窗口/拥塞控制)TCP 如何保证可靠传输?重传、滑动窗口与拥塞控制详解 | JavaGuide
应用层
应用层常见协议?基于TCP还是UDP?
- HTTP(Hypertext Transfer Protocol,超文本传输协议):是一种用于传输超文本和多媒体内容的应用层协议,主要为 Web 客户端与服务器之间的通信而设计。HTTP/1.x 和 HTTP/2 通常基于 TCP,HTTP/3 则运行在基于 UDP 的 QUIC 之上。
- SMTP(Simple Mail Transfer Protocol,简单邮件发送协议):基于 TCP 协议,是一种用于发送电子邮件的协议。注意 ⚠️:SMTP 协议只负责邮件的发送,而不是接收。要从邮件服务器接收邮件,需要使用 POP3 或 IMAP 协议。
- POP3/IMAP(邮件接收协议):基于 TCP 协议,两者都是负责邮件接收的协议。IMAP 协议是比 POP3 更新的协议,它在功能和性能上都更加强大。IMAP 支持邮件搜索、标记、分类、归档等高级功能,而且可以在多个设备之间同步邮件状态。几乎所有现代电子邮件客户端和服务器都支持 IMAP。
- FTP(File Transfer Protocol,文件传输协议):基于 TCP 协议,是一种用于在计算机之间传输文件的协议,可以屏蔽操作系统和文件存储方式。注意 ⚠️:FTP 是一种不安全的协议,因为它在传输过程中不会对数据进行加密。建议在传输敏感数据时使用更安全的协议,如 SFTP。
- Telnet(远程登陆协议):基于 TCP 协议,用于通过一个终端登陆到其他服务器。Telnet 协议的最大缺点之一是所有数据(包括用户名和密码)均以明文形式发送,这有潜在的安全风险。这就是为什么如今很少使用 Telnet,而是使用一种称为 SSH 的非常安全的网络传输协议的主要原因。
- SSH(Secure Shell Protocol,安全的网络传输协议):基于 TCP 协议,通过加密和认证机制实现安全的访问和文件传输等业务
- RTP(Real-time Transport Protocol,实时传输协议):通常基于 UDP 协议,但也支持 TCP 协议。它提供了端到端的实时传输数据的功能,但不包含资源预留存、不保证实时传输质量,这些功能由 WebRTC 实现。
- DNS(Domain Name System,域名管理系统):通常基于 UDP 协议(端口 53),用于解决域名和 IP 地址的映射问题。当响应数据过大或进行区域传送时会改用 TCP。
HTTP状态码分类? 1xx信息、2xx成功、3xx重定向、4xx客户端错误、5xx服务端错误。
长连接与短连接的区别? 短连接每次请求后断开;长连接保持连接复用(HTTP Keep-Alive),减少握手开销。
DNS解析的查询顺序? 浏览器缓存 → 系统Hosts文件 → 本地DNS服务器 → 根域/顶级域递归查询。
HTTPS与HTTP的区别? HTTPS在HTTP下加TLS/SSL层,提供加密传输和身份认证。
HTTP/1.1 和 HTTP/2.0 有什么区别?
- 多路复用(Multiplexing):HTTP/2.0 在同一连接上可以同时传输多个请求和响应(可以看作是 HTTP/1.1 中长链接的升级版本),互不干扰。HTTP/1.1 则使用串行方式,每个请求和响应都需要独立的连接,而浏览器为了控制资源会有 6-8 个 TCP 连接的限制。这使得 HTTP/2.0 在处理多个请求时更加高效,减少了网络延迟和提高了性能。
- 二进制帧(Binary Frames):HTTP/2.0 使用二进制帧进行数据传输,而 HTTP/1.1 则使用文本格式的报文。二进制帧更加紧凑和高效,减少了传输的数据量和带宽消耗。
- 队头阻塞:HTTP/2 引入了多路复用技术,允许多个请求和响应在单个 TCP 连接上并行交错传输,解决了 HTTP/1.1 应用层的队头阻塞问题,但 HTTP/2 依然受到 TCP 层队头阻塞的影响。
- 头部压缩(Header Compression):HTTP/1.1 支持
Body压缩,Header不支持压缩。HTTP/2.0 支持对Header压缩,使用了专门为Header压缩而设计的 HPACK 算法,减少了网络开销。 - 服务器推送(Server Push):HTTP/2.0 支持服务器推送,可以在客户端请求一个资源时,将其他相关资源一并推送给客户端,从而减少了客户端的请求次数和延迟。而 HTTP/1.1 需要客户端自己发送请求来获取相关资源。
HTTP请求从输入URL到页面展示的完整流程?
- 浏览器解析 URL 并检查缓存:浏览器解析 URL 的各组成部分,并检查 HTTP 缓存(强缓存、协商缓存)是否已有该资源的有效副本。
- DNS 解析:浏览器通过 DNS 协议(Hosts→本地DNS→递归查询),获取域名对应的 IP 地址。
- 建立传输连接:HTTP/1.1 和 HTTP/2 通常先通过 TCP 三次握手建立连接;HTTP/3 则建立基于 UDP 的 QUIC 连接。
- 建立安全通道(HTTPS):HTTP/1.1 和 HTTP/2 通常在 TCP 建连后进行 TLS 握手;HTTP/3 在 QUIC 建连过程中集成 TLS 1.3,完成密钥协商和服务器身份验证。
- 发送 HTTP 请求:浏览器在连接上向服务器发送 HTTP 请求报文,请求获取网页内容。
- 服务器处理并返回响应:服务器收到请求后处理并返回 HTTP 响应报文。
- 浏览器解析与渲染:浏览器解析 HTML、CSS,执行 JavaScript,并加载页面中引用的其他资源(图片、字体等)。
- 连接管理:页面加载完成后,连接根据 keep-alive 策略复用或关闭。
从OSI七层模型的角度看每一层做了什么:
第一阶段:发送请求(应用层 → 物理层)
- 应用层:浏览器解析出协议(HTTP/HTTPS)、域名(如
www.baidu.com)和路径。 - 表示层:对数据进行“翻译”和“加密”。如果是 HTTPS,在此层进行 TLS/SSL 握手和加解密;同时将字符编码统一(如 UTF-8)。
- 会话层:建立、管理、维持本次通信的会话连接(Session)。虽然 HTTP 是无状态的,但此层负责确保断线重连时能续传。
- 传输层:通过 DNS 解析得到目标 IP 后,选择 TCP 或 UDP 协议。将数据切成数据段(Segment),并封装上源端口和目标端口(80/443)。
- 网络层:添加 IP 头部(源 IP 和 目标 IP)。通过路由算法查询下一跳地址,决定数据包走哪条路到达服务器。
- 数据链路层:添加 MAC 地址(源 MAC 和下一跳网关的 MAC)。通过 ARP 协议(地址解析协议)获取下一跳路由器的物理地址。
- 物理层:将数据帧转化为二进制 0/1 的比特流,通过网线、光纤或 Wi-Fi 的电磁波发送出去。
第二阶段:接收响应(物理层 → 应用层)从下往上逐层拆包(剥洋葱):
- 物理层:接收电信号/光信号,还原成比特流。
- 数据链路层:检查 MAC 地址是否匹配,拆掉 MAC 头部,交由上层。
- 网络层:检查 IP 地址是否匹配,拆掉 IP 头部,交由上层。
- 传输层:拆掉 TCP 头部,回传 ACK 确认包(三次握手的最后一步),并把乱序的数据包重排好,交给应用。
- 会话/表示层:解密(HTTPS)、解压数据。
- 应用层:解析 HTTP 响应报文(状态码 200、HTML 内容),浏览器开始渲染引擎解析 HTML、加载 CSS/JS,最终呈现出你看到的网页。
分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
最后更新于 ,距今已过 46 天
部分内容可能已过时