传输层基础概念
传输层是 OSI 参考模型中的第四层,主要负责在端到端之间提供可靠的数据传输服务。
1.1 端到端进程通信:网络通信的”最终环节”
定义
定义是对概念、术语或对象含义的精确描述。理解定义是学习任何知识领域的基础,每个概念都有其明确的定义。
端到端进程通信是指传输层在两台主机上的具体进程之间建立通信,就像打电话时找到具体的接听人。
为什么需要进程通信?
类比大楼通信:
| 层次 | 类比 | 网络层次 |
|---|---|---|
| 找到大楼 | 找到大楼地址 | 网络层:找到主机(IP地址) |
| 找到房间 | 找到具体房间号 | 传输层:找到进程(端口号) |
| 找到人 | 找到具体的人 | 应用层:找到具体服务 |
实际场景:
- 网络层:找到你的电脑(192.168.1.10)
- 传输层:找到你的浏览器(端口80)
- 应用层:获取网页内容(HTTP服务)
更形象的类比:
网络层就像快递员找到你家地址,传输层就像快递员敲开你的门,把快递交给你本人。
| 层次 | 类比 | 实际内容 |
|---|---|---|
| 应用层 | 交给张三 | 进程:浏览器 |
| 传输层 | 3号楼5单元602室 | 端口:80 |
| 网络层 | 北京朝阳区XX街道XX号 | IP 地址:202.108.22.5 |
进程通信的实现
传输层通过端口号标识进程:
发送方:
- 你的电脑 IP:
192.168.1.10 - 浏览器进程端口:随机端口(如 54321)
- 目标服务器 IP:
202.108.22.5 - 目标服务端口:80(HTTP 服务)
传输层确保:数据从 192.168.1.10 的 54321 端口,到达 202.108.22.5 的 80 端口,实现端到端通信。
1.2 传输层寻址:端口号的”世界”
定义
定义是对概念、术语或对象含义的精确描述。理解定义是学习任何知识领域的基础,每个概念都有其明确的定义。
端口号是传输层用于标识进程的16位数字(0-65535),就像房间号标识大楼里的具体房间。
端口号的作用
类比大楼的房间号:
| 大楼类比 | 网络类比 |
|---|---|
| 大楼地址 | IP地址(主机) |
| 房间号 | 端口号(进程) |
| 房间主人 | 具体进程 |
| 房间功能 | 服务类型 |
端口号的功能:
- 标识进程:告诉数据该交给哪个进程
- 区分服务:区分不同的网络服务(HTTP、FTP等)
- 连接管理:在TCP中标识不同的连接
- 数据分发:将数据分发给正确的应用程序
端口号的分类
端口号范围:0-65535(16位,共65536个端口)
分为三类,就像大楼的房间分为不同区域:
1. 熟知端口(Well-known Ports):0-1023
类比:大楼的公共服务区(前台、电梯、消防通道)
这些端口由 IANA 统一分配,用于常见服务:
| 端口 | 服务 | 说明 | 类比 |
|---|---|---|---|
| 20/21 | FTP | 文件传输 | 文件收发室 |
| 22 | SSH | 安全远程登录 | VIP通道 |
| 23 | Telnet | 远程登录 | 普通通道 |
| 25 | SMTP | 发送邮件 | 邮件投递箱 |
| 53 | DNS | 域名解析 | 地址查询处 |
| 80 | HTTP | 网页服务 | 信息服务台 |
| 110 | POP3 | 接收邮件 | 邮件取件箱 |
| 143 | IMAP | 邮件访问 | 邮件阅览室 |
| 443 | HTTPS | 安全网页 | VIP服务台 |
2. 注册端口(Registered Ports):1024-49151
类比:大楼的办公区(公司办公室)
这些端口分配给特定应用程序:
| 端口 | 服务 | 说明 |
|---|---|---|
| 1433 | MS SQL Server | Microsoft数据库 |
| 1521 | Oracle | Oracle数据库 |
| 3306 | MySQL | MySQL数据库 |
| 5432 | PostgreSQL | PostgreSQL数据库 |
| 6379 | Redis | Redis缓存 |
| 8080 | HTTP Proxy | HTTP代理服务 |
3. 动态端口(Dynamic Ports):49152-65535
类比:大楼的临时活动室(临时使用)
这些端口由操作系统动态分配,用于客户端临时连接:
例如:打开浏览器访问网站时,操作系统为浏览器分配临时端口 54321;连接结束后端口释放,可供其他程序使用。
端口号的分配和管理
操作系统如何分配端口:
服务器端:
- 知名服务使用固定端口(如 HTTP 用 80)
- 启动时绑定到指定端口
- 等待客户端连接
客户端:
- 发起连接时,操作系统动态分配端口
- 通常使用动态端口范围(49152-65535)
- 连接结束后自动释放
端口冲突问题:
问题:两个程序都想使用 80 端口。
解决:
- 先启动的程序占用端口
- 后启动的程序报错:“端口已被占用”
- 需要更换端口或关闭占用端口的程序
1.3 复用与分用:数据传输的”调度中心”
定义
定义是对概念、术语或对象含义的精确描述。理解定义是学习任何知识领域的基础,每个概念都有其明确的定义。
复用是指多个应用进程共享同一个传输层服务,就像多个人共用一部电话打电话。
定义
定义是对概念、术语或对象含义的精确描述。理解定义是学习任何知识领域的基础,每个概念都有其明确的定义。
分用是指传输层将接收到的数据分发给相应的应用进程,就像电话交换机把来电转接给具体的人。
复用和分用的过程
类比电话交换机:
复用(多人打电话):张三、李四、王五 → 电话机 → 电话线 → 交换局(三个人共用同一部电话机打电话)
分用(来电转接):交换局 → 电话线 → 电话机 → 张三/李四/王五(根据来电显示转接给具体的人)
网络中的复用和分用:
发送方(复用):三个应用(浏览器 54321、邮件客户端 54322、聊天软件 54323)共享传输层服务,统一交给网络层发送。
接收方(分用):网络 → 网络层 → 传输层,根据端口号分发数据到对应的应用进程。
复用分用的实现机制
传输层如何实现分用:
接收数据包:IP 数据包 → TCP/UDP 段 → 提取端口号。
分用过程:
- 检查目的端口:80(HTTP 服务)
- 查询端口对应进程:Web 服务器进程
- 将数据交给该进程
- 进程处理数据
具体例子:
场景:服务器收到多个请求。
| 请求 | 源 IP | 源端口 | 目的端口 | 内容 |
|---|---|---|---|---|
| 请求 1 | 192.168.1.10 | 54321 | 80 | 网页请求 |
| 请求 2 | 192.168.1.11 | 54322 | 25 | 邮件发送 |
分用过程:端口 80 的数据 → Web 服务器;端口 25 的数据 → 邮件服务器。
1.4 差错检测与可靠性:数据传输的”质量保证”
定义
定义是对概念、术语或对象含义的精确描述。理解定义是学习任何知识领域的基础,每个概念都有其明确的定义。
差错检测是传输层检测数据传输过程中错误的能力,就像快递员检查包裹是否完好。
定义
定义是对概念、术语或对象含义的精确描述。理解定义是学习任何知识领域的基础,每个概念都有其明确的定义。
可靠性保证是传输层确保数据完整、有序、无重复传输的能力,就像快递保证包裹完整送达。
差错检测机制
传输层的差错检测:
发送方:
- 数据分段
- 添加校验和(Checksum)
- 发送数据段
接收方:
- 接收数据段
- 计算校验和
- 对比发送方的校验和
- 如果不匹配,丢弃数据段
- 如果匹配,接受数据段
校验和的作用:
类比快递检查:快递员检查包裹外观(校验和),包裹破损则拒收(丢弃数据),包裹完好则接收(接受数据)。
可靠性保证机制
TCP 的可靠性保证:
- 序号机制:每个字节有序号,保证数据顺序
- 确认机制:接收方确认收到数据,发送方知道数据已送达
- 重传机制:未收到确认的数据重传,保证数据完整
- 流量控制:控制发送速率,防止接收方过载
- 拥塞控制:控制网络拥塞,保证网络稳定
UDP 的简单性:
UDP 不提供可靠性保证:不使用序号、不使用确认、不使用重传、不使用流量控制,只提供基本差错检测。
2.1 功能层次对比
| 对比项 | 网络层 | 传输层 |
|---|---|---|
| 通信范围 | 主机到主机 | 进程到进程 |
| 寻址方式 | IP地址 | 端口号 |
| 可靠性 | 不保证(尽力而为) | 可以保证(TCP) |
| 流量控制 | 无 | 有(TCP) |
| 连接方式 | 无连接(IP) | 无连接(UDP)/面向连接(TCP) |
| 服务对象 | 主机 | 进程 |
| 类比 | 找到大楼 | 找到房间 |
2.2 作用关系
网络层是基础,传输层是延伸:
网络层:负责主机间通信,提供 IP 寻址和路由,数据从一台主机到另一台主机。
传输层:在网络层基础上提供进程间通信,提供端口号寻址,数据从一个进程到另一个进程。
类比大楼通信:
网络层:找到大楼地址(IP 地址),把信件送到大楼门口。
传输层:找到具体房间号(端口号),把信件送到房间门口,并确保信件完好无损(可靠性)。
3.1 TCP:可靠的传输
定义
定义是对概念、术语或对象含义的精确描述。理解定义是学习任何知识领域的基础,每个概念都有其明确的定义。
TCP是传输层的面向连接协议,提供可靠、有序、无差错的数据传输服务。就像打电话:先拨号建立连接,通话过程中保证语音连续,最后挂断连接。
TCP 的特点
面向连接:
- 需要预先建立连接(三次握手)
- 通信过程中维护连接状态
- 结束后释放连接(四次挥手)
可靠性保证:
- 数据完整:通过校验和检测错误
- 数据有序:通过序号保证顺序
- 无差错:通过重传纠正错误
- 无丢失:通过确认保证送达
流量控制:
- 滑动窗口机制
- 防止发送方过快
- 接收方控制发送速率
拥塞控制:
- 慢启动、拥塞避免
- 快重传、快恢复
- 防止网络拥塞
TCP 适用场景
| 场景 | 特点 | 为什么用TCP |
|---|---|---|
| 文件传输 | 数据完整重要 | 不能丢失任何字节 |
| 网页浏览 | 页面完整重要 | 不能丢失部分页面 |
| 邮件传输 | 邮件内容重要 | 不能丢失邮件内容 |
| 数据库同步 | 数据准确重要 | 不能有任何错误 |
使用TCP的实际例子:
- 下载文件:用FTP(端口21)
- 网页浏览:用HTTP(端口80)
- 发送邮件:用SMTP(端口25)
- 远程登录:用SSH(端口22)
3.2 UDP:快速的传输
定义
定义是对概念、术语或对象含义的精确描述。理解定义是学习任何知识领域的基础,每个概念都有其明确的定义。
UDP是传输层的无连接协议,提供简单、快速的数据传输服务,不保证可靠性。就像发短信:直接发送,不确认对方是否收到,速度快但可能丢失。
UDP 的特点
无连接:
- 不需要建立连接
- 直接发送数据
- 没有连接状态维护
简单高效:
- 协议开销小
- 处理速度快
- 实现简单
不保证可靠性:
- 可能丢失数据
- 可能乱序到达
- 不进行重传
实时性好:
- 延迟小
- 无连接建立延迟
- 适合实时应用
UDP 适用场景
| 场景 | 特点 | 为什么用UDP |
|---|---|---|
| 语音通话 | 实时性强 | 少量丢包不影响通话 |
| 视频直播 | 实时性强 | 少量丢帧不影响观看 |
| 在线游戏 | 实时性强 | 速度快比可靠性重要 |
| DNS查询 | 简单快速 | 一次请求一次响应 |
使用UDP的实际例子:
- DNS查询:用UDP(端口53)
- 语音通话:用UDP(实时性强)
- 视频直播:用UDP(实时性强)
- 在线游戏:用UDP(速度优先)
3.3 TCP vs UDP对比
| 特性 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接 | 无连接 |
| 可靠性 | 保证可靠 | 不保证可靠 |
| 顺序保证 | 保证有序 | 不保证有序 |
| 流量控制 | 有 | 无 |
| 拥塞控制 | 有 | 无 |
| 传输效率 | 较低 | 高 |
| 延迟 | 较高 | 低 |
| 开销 | 大 | 小 |
| 适用场景 | 文件传输、网页 | 实时应用、简单查询 |
选择建议:
什么时候用 TCP?
- 数据完整性重要、不允许丢失数据、数据量大、对实时性要求不高
什么时候用 UDP?
- 实时性要求高、数据量小、允许少量丢失、对可靠性要求不高
例子1:访问网站的过程
让我们看看访问网站时传输层的作用:
场景:用浏览器访问 www.baidu.com。
- 应用层:浏览器发起 HTTP 请求
- 传输层(TCP):
- 选择端口:客户端(浏览器)临时端口 54321,服务器(百度)HTTP 端口 80
- 建立连接:三次握手
- 传输数据:发送 HTTP 请求
- 网络层:
- IP 地址:客户端
192.168.1.10→ 服务器202.108.22.5 - 路由转发:逐步到达服务器
- IP 地址:客户端
- 服务器接收:
- 网络层:接收 IP 数据包
- 传输层:提取目的端口 80,交给 Web 服务器
- 应用层:Web 服务器处理 HTTP 请求
- 返回响应:
- 传输层:服务器端口 80 → 客户端端口 54321
- 网络层:服务器 IP → 客户端 IP
- 应用层:浏览器显示网页
例子2:多应用同时运行
你的电脑上同时运行多个网络应用,传输层如何处理?
场景:浏览器访问网站、邮件客户端收邮件、聊天软件发消息同时进行。
传输层的复用:浏览器(54321)、邮件客户端(54322)、聊天软件(54323)都通过 TCP → 网络层发送。
网络层的统一处理:所有数据使用同一 IP 地址(192.168.1.10),由传输层用不同端口区分不同应用。
接收数据时的分用:网络 → 网络层 → TCP,根据端口分发:54321 → 浏览器,54322 → 邮件客户端,54323 → 聊天软件。
例子3:DNS查询过程
DNS查询使用UDP协议:
场景:浏览器查询 www.baidu.com 的 IP 地址。
- 应用层:浏览器需要解析域名
- 传输层(UDP):
- 客户端端口:49152(临时端口)
- DNS 服务器端口:53
- 发送 DNS 查询请求(UDP 数据报)
- 网络层:客户端 IP → DNS 服务器 IP
- DNS 服务器:
- 收到 UDP 数据报
- 查询域名对应的 IP
- 返回 IP 地址(UDP 数据报)
- 客户端:
- 收到 UDP 响应,得到 IP 地址:
202.108.22.5 - 浏览器使用该 IP 访问网站
- 收到 UDP 响应,得到 IP 地址:
特点:UDP 简单快速、一次请求一次响应、不需要建立连接、响应速度快。
练习 1
传输层和网络层有什么区别?它们如何协作?
解题思路:
沿寻址对象、提供的保证和交接方式三个轴线区分两层,再用一个端到端例子说明分工。
详细步骤:
主要区别:
-
通信范围:
- 网络层:主机到主机(找到IP地址)
- 传输层:进程到进程(找到端口号)
-
寻址方式:
- 网络层:IP地址(32位或128位)
- 传输层:端口号(16位)
-
可靠性:
- 网络层:不保证,尽力而为
- 传输层:TCP保证,UDP不保证
-
流量控制:
- 网络层:无
- 传输层:TCP有流量控制
协作方式:
网络层和传输层分工协作:
- 网络层负责找到目标主机(IP地址)
- 传输层负责找到目标进程(端口号)
就像快递:
- 网络层:找到大楼地址
- 传输层:找到房间号
- 协作:把快递送到具体房间
实例: 访问网站时:
- 网络层:把数据送到服务器主机(IP地址)
- 传输层:把数据交给Web服务器进程(端口80)
最终答案:
网络层用 IP 地址找到目标主机,传输层用端口号找到主机上的目标进程,两层协作完成端到端交付。
练习 2
什么是端口?端口有什么作用?端口如何分类?
解题思路:
先定义端口,再列出它的几项作用,最后按 IANA 的三段范围分类并各举一例。
详细步骤:
端口的定义: 端口是传输层用于标识进程的16位数字(0-65535),就像房间号标识大楼里的具体房间。
端口的作用:
- 标识进程:唯一标识主机内的进程
- 区分服务:区分不同的网络服务
- 数据分发:将数据分发给正确的应用进程
- 连接管理:在TCP中标识不同的连接
端口分类:
-
熟知端口(0-1023):
- 分配给常用服务
- 由IANA统一管理
- 例:HTTP(80)、FTP(21)、SSH(22)
-
注册端口(1024-49151):
- 分配给应用程序
- 需要注册
- 例:MySQL(3306)、Oracle(1521)
-
动态端口(49152-65535):
- 临时分配给客户端
- 由操作系统动态分配
- 连接结束后释放
类比:
- 知名端口:大楼公共服务区(前台、电梯)
- 注册端口:办公区(公司办公室)
- 动态端口:临时活动室(临时使用)
最终答案:
端口是 16 位的进程标识符,按知名端口、注册端口和动态端口三段范围划分。
练习 3
什么是复用和分用?举例说明传输层如何实现复用和分用。
解题思路:
先用类比定义复用与分用,再分别描述发送方的复用路径和接收方的分用路径。
详细步骤:
复用的定义: 复用是指多个应用进程共享同一个传输层服务,就像多人共用一部电话打电话。
分用的定义: 分用是指传输层将接收到的数据分发给相应的应用进程,就像电话交换机把来电转接给具体的人。
实现机制:
发送方(复用):
- 多个应用进程使用不同端口
- 传输层统一处理
- 通过网络层发送
接收方(分用):
- 网络层接收数据
- 传输层提取目的端口
- 根据端口分发数据给对应进程
实例说明:
发送方:
- 浏览器(端口54321)发送网页请求
- 邮件客户端(端口54322)发送邮件
- 聊天软件(端口54323)发送消息
- 都通过传输层发送
接收方(服务器):
- 收到多个数据包
- 端口80的数据 → Web服务器
- 端口25的数据 → 邮件服务器
- 端口8080的数据 → 聊天服务器
类比:
- 复用:多个人通过同一部电话打电话
- 分用:来电根据号码转接给具体的人
最终答案:
复用让多个应用进程共享同一传输层服务,分用则按端口号把数据交还给对应的应用进程。
练习 4
TCP和UDP有什么区别?它们各自适用于什么场景?
解题思路:
在实践中最要紧的几个维度上对比两种协议,再各自对号入座并给出选择规则。
详细步骤:
主要区别:
-
连接方式:
- TCP:面向连接,需建立连接
- UDP:无连接,直接发送
-
可靠性:
- TCP:保证可靠传输
- UDP:不保证可靠性
-
顺序保证:
- TCP:保证有序到达
- UDP:不保证顺序
-
流量控制:
- TCP:有流量控制
- UDP:无流量控制
-
开销和延迟:
- TCP:开销大,延迟高
- UDP:开销小,延迟低
适用场景:
TCP适用场景:
- 文件传输:数据完整性重要
- 网页浏览:页面完整重要
- 那件传输:邮件内容重要
- 数据库同步:数据准确重要
特点:数据完整性和准确性比速度更重要
UDP适用场景:
- 语音通话:实时性强
- 视频直播:实时性强
- 在线游戏:速度优先
- DNS查询:简单快速
特点:实时性和速度比可靠性更重要
选择依据:
- 如果数据不能丢失 → 用TCP
- 如果实时性重要 → 用UDP
- 如果数据量大 → 用TCP
- 如果数据量小 → 用UDP
最终答案:
TCP 可靠但开销大,UDP 快而轻;数据不能丢或量大选 TCP,实时性优先或数据量小选 UDP。
