一、什么是计算机网络

计算机网络是指将地理位置不同的多台计算机及其外部设备,通过通信线路和网络设备连接起来,在网络协议和网络操作系统的管理下,实现资源共享和信息传递的系统。简单来说,网络解决的核心问题就是:让不同的设备能够互相通信,并共享资源。通俗一点就是解决不同设备之间的通信问题。

从使用者的角度看,我们每天访问网页、发送消息、观看视频,背后都依赖计算机网络完成数据的传输与交换。理解网络的基本原理,有助于排查连接问题、优化应用性能,也能为学习后端开发、运维和分布式系统打下基础。下面会讲到计算机网络的一些基本的知识点,以及一些常见的名词。

二、网络的分层模型

为了降低复杂度,网络通信被划分为多个层次,每一层只关注自己的职责,并通过接口与相邻层交互。常见的分层模型有两种:OSI 七层模型和 TCP/IP 四层模型。

OSI 七层TCP/IP 四层主要职责典型协议
应用层应用层为应用程序提供网络服务HTTP、DNS、FTP、SMTP
表示层应用层数据格式转换、加密与压缩TLS、JPEG、ASCII
会话层应用层建立、管理和终止会话RPC、NetBIOS
传输层传输层端到端的数据传输与可靠性控制TCP、UDP
网络层网络层逻辑寻址与路由选择IP、ICMP、ARP
数据链路层网络接口层相邻节点间的帧传输与差错检测Ethernet、PPP
物理层网络接口层比特流的传输与物理介质双绞线、光纤、Wi-Fi 射频

在实际工程中,TCP/IP 四层模型更贴近真实实现。数据发送时自上而下逐层封装,接收时自下而上逐层解封装,这就是常说的封装与解封装过程。

三、核心概念:IP、端口与协议

1. IP 地址

IP 地址用于在网络中唯一标识一台主机。IPv4 地址是 32 位,通常写成点分十进制形式,例如 192.168.1.10;IPv6 地址是 128 位,用于缓解 IPv4 地址枯竭问题。IP 地址分为公网地址和私有地址,私有地址需要经过 NAT 转换才能访问公网。

2. 端口

一台主机上可能同时运行多个网络程序,端口号用于区分不同的应用进程。端口范围是 0 到 65535,其中 0 到 1023 为知名端口,例如 HTTP 默认使用 80,HTTPS 默认使用 443,SSH 默认使用 22。

3. 协议

协议是通信双方共同遵守的规则集合,规定了数据的格式、传输顺序以及异常处理方式。只有双方遵循同一协议,数据才能被正确解析。

四、TCP 与 UDP

传输层最常用的两个协议是 TCP 和 UDP,它们面向不同的业务需求。

对比项TCPUDP
连接方式面向连接,需三次握手无连接,直接发送
可靠性可靠,有确认与重传机制不可靠,不保证送达
数据形式字节流数据报,保留消息边界
传输效率相对较低较高,开销小
典型场景网页、文件传输、数据库连接视频直播、在线游戏、DNS 查询

TCP 通过三次握手建立连接、四次挥手断开连接,并借助序号、确认应答、超时重传和滑动窗口实现可靠传输与流量控制。UDP 则把可靠性交给应用层自行处理,换取更低的延迟。

五、HTTP 与 DNS

1. HTTP

HTTP 是应用层最常见的协议,采用请求与响应模型。一次典型的网页访问流程大致如下:

  1. 浏览器解析域名,先查询本地缓存,再向 DNS 服务器发起解析请求。
  2. 拿到目标 IP 后,与服务器建立 TCP 连接,HTTPS 还需完成 TLS 握手。
  3. 浏览器发送 HTTP 请求,服务器返回状态码、响应头和响应体。
  4. 浏览器解析 HTML,继续请求 CSS、JavaScript、图片等资源并渲染页面。

2. DNS

DNS 负责把便于记忆的域名解析为 IP 地址,是一个分布式的层级数据库。解析过程通常经过浏览器缓存、操作系统缓存、本地 DNS 服务器,必要时再向根域名服务器、顶级域名服务器和权威域名服务器逐级查询。

六、一个简单的网络请求示例

下面用 Java 演示一次最基础的 HTTP GET 请求,帮助理解客户端与服务器之间的交互过程。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpGetDemo {
    public static void main(String[] args) throws Exception {
        URL url = new URL("https://example.com");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setConnectTimeout(5000);
        conn.setReadTimeout(5000);

        int status = conn.getResponseCode();
        System.out.println("状态码: " + status);

        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(conn.getInputStream(), "UTF-8"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } finally {
            conn.disconnect();
        }
    }
}

这段代码依次完成了建立连接、发送请求、读取响应和释放连接,正好对应前面提到的分层协作过程。

七、常见网络设备与拓扑

  • 交换机:工作在数据链路层,根据 MAC 地址转发数据帧,常用于局域网内部互联。
  • 路由器:工作在网络层,根据路由表选择转发路径,实现不同网络之间的通信。
  • 网关:连接不同协议或不同网络的设备,常作为内网访问外网的出口。
  • 防火墙:依据规则过滤进出流量,提供访问控制与安全防护。

常见的网络拓扑包括星型、总线型、环型和网状结构。现代企业网络多采用分层设计,分为接入层、汇聚层和核心层,以兼顾性能、可靠性与扩展性。

八、网络性能的关键指标

衡量网络质量通常关注以下几个指标:

  • 带宽:单位时间内可传输的数据量,常用 Mbps 或 Gbps 表示。
  • 时延:数据从发送端到接收端所需的时间,包括传输时延、传播时延、处理时延和排队时延。
  • 抖动:时延的变化程度,对实时音视频影响较大。
  • 丢包率:丢失数据包占总发送数据包的比例,直接影响传输质量。

九、总结

计算机网络通过分层模型把复杂的通信过程拆解为清晰的职责边界,IP 负责寻址与路由,TCP 和 UDP 负责端到端传输,HTTP 与 DNS 等应用层协议则支撑起我们日常使用的各类服务。掌握这些基础概念后,可以进一步学习子网划分、路由协议、网络安全以及性能调优等进阶主题。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐