1. 为什么需要端口?(问题出发)
在 TCP/IP 里,IP 地址可以定位到一台主机,但这台主机可能同时运行多个应用(浏览器、QQ、微信、游戏、下载工具等)。
👉 问题:如果只是靠 IP,到底要把数据交给哪个应用呢?
👉 解决方案:增加一个“编号”来区分应用,这个编号就是 端口号(Port Number) 。
所以:
- IP = 定位哪台机器
- 端口号 = 定位这台机器上的哪个应用
2. TCP/IP 模型视角下的端口
我们把“端口”放到 TCP/IP 四层模型里看:
| 层次 | 功能 | 与端口的关系 |
|---|---|---|
| 应用层 | 各种应用(HTTP、FTP、DNS) | 依赖端口来区分服务,例如浏览器访问 80 端口就是 HTTP,访问 443 端口就是 HTTPS |
| 传输层(TCP/UDP) | 负责应用之间的通信 | 端口号就在这一层定义,比如 TCP/UDP 报文里会有“源端口”和“目的端口”字段 |
| 网络层(IP) | 负责找到主机 | IP 负责定位机器,不管端口 |
| 链路层 | 负责在物理网络上传输比特帧 | 完全不管端口 |
👉 所以,“端口”严格来说是传输层的概念。
3. 端口的分类
端口号是 16 位整数 → 范围 0 ~ 65535。
可以分为三类:
-
知名端口(0-1023)
-
分配给常用协议:
- HTTP: 80
- HTTPS: 443
- FTP: 21
- DNS: 53
-
一般只有系统/管理员才能占用
-
-
注册端口(1024-49151)
- 一些软件可能会使用,比如 MySQL 默认 3306,Redis 默认 6379
-
动态/私有端口(49152-65535)
- 一般由客户端临时分配(浏览器访问百度时随机使用一个)
4. 端口的不同含义
很多人容易把“端口”混淆,主要有三种场景:
-
物理端口(hardware port)
- 设备上的插口,比如路由器上的 LAN/WAN 口,电脑上的 USB、网口
- 这是硬件意义上的 port,不属于 TCP/IP
-
逻辑端口(software port)
- TCP/IP 传输层的端口号,用来标识应用
- 我们在
netstat或lsof -i里看到的就是这种端口
-
NAT 转换端口(路由器端口映射)
- 家庭路由器在公网只有一个 IP,但家里有很多设备
- 通过 端口映射,路由器把公网端口号对应到内网设备的端口号上
- 例如:路由器公网
:8080→ 内网192.168.1.100:80
5. 场景举例
-
浏览器访问百度
- 你本地浏览器随机开一个端口(比如 50321),
- 访问百度服务器的 443 端口(HTTPS)。
- TCP 连接表现为:
本机IP:50321 → 百度IP:443
-
家里玩网络游戏
- 游戏服务器监听一个固定端口(比如 7000),
- 客户端发起连接时用随机端口 →
客户端随机端口 → 游戏服务器7000端口
-
路由器端口映射
- 你在公网访问
路由器IP:8080, - 路由器映射到内网
192.168.1.10:80,让你访问到家里电脑的网页服务。
- 你在公网访问
6. 总结
- IP 定位机器,端口定位应用
- 逻辑端口在 TCP/UDP 传输层定义,是数字,不是硬件口
- 物理端口/路由器口只是“插口”,不要混淆