端口解析

109 阅读3分钟

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
可以分为三类:

  1. 知名端口(0-1023)

    • 分配给常用协议:

      • HTTP: 80
      • HTTPS: 443
      • FTP: 21
      • DNS: 53
    • 一般只有系统/管理员才能占用

  2. 注册端口(1024-49151)

    • 一些软件可能会使用,比如 MySQL 默认 3306,Redis 默认 6379
  3. 动态/私有端口(49152-65535)

    • 一般由客户端临时分配(浏览器访问百度时随机使用一个)

4. 端口的不同含义

很多人容易把“端口”混淆,主要有三种场景:

  1. 物理端口(hardware port)

    • 设备上的插口,比如路由器上的 LAN/WAN 口,电脑上的 USB、网口
    • 这是硬件意义上的 port,不属于 TCP/IP
  2. 逻辑端口(software port)

    • TCP/IP 传输层的端口号,用来标识应用
    • 我们在 netstatlsof -i 里看到的就是这种端口
  3. 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 传输层定义,是数字,不是硬件口
  • 物理端口/路由器口只是“插口”,不要混淆