大家好,这里是编程Cookbook。本文是计算机网络的补充内容,包括网络模型、DNS和从输入URL到网页呈现的过程等。
网络模型
计算机网络中常见的网络模型包括 TCP/IP 四层模型、OSI 七层模型 和 计算机网络五层模型。它们用于描述网络通信的不同层次及其职责。
- TCP/IP 四层模型:是最常用的实际网络通信模型。
- OSI 七层模型:是理论上的标准模型,提供更详细的划分。
- 五层模型:是对 TCP/IP 模型的改进版,加入物理层,使其更贴合实际。
1. TCP/IP 四层模型
TCP/IP 是实际应用最广泛的网络模型,分为 4 层:
层次 | 作用 | 常见协议 |
---|---|---|
应用层 | 负责进程间通信,提供特定应用的网络服务 | HTTP、HTTPS、FTP、SMTP、POP3、DNS、Telnet、SSH、SNMP |
传输层 | 端到端数据传输,提供可靠(TCP)或不可靠(UDP)传输 | TCP、UDP |
网络层 | 负责寻址和路由,决定数据包如何到达目标地址 | IP(IPv4、IPv6)、ICMP、ARP、RARP、NAT、BGP、OSPF |
网络接口层 | 负责数据帧的封装、传输和物理介质访问 | 以太网(Ethernet)、Wi-Fi(802.11)、PPP、HDLC、MAC |
2. OSI 七层模型
OSI 模型是理论上的标准模型,分为 7 层:
层次 | 作用 | 常见协议 |
---|---|---|
应用层 | 直接面向用户,提供应用服务 | HTTP、HTTPS、FTP、SMTP、POP3、DNS |
表示层 | 负责数据格式转换、加密、解密 | JPEG、GIF、MP3、TLS、ASCII、SSL |
会话层 | 负责建立、管理和终止会话 | NetBIOS、RPC、PPTP、SQL 会话管理 |
传输层 | 提供端到端通信、流量控制、可靠传输 | TCP、UDP |
网络层 | 负责 IP 地址寻址和路由选择 | IP(IPv4、IPv6)、ICMP、ARP、NAT、BGP |
数据链路层 | 负责数据帧的传输、介质访问控制 | Ethernet(以太网)、PPP、HDLC、MAC |
物理层 | 负责物理介质传输比特流 | 光纤、双绞线、电缆、无线电波 |
3. 计算机网络五层模型
计算机网络通常使用 五层协议栈,是 TCP/IP 四层模型的改进版(加入物理层):
层次 | 作用 | 常见协议 |
---|---|---|
应用层 | 提供网络应用服务 | HTTP、FTP、SMTP、DNS |
传输层 | 端到端数据传输,提供可靠/不可靠传输 | TCP、UDP |
网络层 | 负责寻址和路由 | IP、ICMP、ARP |
网络接口层 | 负责数据帧的封装、传输 | 以太网、Wi-Fi、PPP、MAC |
物理层 | 负责物理信号传输 | 光纤、双绞线、电缆、无线信号 |
其他
从输入URL到网页呈现的过程
当用户在浏览器地址栏输入网址(如 https://www.example.com
),到网页完全显示,整个过程大致经历如下步骤:
第一阶段:建立连接
- DNS 解析:浏览器向 DNS 服务器请求解析域名,获取服务器的 IP 地址。
- 建立 TCP 连接:浏览器与服务器建立 TCP 连接(默认 HTTP 端口 80,HTTPS 端口 443)。
第二阶段:请求与响应
- 发送 HTTP 请求:浏览器向服务器发送 HTTP 请求(如
GET /index.html
)。 - 服务器处理请求:服务器解析请求,查找所需资源。
- 服务器响应请求:服务器返回 HTML 文件给浏览器。
第三阶段:页面渲染
- 浏览器展示 HTML:浏览器解析 HTML,构建 DOM 树并渲染页面。
- 加载其他资源:浏览器发送额外请求获取 CSS、JS、图片等资源,完成页面渲染。
例子:用户访问清华大学网站的具体过程
- 浏览器向 DNS 请求解析
www.tsinghua.edu.cn
的 IP 地址。 - DNS 解析出清华大学服务器的 IP 地址。
- 浏览器与服务器建立 TCP 连接(默认端口 80)。
- 浏览器发送 HTTP 请求:
GET /chn/index.html
。 - 服务器返回
index.html
文件给浏览器。 - 释放 TCP 连接。
- 浏览器解析
index.html
,并显示网页内容。
DNS(域名系统)
DNS(Domain Name System,域名系统)用于将 域名(如www.example.com)解析为 IP 地址(如 192.168.1.1),使用户无需记住复杂的 IP 地址即可访问网站。域名解析:指把 域名映射成为IP地址
或把IP地址映射成域名
的过程。前者称为正向解析,后者称为反向解析。
域名服务器分类
域名服务器分为四类:
- 本地域名服务器
- 根域名服务器
- 顶级域名服务器
- 权限域名服务器
域名解析方式
域名解析有两种方式,递归查询
和递归与迭代相结合的查询
。
递归查询(几乎不用)
- 特点:本地域名服务器(LDNS)只向根域名服务器查询一次,后续查询由其他服务器递归完成。
- 过程:
- 本地主机向本地域名服务器(LDNS)发起查询。
- 本地域名服务器向根域名服务器查询。
- 根域名服务器递归查询其他服务器,直到获取最终 IP 地址。
- 根域名服务器返回解析结果给本地域名服务器。
- 本地域名服务器返回结果给本地主机。
- 缺点:根域名服务器负载过大,几乎不使用。
递归与迭代相结合的查询(常用)
-
特点:
- 主机 → 本地域名服务器:递归查询
- 本地域名服务器 → 其他服务器:迭代查询
-
过程:
- 递归查询:
- 本地主机向本地域名服务器(LDNS)查询域名 IP。
- 如果本地域名服务器没有缓存该 IP,则继续向根域名服务器查询,而不是让本地主机自己查询。
- 迭代查询:
- 根域名服务器返回可查询的顶级域名服务器(TLD 服务器)地址,而不是直接返回 IP。
- 本地域名服务器继续向 TLD 服务器查询。
- TLD 服务器返回权限域名服务器的地址,本地域名服务器继续查询。
- 权限域名服务器最终返回所查询域名的 IP 地址。
- 返回结果:
- 本地域名服务器获得 IP 后,返回给本地主机,完成解析。
- 递归查询:
对比
查询方式 | 过程 | 优缺点 |
---|---|---|
递归查询 | LDNS 只查一次,剩下的查询由其他服务器完成 | 负载大,几乎不用 |
递归 + 迭代 | 主机 → LDNS 递归,LDNS → 其他服务器 迭代 | 负载分散,实际使用 |
常用方式是递归与迭代结合的查询,既减少了客户端查询负担,又分散了服务器压力。
传输层协议
DNS 解析默认使用 UDP,因为速度快、消耗低、支持高并发。但在某些特殊情况下,会自动切换到 TCP 以保证数据完整性。
传输协议 | 特点 | 适用场景 |
---|---|---|
UDP | 快速,无连接,低资源消耗 | 绝大多数 DNS 查询 |
TCP | 可靠,保证数据完整 | 解析数据过大、区域传输、UDP 受限时 |
UDP 不可靠为什么 DNS 仍然使用 UDP?
1. UDP 的丢包率低,DNS 自带容错机制
- DNS 查询的数据包很小(通常 ≤ 512 字节),数据量小的 UDP 包 丢失率很低,且不容易被网络拥塞影响。
- 本地域名服务器会重试查询,如果没有收到响应,会自动 重新发送查询请求,直到获得正确的 IP 地址(通常是 2~3 次重试,超时则返回错误)。
2. 可靠性由应用层保证,而不是传输层
- 即使 UDP 可能丢包,DNS 也有重试机制,相当于在应用层实现了可靠性。
- 如果 DNS 解析失败(超时或未解析到 IP),浏览器或操作系统会重新请求另一个 DNS 服务器。
3. DNS 解析速度优先,不要求 100% 可靠
- DNS 查询是读多写少的操作,大部分查询都能在本地域名服务器的缓存中命中,减少外部查询次数。
- 即使丢失一次查询,也可以迅速重试,不影响用户体验。相比 TCP 建立连接的开销,UDP 仍然更高效。
CDN(内容分发网络)
CDN(Content Delivery Network,内容分发网络)是一种通过分布在多个地理位置的服务器集群来加速内容传输的网络架构。CDN的目的是通过将内容(如网页、图片、视频等)缓存到距离用户更近的服务器上,从而提高用户的访问速度,减轻源服务器的压力,降低延迟,提升网站的可靠性和可扩展性。
CDN的工作原理通常包括以下几个步骤:
- 缓存内容:CDN会将常用的内容缓存到多个边缘节点(即分布式的服务器)上,这些节点通常会部署在离用户地理位置较近的地方。
- 请求路由:当用户请求某个内容时,CDN会根据用户的地理位置、网络状况等因素,自动选择离用户最近的缓存节点来提供内容,从而减少数据传输的延迟。
- 源站回源:如果用户请求的内容在CDN的边缘节点中不存在或已过期,CDN会向源服务器请求内容并缓存下来,以备后续使用。
CDN广泛应用于网站加速、视频流媒体、电子商务、在线游戏等领域,能够有效提升网站的性能,尤其在全球范围内的内容分发和大流量的情况下,具有显著的优势。
IP 地址 VS MAC 地址
特性 | IP 地址 | MAC 地址 |
---|---|---|
层次 | 网络层 | 数据链路层 |
作用 | 定位和识别设备,确保数据能在不同网络之间传输 | 唯一标识网络设备,在局域网内进行通信 |
格式 | IPv4:四个十进制数,IPv6:八组十六进制数 | 六组十六进制数,通常以冒号分隔 |
是否可更改 | 可更改(静态或动态分配) | 不可更改,除非伪造 |
作用域 | 跨越多个网络(如广域网、局域网) | 仅限局域网 |
分配方式 | 静态或动态分配 | 硬件制造时分配 |
解释:
- 局域网(LAN):范围小、速度快、延迟低,适用于单一地点的设备连接,如家庭或办公室。
- 广域网(WAN):范围广、速度较慢、延迟高,适用于连接地理位置不同的局域网,如跨城市、跨国的企业网络或互联网。
IPv4 vs IPv6
特性 | IPv4 | IPv6 |
---|---|---|
地址长度 | 32位(约43亿个地址) | 128位(约340万亿个地址) |
地址表示 | 四个十进制数,格式为x.x.x.x | 八组16进制数,格式为xxxx:xxxx:xxxx:xxxx |
地址类型 | 单播、广播、多播 | 单播、任播、组播 |
路由表 | 需要较多的路由表项,复杂 | 更简化的路由机制 |
自动配置 | 依赖DHCP | 无状态自动配置(SLAAC) |
NAT | 需要NAT(地址转换) | 不需要NAT,使用公网地址 |
安全性 | 依赖IPsec | 内建IPsec,支持更好的安全功能 |
传输效率 | 由于头部复杂,相对较低 | 简化的头部结构,传输效率较高 |
IPv4和IPv6在功能上存在明显差异,IPv6的设计更加现代化,支持更大的地址空间、自动配置和更高效的路由管理。虽然IPv6可以解决IPv4的一些问题,但由于过渡期的存在,许多网络仍然同时运行IPv4和IPv6。
ARP VS RARP
特性 | ARP(地址解析协议) | RARP(反向地址解析协议) |
---|---|---|
功能 | 将IP地址映射为MAC地址 | 将MAC地址映射为IP地址 |
作用 | 用于设备在局域网中根据IP地址查找目标设备的MAC地址 | 用于设备根据MAC地址获取其IP地址 |
使用场景 | 设备通过ARP查询目标设备的MAC地址,以便进行数据通信 | 设备通过RARP获取自己的IP地址(传统上使用在无操作系统的设备上) |
协议类型 | 网络层(Layer 3)与数据链路层(Layer 2)之间的协议 | 数据链路层(Layer 2)与网络层(Layer 3)之间的协议 |
应用实例 | 局域网内计算机通过ARP发送数据包给其他设备 | 传统的无操作系统设备(如硬件路由器)通过RARP获得IP |
当前使用情况 | 广泛使用,作为TCP/IP协议栈的重要组成部分 | 现在已经被DHCP协议所取代,几乎不再使用 |
- ARP主要用于通过IP地址获取对应的MAC地址,广泛应用于局域网内设备间的通信。
- RARP则是通过MAC地址来查找对应的IP地址,最初用于一些无操作系统设备的自动配置,但由于它的局限性,现在已经基本被DHCP(动态主机配置协议)取代,后者提供了更灵活和更强大的自动配置功能。