📖 运输层端口号、复用与分用的概念
🎯 课程摘要:本节课介绍运输层如何用端口号标识和区分不同的应用进程,阐明端口号的分类(熟知端口、登记端口、短暂端口)及其取值范围,并讲解发送方的"复用"与接收方的"分用"概念,最后通过 DNS + HTTP 应用实例加深对端口号作用的理解。
📝 详细笔记
1. 运输层端口号
- 概念定义:运输层直接为应用进程间的逻辑通信提供服务,使用端口来区分不同的应用进程。
- 为何不用 PID:运行在计算机上的进程使用进程标识符 PID 来标识,但不同操作系统(Windows、Linux、macOS 等)使用不同格式的 PID。为使运行不同操作系统的计算机应用进程之间能够基于网络通信,必须使用统一方法对 TCP/IP 体系的应用进程进行标识。
- 端口号的作用:TCP/IP 体系结构的运输层用端口号来标识和区分应用层的不同应用进程。
- 端口号长度与范围:端口号长度为 16 比特,取值范围是 0~65535。
2. 端口号的分类
端口号分为两大类:服务器端使用的端口号、客户端使用的端口号。
服务器端使用的端口号
| 类别 | 取值范围 | 说明 |
|---|---|---|
| 熟知端口号(全球通用端口号) | 0~1023 | 由因特网号码分配管理局 IANA 分配给 TCP/IP 体系结构应用层中最重要的一些应用协议 |
| 登记端口号 | 1024~49151 | 为没有熟知端口号的应用程序使用,必须在 IANA 按规定手续登记以防止重复(如微软远程桌面 3389) |
客户端使用的端口号
| 类别 | 取值范围 | 说明 |
|---|---|---|
| 短暂端口号(临时端口号) | 49152~65535 | 仅在客户端使用,由客户进程在运行时动态选择;通信结束后被系统收回以便给其他客户进程使用 |
TCP/IP 运输层常用熟知端口号
| 应用层协议 | 运输层协议 | 熟知端口号 |
|---|---|---|
| HTTP | TCP | 80 |
| FTP | TCP | 21(控制)、20(数据) |
| SMTP | TCP | 25 |
| POP3 | TCP | 110 |
| Telnet | TCP | 23 |
| DNS | UDP | 53 |
| TFTP | UDP | 69 |
| SNMP | UDP | 161 |
- ⚠️ 重点/考点:
- 端口号只具有本地意义,即端口号只为标识本计算机网络协议栈应用层中的各应用进程。在因特网中,不同计算机中的相同端口号没有关系,相互独立。
- TCP 和 UDP 端口号之间也是没有关系的(例如 TCP 的 80 与 UDP 的 80 互不干扰)。
3. 发送方的复用与接收方的分用
复用(发送方)
- UDP 复用:发送方的某些应用进程所发送的不同应用报文,在运输层使用 UDP 协议进行封装。
- TCP 复用:另一些应用进程所发送的不同应用报文,在运输层使用 TCP 协议进行封装。
- IP 复用:不管是 UDP 用户数据报还是 TCP 报文段,在网际层都要使用 IP 协议封装成 IP 数据报。
- IP 数据报首部中协议字段用来表明数据载荷封装的是何种协议数据单元:
- 取值为 6 → 封装的是 TCP 报文段
- 取值为 17 → 封装的是 UDP 用户数据报
- 取值为 89 → 封装的是 OSPF 报文(OSPF 不使用 UDP/TCP,直接使用 IP 封装)
- IP 数据报首部中协议字段用来表明数据载荷封装的是何种协议数据单元:
分用(接收方)
- IP 分用:接收方网际层收到 IP 数据报后,根据首部中协议字段的值向上交付:
- 协议字段 = 17 → 把数据载荷(UDP 用户数据报)向上交付给运输层的 UDP
- 协议字段 = 6 → 把数据载荷(TCP 报文段)向上交付给运输层的 TCP
- UDP 分用 / TCP 分用:运输层根据 UDP 用户数据报或 TCP 报文段首部中的目的端口号,将它们向上交付给应用层的相应应用进程。
4. 运输层端口号应用实例
场景:用户 PC、DNS 服务器、Web 服务器通过以太网交换机互联(同一以太网)。用户通过域名访问 Web 服务器。
第一步:DNS 查询(获取 IP 地址)
| 方向 | 运输层协议 | 源端口 | 目的端口 | 内容 |
|---|---|---|---|---|
| 用户 PC → DNS 服务器 | UDP | 49152(短暂端口) | 53(熟知端口) | 域名 3w.protest.net 对应的 IP 是什么? |
| DNS 服务器 → 用户 PC | UDP | 53(熟知端口) | 49152(短暂端口) | 对应 IP 为 192.168.0.3 |
DNS 客户进程收到响应后,将短暂端口号 49152 归还给系统。
第二步:HTTP 请求(获取网页内容)
| 方向 | 运输层协议 | 源端口 | 目的端口 | 内容 |
|---|---|---|---|---|
| 用户 PC → Web 服务器 | TCP | 49152(短暂端口) | 80(熟知端口) | 首页内容是什么? |
| Web 服务器 → 用户 PC | TCP | 80(熟知端口) | 49152(短暂端口) | HTTP 响应(首页内容) |
HTTP 客户进程收到响应后,将短暂端口号 49152 归还给系统。
- ⚠️ 重点/考点:
- 服务器端使用熟知端口号作为源/目的端口;客户端使用短暂端口号,由系统动态分配。
- 响应报文的目的端口 = 请求报文的源端口;响应报文的源端口 = 请求报文的目的端口。
- 本实例省略了 ARP 获取 MAC 地址、TCP 连接管理等过程,重点放在端口号、UDP/TCP 及熟知端口上。
💡 核心总结
- 端口号长度 16 比特(0~65535),用于在运输层标识应用进程,只具有本地意义。
- 三类端口号:熟知端口 0~1023、登记端口 1024~49151、短暂端口 49152~65535。
- 复用是发送方多个进程使用同一协议封装;分用是接收方根据目的端口号将数据交付给对应进程。
- IP 协议字段(6=TCP、17=UDP、89=OSPF)是网际层向上分用的依据。
❓ 课后思考 / 经典考题
- 端口号为什么只具有本地意义?不同计算机上相同的端口号是否会发生冲突?
- TCP 的端口 80 和 UDP 的端口 80 是否是同一个端口?为什么?
- OSPF 报文为什么不使用 TCP 或 UDP 封装?它在 IP 数据报首部中的协议字段值是多少?
- 在 DNS 查询过程中,客户进程使用的短暂端口号在通信结束后如何处理?
- 若 IP 数据报首部中协议字段值为 6,接收方网际层应将数据载荷交付给哪个运输层协议?