一、3.1 概述和运输层服务

运输层是整个五层模型中  唯一负责 “端到端进程通信”*、 的核心层,上承应用层需求,下借网络层能力,是理解 “数据如何精准送到目标程序” 的关键入口。

3.1.1 运输层和网络层的关系(核心考点)

这是本章最容易混淆的概念,也是面试 / 考研高频题,我们用对比 + 比喻彻底讲透:

表格

维度 网络层(IP 协议) 运输层(TCP/UDP 协议)
核心职责 提供主机到主机的逻辑通信:只负责把数据从源主机送达目标主机,不关心数据要交给哪个应用 提供进程到进程的逻辑通信:在主机连通的基础上,把数据精准投递到目标应用进程
通信范围 跨主机、跨网段,关注 “路由选择” 和 “主机可达性” 同一主机内的不同进程,关注 “数据分发” 和 “应用隔离”
通俗比喻 把快递从 “发件人城市” 送到 “收件人城市的小区门口” 把快递从 “小区门口” 送到 “收件人家里的具体房间号”
典型协议 IPv4、IPv6 TCP、UDP

✅ 关键结论:网络层管 “哪台机器”,运输层管 “机器上的哪个程序”。没有运输层,同一台主机上的浏览器、微信、游戏会互相争抢数据,无法实现 “多应用同时上网”。

3.1.2 因特网运输层概述

因特网为应用层提供了两种截然不同的运输服务,应用程序可根据业务需求自由选择:

1. UDP(用户数据报协议,User Datagram Protocol)
  • 核心定位:轻量、无连接、不可靠的 “尽力而为” 服务
  • 关键特性
    • 无连接:发送前不需要建立连接,直接封装数据发送,开销极低
    • 不可靠:不保证数据一定到达、不保证顺序、不修复丢包,也不做流量 / 拥塞控制
    • 面向消息:保留应用层消息边界,一次发送对应一次接收
    • 低延迟:没有握手、重传等额外机制,传输速度极快
  • 适用场景:实时性优先、允许少量丢包的业务
    • DNS 查询(快速解析域名,超时可重试)
    • 视频通话 / 直播(卡顿比短暂模糊更影响体验)
    • 在线游戏(延迟敏感,丢包可通过插值补全)
    • 实时物联网数据采集
2. TCP(传输控制协议,Transmission Control Protocol)
  • 核心定位:面向连接、可靠、有序的 “全功能” 服务
  • 关键特性
    • 面向连接:传输前必须通过三次握手建立连接,传输后通过四次挥手释放连接
    • 可靠数据传输:通过序列号、确认应答、超时重传机制,保证数据不丢、不乱、不重复
    • 流量控制:防止发送方发送过快,撑爆接收方缓冲区
    • 拥塞控制:感知网络拥堵程度,自动调节发送速率,避免网络崩溃
    • 面向字节流:把数据看作连续的字节流,不保留消息边界
  • 适用场景:数据完整性优先、不允许丢包的业务
    • 网页浏览(HTTP/HTTPS)
    • 文件传输(FTP)
    • 电子邮件(SMTP/POP3/IMAP)
    • 支付、数据库等对数据一致性要求极高的场景

✅ 设计哲学:UDP 做减法(只做最基础的分发),TCP 做加法(在不可靠的 IP 网络上,模拟出一条可靠的 “虚拟管道”)


二、3.2 多路复用与多路分解

这是运输层最基础、最本质的功能,是 “多应用同时上网” 的底层实现,也是理解端口号作用的核心。

1. 核心概念:复用 vs 分解

  • 多路复用(发送端,Multiplexing)多个应用进程同时产生数据,各自通过不同的端口号交给运输层;运输层将这些数据封装成运输层报文段(TCP 段 / UDP 数据报),统一交给网络层,封装成 IP 数据包发送到网络。

    • 本质:把多个应用的数据流,合并成一条网络数据流
  • 多路分解(接收端,Demultiplexing)网络层将收到的 IP 数据包交给运输层;运输层根据报文头中的端口信息,将数据精准分发到对应的应用进程。

    • 本质:把一条网络数据流,拆分成多个应用的数据流

2. 实现基础:端口号(Port Number)

端口号是一个 16 位无符号整数(范围:0~65535),用来在一台主机内唯一标识一个应用进程,是实现复用 / 分解的核心标识:

端口范围 类型 用途 典型示例
0~1023 知名端口(Well-known Ports) 固定分配给通用标准服务,由 IANA 统一管理 HTTP:80、HTTPS:443、DNS:53、SMTP:25、SSH:22
1024~49151 注册端口(Registered Ports) 分配给特定应用程序,需向 IANA 注册 MySQL:3306、Redis:6379、Tomcat:8080
49152~65535 临时端口(Ephemeral Ports) 客户端临时使用,连接断开后自动回收 浏览器访问网站时,系统随机分配的端口

✅ 关键:同一台主机上,一个端口号同一时间只能被一个进程占用,否则会出现 “端口冲突”。

3. 分解的两种实现方式(UDP vs TCP)

(1)无连接分解(UDP 方式)
  • 依据:仅通过 (目的 IP 地址,目的端口号) 二元组进行分发
  • 逻辑:只要收到的报文,目的 IP 和目的端口与某进程绑定,就直接交给该进程,不关心源 IP 和源端口
  • 特点:无状态、无连接,实现简单,开销小
  • 局限:同一端口无法同时处理多个不同客户端的连接(但 UDP 本身不需要长连接,所以不影响使用)
(2)面向连接分解(TCP 方式)
  • 依据:通过 (源 IP 地址,源端口号,目的 IP 地址,目的端口号) 四元组进行分发
  • 逻辑:每个 TCP 连接都由唯一的四元组标识,即使目的端口相同,只要源 IP / 端口不同,就会被视为不同连接
  • 特点:支持同一端口同时处理多个客户端连接(比如 Web 服务器 80/443 端口,同时服务成千上万的浏览器)
  • 优势:连接隔离,数据不会串扰,是实现高并发服务器的基础

4. 直观案例:多应用同时上网

假设你在电脑上同时打开:

  • 浏览器(访问 https://www.baidu.com,本地临时端口:50001)
  • 微信(聊天,本地端口:8080)
  • 游戏(《英雄联盟》,本地端口:27015)

发送端复用过程

  1. 浏览器数据 → 运输层(源端口 50001,目的端口 443)
  2. 微信数据 → 运输层(源端口 8080,目的端口 8080)
  3. 游戏数据 → 运输层(源端口 27015,目的端口 27015)
  4. 运输层将三者封装成不同的报文段,交给网络层,统一发送到互联网

接收端分解过程

  1. 收到目的端口 443 的报文 → 交给浏览器
  2. 收到目的端口 8080 的报文 → 交给微信
  3. 收到目的端口 27015 的报文 → 交给游戏
  4. 三个应用数据完全隔离,实现 “同时上网不冲突”

✅ 本节核心总结

  1. 运输层定位:承上启下,为进程到进程提供逻辑通信,区别于网络层的 “主机到主机”。
  2. 两种服务选型
    • UDP:轻量、快速、不可靠,适合实时场景
    • TCP:可靠、有序、功能完整,适合数据敏感场景
  3. 复用 / 分解本质:通过端口号实现多应用数据隔离,是 “多应用同时上网” 的底层保障。
  4. 分解差异:UDP 用二元组,实现简单;TCP 用四元组,支持高并发连接。

📌 下一节预告

3.3 UDP 协议:深入解析 UDP 报文结构、校验和算法、应用场景,探讨 “不可靠协议” 为何在实时通信中更具优势。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐