网络基础概念
约 1560 字大约 5 分钟
2026-05-10
学习 Python 网络编程前,需要先理解一些基础概念:IP、端口、域名、DNS、TCP、UDP 等。
- IP 地址
- 端口
- 域名与 DNS
- localhost、127.0.0.1、0.0.0.0
- 1跑一遍 ping baidu.com、nslookup baidu.com,把“域名 → IP → 端口”的链路在终端复现。
- 2区分 127.0.0.1(只允许本机访问)和 0.0.0.0(监听所有网卡)—— 开发服务时 bind 错了外部连不上。
- 3了解常见端口:22(SSH)、80(HTTP)、443(HTTPS)、3306(MySQL)、6379(Redis)。
- 4TCP 和 UDP 各自适合什么:可靠传输用 TCP,低延迟广播/实时用 UDP(DNS、视频流、游戏)。
- 5“服务连不上”按层排查:DNS 解析?端口通?防火墙?应用真在监听?比直接看报错更高效。
学习 Python 网络编程前,需要先理解一些基础概念:IP、端口、域名、DNS、TCP、UDP 等。
IP 地址
IP 地址用于标识网络中的一台设备。常见的是 IPv4,例如:
192.168.1.10
8.8.8.8IPv6 地址更长,例如:
2408:8207:78cc:1::1端口
一台机器上可能同时运行多个网络服务。端口用于区分这些服务。
常见端口:
| 端口 | 服务 |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
| 3306 | MySQL |
| 6379 | Redis |
访问 https://example.com 时,如果没有显式写端口,默认使用 443。
域名与 DNS
人类更容易记住域名,例如 www.python.org,但计算机通信最终需要 IP 地址。DNS 负责把域名解析成 IP。
www.python.org -> 151.101.0.223DNS 解析失败时,程序可能报 NameResolutionError 或类似错误。
localhost、127.0.0.1、0.0.0.0
localhost:本机域名,通常指向127.0.0.1。127.0.0.1:回环地址,只能本机访问。0.0.0.0:监听所有网卡地址,常用于服务端绑定。
如果服务绑定在 127.0.0.1,通常只有本机能访问;绑定在 0.0.0.0,局域网其他机器可能也能访问。
公网 IP 与内网 IP
内网 IP 常见范围:
10.0.0.0/8172.16.0.0/12192.168.0.0/16
内网 IP 不能直接被公网访问。家庭路由器、公司网络通常通过 NAT 让多台设备共享一个公网出口。
TCP 与 UDP
TCP 是面向连接的可靠传输协议。它保证数据按顺序到达,丢包会重传。HTTP、HTTPS、SSH 通常基于 TCP。
UDP 是无连接协议,不保证可靠到达,但开销小、延迟低。DNS、视频通话、游戏通信中经常使用 UDP。
| 协议 | 特点 | 适合场景 |
|---|---|---|
| TCP | 可靠、有序、连接式 | Web、文件传输、数据库 |
| UDP | 快、不保证可靠 | DNS、音视频、游戏 |
三次握手与四次挥手
TCP 建立连接大致需要三次握手:
客户端 -> 服务端:我要连接
服务端 -> 客户端:可以连接
客户端 -> 服务端:确认连接关闭连接通常需要双方分别确认,因此常被称为四次挥手。
初学阶段不必死记细节,但要理解:TCP 通信前需要建立连接,连接本身也有成本。
常用诊断工具
ping example.com
curl https://example.com
nc -vz example.com 443
dig example.com
nslookup example.com
traceroute example.com这些工具可以帮助定位网络问题:域名是否能解析、端口是否开放、服务是否能访问、路径在哪里中断。
地址、端口和服务的关系
初学者最容易混淆的是:IP 地址找到的是“哪台机器”,端口找到的是“这台机器上的哪个服务”。
可以用一个小区来类比:
IP 地址:小区地址
端口:楼栋里的房间号
服务:住在这个房间里的人同一台服务器可以同时运行很多服务:
服务器 1.2.3.4
├─ 22 SSH 远程登录
├─ 80 HTTP 网站
├─ 443 HTTPS 网站
└─ 5432 PostgreSQL 数据库所以“服务器能 ping 通”不等于“服务能访问”。ping 只能说明机器大概率能到达,不代表 443 端口一定开放,也不代表网站程序正常。
从 URL 到 IP:一次访问发生了什么
访问 https://www.python.org/downloads/ 时,可以拆成几部分:
| 部分 | 示例 | 作用 |
|---|---|---|
| 协议 | https | 决定怎么通信 |
| 域名 | www.python.org | 人容易记住的名字 |
| 端口 | 默认 443 | 找到服务器上的 HTTPS 服务 |
| 路径 | /downloads/ | 告诉服务端要哪个资源 |
大致流程是:
域名 -> DNS 解析成 IP -> 连接 IP:443 -> 发送 HTTP 请求 -> 收到响应这也是为什么网络错误常常要分层排查。域名错了,根本连不到服务器;端口不通,连接建不起来;路径错了,可能会得到 404。
127.0.0.1 和 0.0.0.0 的常见场景
开发 Web 服务时经常看到:
python manage.py runserver 127.0.0.1:8000
python manage.py runserver 0.0.0.0:8000它们的区别很实用:
127.0.0.1:8000:通常只有本机能访问,适合自己调试。0.0.0.0:8000:监听所有网卡,局域网内其他机器可能可以访问。
如果你在 Docker、虚拟机或云服务器里运行程序,这个区别会非常明显。服务只绑定 127.0.0.1 时,外部访问经常失败。
常见报错怎么读
| 报错关键词 | 大致含义 | 先检查什么 |
|---|---|---|
Name or service not known | 域名解析失败 | 域名拼写、DNS、网络 |
Connection refused | 对方机器到了,但端口没人监听 | 服务是否启动、端口是否正确 |
Connection timed out | 连接一直没成功 | 防火墙、网络、端口是否开放 |
Read timed out | 已连上,但等响应太久 | 服务端是否慢、timeout 是否过短 |
SSL: CERTIFICATE_VERIFY_FAILED | HTTPS 证书校验失败 | 系统证书、代理、目标站证书 |
读报错时先找关键词,不要只看到一整屏英文就慌。
总结
网络编程的底层离不开地址、端口和协议。HTTP 请求看起来只是调用一个函数,但背后涉及 DNS、TCP、TLS、HTTP 等多个层次。理解这些基础概念,有助于排查网络错误。
- IP 找机器,端口找机器上的服务;ping 通不等于端口可访问。
- URL 可以拆成协议、域名、端口、路径,排错时也按这些部分逐个检查。
- `127.0.0.1` 偏本机调试,`0.0.0.0` 常用于让外部也能连进来。
版权所有
版权归属:Shuo Liu
