从零开始理解网络是如何运作的——IP、DNS、TCP、HTTP、CDN……这些每天都在用的东西到底是什么。
专为非技术背景的同学设计 —— 不需要任何编程或运维基础。
在讨论任何技术细节之前,我们先搞清楚一个最基本的问题:当你打开一个网页时,究竟发生了什么?你的电脑是怎么和千里之外的服务器"对话"的?
想象一下:你的手机、电脑、公司的服务器、微信的服务器、淘宝的服务器……这些都是设备。而网络,就是把这些设备连在一起的"通道"——有线的(光纤、网线)和无线的(Wi-Fi、4G/5G)。通过这些通道,设备之间可以互相发送数据。
这其中有一个非常重要的角色:路由器(Router)。路由器就是网络的"交通指挥员",它的工作是决定数据包该往哪个方向走——就像路口的交通指示牌,告诉每个数据包"去北京的往左,去上海的往右"。
在网络上,每台设备都需要一个唯一的地址才能被找到。这个地址就是IP地址。
IPv4地址长这样:192.168.1.100——四段数字,每段0到255。为什么是255?因为每段实际上是一个8位的二进制数(11111111 = 255),4段共32位,所以IPv4总共能表示约43亿个不同地址。
| 公网IP | 私有IP | |
|---|---|---|
| 谁分配 | 运营商(电信/联通/移动) | 你家路由器自动分配 |
| 全球唯一? | 是的,全球只有这一个 | 不是,不同家庭可以重复使用 |
| 能从外网直接访问? | 可以 | 不能(需要通过NAT转换) |
| 典型例子 | 123.45.67.89 | 192.168.1.100 |
| 费用 | 通常需要购买/租赁 | 免费,路由器自带 |
IP地址是一串数字,很难记。所以就有了域名(Domain Name)——比如baidu.com、taobao.com。而DNS(Domain Name System,域名系统)就是把域名翻译成IP地址的系统,相当于互联网的电话簿。
当你在浏览器输入baidu.com时,背后发生的事情:
在网络的语境下,有两种基本角色:
发起请求的一方。你的浏览器、手机App、电脑上的微信,都是客户端。它的工作是"提问"——"给我这个网页""我要看这条消息"。
响应请求的一方。淘宝的服务器、微信的服务器、百度搜索引擎的服务器,都是服务端。它的工作是"回答"——"这是你要的网页""这是你要的消息"。
这个"请求-响应"模式(Request-Response)是互联网通信的最基本模型——永远是客户端先发请求,服务器再回复。服务器不能主动给客户端发消息(除了一些高级技术如WebSocket,但基本原理如此)。
协议(Protocol)就是通信双方约定的"对话规则"——数据用什么格式发、按什么顺序发、出现错误怎么处理。
打个比方:两个人打电话需要协议——"喂"表示开始通话,"你说完了吗"表示一个回合结束,"再见"表示通话结束。如果双方没有约定这些规则,通信就会混乱。
网络协议也是一样。互联网上有几十种协议,每种负责不同的事情,它们层层叠加,形成了一个"协议栈":
在互联网公司,你几乎每天都会听到这三个词。它们衡量的是"网络好不好"。
单位时间内能传多少数据,单位是 Mbps(兆比特每秒)或 Gbps。带宽越大,传得越快。就像水管越粗,水流越大。
家里的宽带 100Mbps = 每秒最多传 12.5MB 数据
数据从发送到接收需要多长时间,单位是 ms(毫秒,千分之一秒)。延迟越低,响应越快。就像快递需要几天送达。
本地机房延迟 1-5ms;同城 10-20ms;跨省 30-50ms;跨国 100-300ms
数据包在路上丢失的比例。网络拥堵、设备故障、信号干扰都可能导致丢包。丢包率越高,通信越不可靠。
正常有线网络丢包率 < 0.1%;Wi-Fi 可能到 1-5%;卫星网络更高
TCP(Transmission Control Protocol,传输控制协议)是互联网最重要的传输层协议。它保证数据完整、有序、不重复地从发送方到达接收方。
| 能力 | 什么意思 | 怎么做到的 |
|---|---|---|
| 可靠传输 | 发出去的数据,保证对方收到 | 每个数据包都有编号(序列号),接收方收到后发"确认"(ACK)。没收到确认就重发 |
| 有序到达 | 数据按发送顺序到达,不会乱 | 序列号机制让接收方可以按正确顺序重新排列数据 |
| 流量控制 | 发送方不会太快压垮接收方 | 接收方告诉发送方"我的缓冲区还剩多少空间"(滑动窗口) |
| 拥塞控制 | 不会往网络里塞太多数据 | 发送方根据丢包情况自动调整发送速度(慢启动、拥塞避免) |
TCP有个"兄弟"叫UDP(User Datagram Protocol,用户数据报协议)。它的理念完全相反——"发就发了,到不到我不管":
| TCP | UDP | |
|---|---|---|
| 连接 | 需要先建立连接(三次握手) | 不需要连接,直接发 |
| 可靠性 | 保证送达,自动重传 | 不保证,丢了就丢了 |
| 速度 | 较慢(有额外开销) | 快(没有额外开销) |
| 典型用途 | 网页、邮件、文件传输、聊天消息 | 视频通话、直播、在线游戏、DNS查询 |
HTTP(HyperText Transfer Protocol,超文本传输协议)是Web的基础协议。你在浏览器里看到的每一个网页,本质上都是通过HTTP从服务器传过来的。
HTTP的工作模型极其简单——客户端发请求(Request),服务器回响应(Response):
服务器返回的响应里有一个状态码,告诉你"请求结果如何":
| 范围 | 含义 | 常见例子 |
|---|---|---|
| 2xx 成功 | 一切正常 | 200 OK(请求成功)、201 Created(资源已创建) |
| 3xx 重定向 | "你要的东西搬走了" | 301 永久搬走、302 临时搬走、304 没变,用缓存 |
| 4xx 客户端错误 | "你发的东西有问题" | 400 请求格式错、401 请先登录、403 你没权限、404 找不到 |
| 5xx 服务端错误 | "服务器自己出问题了" | 500 服务器内部崩了、502 上游服务器出错、503 服务暂时不可用、504 上游超时 |
HTTP的数据是明文传输的——任何在中间环节的人(路由器、运营商、Wi-Fi提供者)都能看到你发了什么。HTTPS在HTTP的基础上加了一层TLS/SSL加密,把通信内容加密,这样中间人就只能看到"你在和谁通信"(IP和域名),但看不到"通信的具体内容"。
一台服务器上可能同时运行着几十个服务——网页服务、数据库服务、邮件服务、SSH远程管理……当数据包到达服务器时,它怎么知道这个包是给哪个服务的?答案就是端口(Port)。
如果IP地址是"哪栋楼",端口就是"哪个房间号"。端口号范围是0-65535:
| 范围 | 分类 | 常见例子 |
|---|---|---|
| 0-1023 | 知名端口 | 80=HTTP, 443=HTTPS, 22=SSH, 3306=MySQL, 6379=Redis |
| 1024-49151 | 注册端口 | 公司内部服务可以在这个范围里约定端口号 |
| 49152-65535 | 临时端口 | 你的浏览器连接服务器时,操作系统随机分配一个作为"源端口" |
假如你的网站服务器在北京,一个广东的用户访问你的网站时,数据需要跨越几千公里。如果每个用户都从北京服务器获取数据,不仅慢,而且北京的服务器很容易被挤爆。
CDN(Content Delivery Network,内容分发网络)就是解决这个问题的——它把网站的静态内容(图片、CSS、JS、视频)提前复制到全球各地的CDN节点上,让每个用户从离自己最近的节点获取数据。
当一个网站流量很大时,一台服务器扛不住——就像一家餐厅只有一个服务员,客人多了就得排队。解决方案是多部署几台服务器,然后在前端放一个负载均衡器(Load Balancer)——就像一个"门童",把进来的请求合理分配到多台后端服务器上。
常见的负载均衡工具有Nginx、HAProxy,以及云服务商提供的CLB/ALB(云负载均衡)。负载均衡器本身也会做健康检查——如果某台服务器挂了,它会自动跳过那台,把请求发给正常的服务器。
防火墙(Firewall)就是网络的一道"安检门"——它根据预设的规则,决定哪些流量可以通过,哪些被拦截。
防火墙规则通常基于"五元组"来判断:
| 攻击类型 | 攻击方式 | 防护思路 |
|---|---|---|
| DDoS | 用海量流量把服务器压垮 | CDN分散 + 流量清洗 + 限流 |
| SQL注入 | 在输入框里塞恶意数据库命令 | 参数化查询、输入校验 |
| XSS | 在网页中注入恶意脚本 | 输出编码、内容安全策略 |
| 中间人攻击 | 在通信途中窃听或篡改数据 | HTTPS加密、证书验证 |
打开淘宝、刷微信、看钉钉——你只需要登录一次,后面几天甚至几周都不用再输入密码。这是怎么做到的?答案就是Token(令牌)。
在讲Token之前,我们先思考一个问题:为什么需要"登录状态"?因为HTTP协议本身是"无状态"的——服务器每次收到请求,都不知道这个请求是谁发的、和上一个请求是不是同一个人。这就像一个餐厅服务员,每次你点一道菜,他都问"您是哪桌的来着?"
这是最老牌、也最成熟的做法:登录成功后,服务器生成一个Session(会话)——在服务器内存或数据库里记一条"张三已登录"的记录,然后给客户端发一个Session ID——一串随机字符。客户端把这个Session ID存在Cookie(浏览器里的一种小块数据存储空间)里,之后每次请求浏览器自动把Cookie带过去,服务器根据Session ID找到对应的用户信息。
Session + Cookie 的优缺点:优点是简单成熟、服务器可以随时"踢掉"一个用户(删除Session即可)。缺点是服务器需要存储所有用户的Session——当用户量达到几百万时,Session存储就成了负担。而且Session ID 存在 Cookie 里,Cookie 绑定了域名,在跨域场景(比如前后端分离的App)就不太好用。
为了解决 Session 方案的痛点,诞生了Token 认证。它的核心思想很简单:
eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoi5byg5LiJIn0.xQ6f_8JWT(JSON Web Token,读作"jot")是目前最主流的 Token 格式。一个 JWT 长这样,由三个部分组成,用点号分隔:
| 存储位置 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Cookie | 浏览器自动带、可设 HttpOnly 防JS读取(安全) | 有域名限制、大小限制(4KB) | 传统Web应用的Session ID |
| localStorage | 容量大(5MB)、跨标签页共享、永久存储 | JS可以读取(XSS攻击可能窃取Token) | SPA单页应用保存JWT |
| 内存(变量) | 最安全(关页面就没了) | 刷新页面就丢失,需要重新登录 | 高安全要求的场景 |
你可能有过这样的体验:关掉浏览器,第二天打开网页,还是登录状态。但Token通常有过期时间(比如15分钟)——这是怎么做到的?
这样设计的好处是:即使黑客截获了Access Token,它的有效期也很短,造成的损害有限。而Refresh Token只在"换新Token"时用一次,被截获的概率低得多。
生活中还有一个常见场景:你用"微信扫一扫"登录一个网站,或者你允许一个第三方App访问你的钉钉通讯录。这背后用的是OAuth 2.0——一个让用户授权第三方应用"代表你来访问某些数据"的协议。
OAuth 的本质是"你不把密码给第三方App,而是给它一张由你授权的临时通行证"。比如你想让一个日历App读取你的钉钉日程——不需要把你的钉钉密码告诉日历App,而是钉钉给你一个弹窗问"你是否允许日历App读取日程?",你点"同意"后,钉钉给日历App发一个Token,日历App用这个Token去读取你的日程。
在中级阶段我们知道TCP是"面向连接"的——通信前需要建立连接。这个建立连接的过程就叫三次握手(Three-Way Handshake)。
三次握手的核心原因是:网络可能延迟,旧的连接请求可能滞留在网络中延迟到达。如果是两次握手,一个滞后的旧SYN到达服务器后,服务器会错误地认为这是新连接请求并开始准备资源。三次握手通过最后的ACK确认,避免了这种情况。
关闭连接需要四次通信,因为TCP是全双工(两个方向独立传输)的——每个方向都需要独立关闭:
HTTPS之所以安全,是因为它在HTTP下面加了一层TLS(Transport Layer Security,传输层安全协议)。TLS的核心工作就是在客户端和服务器之间建立一条加密通道。
加密和解密用同一把钥匙。速度极快(几百MB/秒),但问题是——怎么把这个钥匙安全地告诉对方?你总不能在公开场合喊"我们的密码是123456"。
例子:AES-256-GCM(目前最主流的对称加密算法)
加密和解密用不同的钥匙——公钥公开(可以加密,但不能解密),私钥保密(可以解密)。慢(比对称加密慢几百倍),但解决了"安全传递钥匙"的问题。
例子:RSA、ECDHE(椭圆曲线密钥交换)
TLS握手阶段的流程:
这就像:用装甲车(非对称加密,慢但安全)把保险箱钥匙(会话密钥)送到对方手上,然后双方用这把钥匙开保险箱(对称加密,快),往里面放东西。
HTTP/1.1 是1999年发布的,用了20多年。但它有很多问题,所以后来有了HTTP/2和HTTP/3。
| HTTP/1.1 | HTTP/2 | HTTP/3 | |
|---|---|---|---|
| 发布年份 | 1999 | 2015 | 2022 |
| 底层协议 | TCP | TCP | QUIC(基于UDP) |
| 连接复用 | 一个TCP连接一次只能处理一个请求 | 多路复用,一个连接并行处理多个请求 | 多路复用,且无队头阻塞 |
| 头部压缩 | 无(每次都发完整头部) | HPACK 压缩 | QPACK 压缩 |
| 加密 | 可选 | 虽然不是必须,但浏览器强制HTTPS | 内置加密(TLS 1.3) |
| 连接迁移 | 不支持 | 不支持 | 支持(Wi-Fi切4G不断连) |
在中级阶段我们提到了负载均衡,它的核心工具就是反向代理(Reverse Proxy)。
正向代理代理的是客户端——帮客户端去访问外网(比如公司代理、翻墙工具)。反向代理代理的是服务端——帮服务器接收外部请求。两者的相同之处在于:都是"中间人",客户端不知道(或不关心)最终是谁在服务。
Nginx能做的事远不止负载均衡——它还可以做TLS终止(在Nginx层解密HTTPS,后端服务器用明文HTTP,减轻后端压力)、静态文件服务、限流、缓存等。它是目前互联网公司最常用的Web服务器和反向代理软件。
在互联网公司,你的服务大概率是跑在云上的(阿里云、腾讯云、AWS等)。理解云网络的基本概念,是与工程师沟通的基础。
VPC(Virtual Private Cloud,虚拟私有云)就是在公有云上划出来的一块逻辑隔离的私有网络区域。你在VPC内部可以自由定义IP地址范围、划分子网(Subnet)、设置路由规则,同时与外界保持隔离。可以把它理解为"在云上租了一层或一栋楼,里面完全是你的私人空间"。
| 组件 | 作用 | 类比 |
|---|---|---|
| VPC | 云上的私有网络空间 | 你在云上"租的一栋楼" |
| 子网(Subnet) | VPC内部的网络分区 | 楼里的"不同楼层" |
| NAT网关 | 让私有子网中的服务器能访问外网(但不能被外网访问) | 内线电话可以打出去,但外面打不进来 |
| 安全组 | 实例级别的防火墙规则 | 每个房间的门禁卡 |
| 路由表 | 决定子网间的流量怎么走 | 楼内的"指路牌" |
当用户反馈"网站打不开了",作为产品经理,你不需要亲自排查,但了解排查思路能让你更高效地和工程师沟通:
是所有用户都打不开,还是只有某个用户?是所有页面都打不开,还是某个特定页面?是第一次打不开还是之前也打不开?这些信息能帮工程师快速定位问题层次。
用nslookup或dig命令检查域名能否解析到正确的IP。如果DNS解析不了,问题可能出在DNS服务商或域名配置上。
用ping检查目标服务器是否可达。用traceroute(或tracert)查看数据包经过了哪些路由节点,在哪一跳断了。
用telnet或nc检查目标端口是否可达。ping通了但端口不通,可能是防火墙、安全组、或者服务没启动。
检查HTTP状态码——是4xx(客户端问题)还是5xx(服务端问题)?检查服务器负载、内存、磁盘是否正常。看最近的部署记录——是不是发了新版本导致的?
现代互联网公司普遍使用微服务架构——把一个大的应用拆成很多个小的独立服务,每个服务负责一个具体的功能。那么这些服务之间怎么通信呢?
| 方式 | 原理 | 适用场景 |
|---|---|---|
| HTTP/REST API | 服务A通过HTTP请求调用服务B的接口 | 大多数同步调用场景 |
| gRPC | Google开发的高性能RPC框架,基于HTTP/2 | 高性能、低延迟的服务间调用 |
| 消息队列 | 服务A把消息发到队列,服务B从队列拿消息(异步) | 不需要即时回复的场景,如发邮件、数据处理 |
| 服务网格(Service Mesh) | 在每个服务旁边放一个"边车"代理,统一管理通信、安全、监控 | 大型微服务集群的复杂治理 |
在微服务架构下,外部请求不会直接打到单个服务上,而是先经过一个API网关(API Gateway)。API网关做:身份验证、限流、路由转发、日志记录、协议转换。就像公司的前台——所有访客先到前台登记、验证身份,再由前台引导到对应的会议室。
你可能会觉得:负载均衡就是"多放几台服务器",CDN就是"多放几个缓存节点",防火墙就是"多加一道门禁"。这些东西本质上不都是在"水多了加面,面多了加水"吗?
你说对了。互联网架构的核心哲学,就是在各种"不平衡"中寻找平衡。理解了这一点,你就抓住了所有技术决策的本质。
任何一个互联网服务,永远面临四个维度的压力:
面对这四种压力,互联网工程师的应对策略本质上就是"不够就加":
| 压力 | 表现 | "加水" | "加面" |
|---|---|---|---|
| 流量太大 | 服务器CPU飙到100%,响应越来越慢 | 水平扩展:多加几台服务器(负载均衡) | 垂直扩展:换更好的服务器(加CPU/内存) |
| 数据太多 | 数据库查询越来越慢,磁盘满了 | 分库分表:把数据分散到多个数据库 | 读写分离:一个库专门写,多个库专门读 |
| 用户太远 | 跨省跨国用户访问很慢 | CDN + 多机房:在各地部署节点 | 专线:拉更快的网络线路 |
| 机器坏了 | 某台服务器宕机或硬盘报废 | 冗余 + 自动切换:多备几台,挂了自动切 | 高可用架构:异地多活、热备份 |
纯粹"加水"(堆机器)有一个致命的问题:边际效益递减。从1台服务器加到2台,性能可能提升80%;从10台加到11台,性能只提升5%;从1000台加到1001台……几乎没区别了。更糟的是,机器越多,管理复杂度急剧上升——1000台机器的协调、监控、故障处理,不是100台的10倍,而是100倍。
既然要多台服务器一起工作,那请求来了该分给谁?负载均衡器有不同的分配策略:
一人一次,轮流来。请求1→服务器A,请求2→服务器B,请求3→服务器C,请求4→服务器A……最简单的策略,适合所有服务器配置相同的场景。
能力强的多干活。如果服务器A的配置是B的两倍,就设权重2:1——A处理2个请求,B处理1个。适合混合部署不同配置的机器。
谁清闲发给谁。检查每台服务器当前正在处理的请求数,把新请求发给最闲的那台。适合请求处理时间不均衡的场景(有的请求快有的慢)。
同一个用户的请求发给同一台服务器。这样服务器可以把用户数据缓存在本地,不用每次都去数据库查。适合需要"粘性会话"的场景。
最理想的状态是:系统自己感知负载,自动加水加面。这就是云服务提供的弹性伸缩(Auto Scaling)能力:
下面是30个核心网络概念的完整讲解,每一个都按"是什么 → 为什么重要 → 和什么有关 → 举个例子"展开。点击条目展开:
是什么:IP地址是网络中每台设备的唯一标识。IPv4由四段数字组成(如192.168.1.100),32位,可表示约43亿个地址。IPv6由八组十六进制数组成(如2001:db8::1),128位,几乎无限。
为什么重要:没有IP地址,数据包就找不到目标——就像寄信没有地址。它是网络通信最基础的概念。公网IP和私有IP的区分直接决定了"外网能否访问这台设备"。
举个例子:你在浏览器输入baidu.com,DNS把它翻译成110.242.68.66(百度服务器的公网IP),然后你的请求就发往这个地址。
是什么:DNS(Domain Name System,域名系统)是把域名翻译成IP地址的分布式数据库系统。它分级管理——从根DNS→顶级域DNS→权威DNS,逐级查询。
为什么重要:每次上网的第一个步骤就是DNS查询。DNS慢了,所有网页都慢。DNS错了(被劫持或污染),你就会被引导到错误的网站。
举个例子:DNS就像电话号码簿——你查"张三"(域名),电话簿给你"138xxxx1234"(IP地址),然后你拨号过去。
是什么:域名是IP地址的"人类可读版"。从右向左分级:.com是顶级域,baidu是二级域,www是子域。完整的域名还需要配置各种DNS记录——A记录指向IPv4,AAAA记录指向IPv6,CNAME做别名,MX指定邮件服务器。
举个例子:mail.baidu.com — .com(顶级域)、baidu(二级域)、mail(子域,表示邮件服务)。
是什么:协议是通信双方约定的数据格式和交互顺序。网络协议分四层——应用层(HTTP/DNS)、传输层(TCP/UDP)、网络层(IP)、网络接口层(Wi-Fi/以太网)。每一层使用下一层提供的服务,同时为上一层提供服务。
为什么重要:分层设计是网络最核心的架构思想。每一层可以独立演进(比如Wi-Fi 5升级到Wi-Fi 6不影响上面所有层),这保证了互联网的灵活性和可扩展性。
是什么:路由器是连接不同网络、决定数据包转发路径的设备。它内部维护一张"路由表",记录了"去某个IP段该走哪个出口"。数据包在互联网上就是通过一个个路由器的"接力"到达目的地的。
举个例子:你从北京发数据到深圳的服务器,数据包可能经过:你家路由器→小区交换机→运营商骨干网→广州出口→深圳机房,沿途可能有十几个路由器参与了转发。
是什么:带宽是单位时间内能传输的最大数据量,单位是bps(比特每秒)。注意区分:100Mbps(兆比特每秒)≠ 100MB/s(兆字节每秒),1 Byte = 8 bits,所以100Mbps ≈ 12.5MB/s。
为什么重要:带宽决定了"能传多快"。视频网站需要高带宽(视频数据量大),聊天应用带宽需求低(文字数据量小)。
是什么:延迟(Latency)是数据从发送到接收所需的时间,单位是ms(毫秒)。光速限制了物理延迟的下限——光在光纤中从北京到深圳大约需要10ms,到纽约大约需要70ms。实际延迟还包括路由器处理、排队等开销。
为什么重要:对于网页浏览和在线会议,低延迟比高带宽更重要。延迟超过100ms,视频通话就会不自然;超过200ms,在线游戏的体验就很差。
是什么:丢包(Packet Loss)是数据包在网络传输中丢失的比例。原因包括:网络拥堵(路由器缓冲区满了就丢弃)、物理错误(信号干扰、网线坏了)、设备故障等。TCP会检测丢包并重传,UDP不会。
举个例子:Wi-Fi信号不好时,视频会议出现卡顿和马赛克——这就是丢包的表现。不是网速慢(带宽够),而是数据包在传输中丢了。
是什么:TCP(传输控制协议)是面向连接的可靠传输协议。通过序列号(每个字节编号)+ 确认(收到后回复ACK)+ 重传(超时未收到ACK则重发)+ 流量控制(滑动窗口)+ 拥塞控制(慢启动)等机制,保证数据完整有序到达。
为什么重要:互联网上绝大多数应用都基于TCP——网页(HTTP)、邮件、文件传输、远程登录。它是互联网可靠性的基石。
是什么:UDP(用户数据报协议)是无连接的不可靠传输协议——直接发包,不确认,不重传。优点是快(没有建立连接和确认的开销),代价是不可靠。
为什么重要:实时应用(视频通话、直播、在线游戏、VoIP)需要UDP的速度,不需要TCP的可靠性——丢几个视频帧几乎看不出来,但延迟半秒就很难受。
是什么:三次握手是TCP建立连接的过程:①客户端发SYN→②服务器回SYN+ACK→③客户端回ACK。三次的原因是为了防止网络中滞留的历史连接请求被错误建立。
为什么重要:每次HTTP请求(在非keep-alive模式下)都要经过三次握手,这会增加约1个RTT(往返时间)的延迟。这就是为什么持久连接(keep-alive)和多路复用(HTTP/2)能显著提升性能。
是什么:端口是传输层的16位标识符(0-65535),用于区分一台设备上运行的不同网络服务。IP地址+端口 = 唯一标识一个网络进程。0-1023是知名端口(80=HTTP, 443=HTTPS, 22=SSH),1024-49151是注册端口,49152-65535是临时端口。
举个例子:同一台服务器上,Nginx监听80端口处理HTTP请求,MySQL监听3306端口等待数据库查询,SSH监听22端口等待远程登录。一个数据包到达服务器后,根据目标端口号就知道该交给哪个程序。
是什么:HTTP(超文本传输协议)是Web的基础协议,无状态、基于"请求-响应"模型。请求包含方法(GET/POST/PUT/DELETE)、URL、头部(Headers)、可选的请求体(Body)。响应包含状态码、头部、响应体。
为什么重要:你看到的每一个网页、App调用的每一个后端接口,绝大多数都使用HTTP。理解HTTP方法是GET(获取)还是POST(提交),理解状态码是4xx(你的问题)还是5xx(服务器的问题),是和工程师沟通的基础。
是什么:HTTPS = HTTP + TLS加密。TLS在TCP连接建立后进行握手——协商加密算法、验证服务器证书、交换密钥,之后所有HTTP数据都被加密传输。TLS同时提供加密(防窃听)、完整性校验(防篡改)、身份认证(防冒充)。
为什么重要:没有HTTPS,你在网页上输入的密码、银行卡号都可能被中间人看到。现代浏览器会标记HTTP网站为"不安全"。微信小程序、支付宝等平台都强制要求HTTPS。
是什么:TLS(传输层安全协议)用非对称加密(RSA/ECDHE)安全协商出一个共享密钥,然后用对称加密(AES)加密后续所有数据。通过数字证书(由CA签发)验证服务器身份。
为什么重要:TLS是整个互联网安全的基础。理解它的基本设计——用慢但安全的非对称加密来协商session key,再用快的对称加密传输数据——是理解网络安全的起点。
是什么:WebSocket是在单个TCP连接上实现全双工通信的协议。HTTP是"请求-响应"模式,服务器不能主动给客户端发消息。WebSocket建立连接后,双方可以随时互相发送数据。
为什么重要:聊天消息、股票行情、协作编辑、在线游戏的实时更新——这些场景都需要服务器主动推送数据。WebSocket让这些成为可能。
是什么:API(应用程序编程接口)是不同软件组件之间通信的约定——定义了"怎么请求"和"返回什么"。Web API通常使用HTTP,数据格式常用JSON(一种键值对格式的数据表示法)。RESTful API是目前最主流的API设计风格。
为什么重要:前端App和后端服务器通过API通信,不同公司的服务通过API对接(比如你的网站调用微信支付API)。理解API就像理解不同部门之间的"工作交接单"格式。
是什么:CDN(内容分发网络)把网站的静态资源(图片、CSS、JS、视频)预先复制到分布在全球各地的边缘节点上。用户访问网站时,静态资源从离他最近的节点返回,而不是从源站(可能很远)。
为什么重要:CDN除了加速,还能抗DDoS攻击(攻击流量分散到多个CDN节点,不会集中到源站),节省带宽成本(大部分流量被CDN承担)。互联网公司几乎都在用CDN。
是什么:负载均衡器(如Nginx、HAProxy)将大量请求按一定策略(轮询、最少连接、IP哈希、加权轮询、一致性哈希……)分配给多台后端服务器。同时做健康检查——如果某台服务器宕机,自动跳过它。负载均衡是水平扩展的核心工具。
为什么重要:单台服务器有性能上限。负载均衡是互联网规模化的基础——没有它,任何日活超过几千的网站都无法运行。
是什么:当系统扛不住时,有两种扩容思路——垂直扩展(Scale Up):给现有的服务器加更多CPU、内存、硬盘(换更好的机器);水平扩展(Scale Out):多买几台普通服务器,通过负载均衡协同工作(加更多机器)。
为什么重要:垂直扩展有天花板(最贵的服务器也有上限),而且贵(一台顶级服务器的价格可能顶20台普通服务器)。水平扩展几乎无限(可以加几千台),而且可以用廉价机器实现高可靠性——任何一台坏了都不影响整体。互联网公司几乎全部选择水平扩展。
"水多了加面"的来源:水平扩展的本质就是"流量多了加服务器,服务器多了发现数据库扛不住就分库,数据库分多了发现网络成了瓶颈又加带宽……"永远在动态平衡中。
是什么:反向代理(Reverse Proxy)接收客户端请求后转发给后端服务器,对客户端"假装"自己就是服务器。它可以做TLS终止、缓存、压缩、限流、安全防护。正向代理代理客户端(帮客户端隐藏身份访问),反向代理代理服务端(帮服务器接收、过滤、分发请求)。
为什么重要:反向代理是几乎所有Web架构的标配。Nginx是最流行的反向代理软件。它让后端服务器可以专注于业务逻辑,不用处理TLS、静态文件、限流等通用问题。
是什么:防火墙根据预设规则(基于IP、端口、协议)决定放行还是拦截流量。常见类型包括网络防火墙(保护整个网段)、主机防火墙(保护单台机器,如iptables)、WAF(Web应用防火墙,专门防御HTTP层面的攻击)。
举个例子:数据库服务器(3306端口)的安全组规则设为"只允许来自应用服务器内网IP的访问,拒绝其他所有来源"——这就是防火墙在做的事。
是什么:VPC(虚拟私有云)是公有云中一块逻辑隔离的私有网络区域。你可以自定义IP段、划分子网、配置路由表和网关。公有子网(有公网IP)放对外服务(如Nginx),私有子网(只有内网IP)放内部服务(如数据库),通过NAT网关让私有子网能访问外网。
为什么重要:在云时代,VPC是企业网络架构的基本单元。理解公有/私有子网的划分是理解安全架构的基础。
是什么:NAT(网络地址转换)将内网私有IP转换为公网IP。当内网设备访问外网时,路由器把源IP从私有IP改为自己的公网IP并记录映射;收到回复时再改回来。这允许多台设备共享一个公网IP上网。但副作用是外网无法主动连接内网设备。
举个例子:你家三台手机、两台电脑、一台电视——都通过路由器的一个公网IP上网。对互联网来说,你家的所有流量都来自同一个公网IP,路由器在内部根据NAT表区分是哪个设备的流量。
是什么:DDoS(分布式拒绝服务攻击)是攻击者控制大量"僵尸设备"(被黑的电脑、摄像头等)同时向目标服务器发请求,耗尽目标的带宽或计算资源,使正常用户无法访问。防护手段包括CDN分散流量、流量清洗(识别并过滤攻击流量)、黑洞路由(把攻击流量导入"无底洞")。
是什么:API网关是微服务架构的统一入口层,所有外部请求先到API网关,由它负责身份认证、限流、路由转发、协议转换、日志记录,然后转发到对应的内部微服务。就像公司的前台——统一接待、验证身份、指引到正确的地方。
为什么重要:没有API网关,每个微服务都要自己处理认证、限流等通用逻辑,而且外部需要知道每个微服务的地址——这在安全和运维上都是灾难。
是什么:Token 是用户登录成功后,服务器签发的一张数字"通行证"。客户端保存这个 Token,之后每次请求都带上它,服务器验证通过后就知道"这是谁"了。Token 本身包含了用户身份、权限、过期时间等信息,并通过数字签名防止被篡改。注意:这个Token和LLM大模型中的Token(词元)是完全不同的两个概念,只是在中文里共享了同一个英文词。
为什么重要:没有 Token,你每次刷新页面都要重新输入密码。Token 让"免密登录"成为可能。它是现代互联网应用(Web、App、小程序)身份认证的基础设施。
举个例子:你登录淘宝后关掉App,过了一小时打开,还是登录状态——这就是Token在工作。你的手机里存着淘宝的Token,每次打开App时它自动把Token发给服务器,服务器认出你,就不需要你重新输密码。
是什么:Session 是服务端记录用户状态的机制。用户登录成功后,服务器在内存或数据库里创建一条记录:"Session ID = abc123,对应的用户 = 张三,登录时间 = 14:30"。客户端只需记住 Session ID(通常通过 Cookie 发送),服务器根据 Session ID 查到对应的用户信息。
为什么重要:Session 是最传统的认证方案,至今仍在大量使用。它的一个独特优势是——服务器可以随时"销毁"一个Session(比如管理员强制踢掉某个用户),因为Session数据存在服务端。
和 Token 的区别:Session 的状态存在服务器端(服务器要维护Session表),Token(如JWT)的状态存在客户端(Token本身就自包含用户信息)。Session 像"存折"——余额信息存在银行(服务器),你手里只有一个账号;Token 像"钞票"——面值信息印刷在钞票上(Token本身包含金额),银行不需要查记录。
是什么:Cookie 是浏览器本地存储的一小块数据(最大4KB),由服务器通过 Set-Cookie 响应头设置,浏览器会自动保存并在后续请求中自动附带。每个 Cookie 绑定一个域名(如只有 baidu.com 能读取 baidu.com 的 Cookie)。可以设置过期时间(Expires)和访问限制(HttpOnly禁止JS读取、Secure只在HTTPS下传输)。
为什么重要:Cookie 是 HTTP"无状态"问题的传统解决方案——它让服务器能给不同的请求"关联到同一个人"。即使你不懂技术,Cookie 也每天影响着你——"记住密码"、购物车、"猜你喜欢"背后都有 Cookie 的影子。
举个例子:你访问淘宝时,浏览器自动把 Cookie(里面有你上次登录时保存的 Session ID)发给服务器,服务器认出你,首页就显示出"张三,你好"和你最近的浏览记录——这一切在几毫秒内完成,而你什么都感觉不到。
是什么:JWT(读作"jot")是目前最主流的 Token 格式。由三段 Base64 编码的字符串用点号连接:Header(头部,说明签名算法)+ Payload(载荷,包含用户信息、权限、过期时间)+ Signature(签名,用密钥对前两段计算得出)。服务器收到 JWT 后用密钥验签——签名对上就是真的,对不上就是假的。
为什么重要:JWT 是无状态的——服务器不需要存储任何 Session 数据,只需要验证签名就能确认 Token 有效。这让它在分布式系统(多台服务器协同工作)和跨服务场景下优势明显。
安全提醒:JWT 的 Payload 是 Base64 编码,不是加密——任何人都能解码看到内容。所以绝不能把密码、银行卡号放进 JWT。安全性全靠签名——篡改了内容,签名就对不上。
是什么:OAuth 2.0 是一套授权协议,让用户可以在不透露密码的情况下,授权第三方应用访问自己的数据。典型流程:你在一个网站点"用微信登录"→跳转到微信页面→微信问你"是否允许该网站获取你的头像和昵称?"→你点同意→微信给网站一个 Token→网站用这个 Token 获取你的头像和昵称。整个过程,你的微信密码从未离开过微信。
为什么重要:没有 OAuth,"用XX登录"、"允许XX访问你的通讯录"等功能都无法安全实现。OAuth 是互联网"互联互通"的安全基础。
Cloudflare 的学习中心,用通俗易懂的图文解释 CDN、DNS、DDoS、TLS 等概念。非常适合非技术背景。