传输层基础概念
传输层概述
传输层是 OSI 参考模型中的第四层,主要负责在端到端之间提供可靠的数据传输服务。
如果把网络通信比作打电话,网络层负责找到对方的电话号码(IP地址),传输层负责找到具体的人(端口号),确保信息准确传到目的地。
1. 传输层的核心作用
1.1 端到端进程通信:网络通信的”最终环节”
端到端进程通信是指传输层在两台主机上的具体进程之间建立通信,就像打电话时找到具体的接听人。
为什么需要进程通信?
类比大楼通信:
| 层次 | 类比 | 网络层次 |
|---|---|---|
| 找到大楼 | 找到大楼地址 | 网络层:找到主机(IP地址) |
| 找到房间 | 找到具体房间号 | 传输层:找到进程(端口号) |
| 找到人 | 找到具体的人 | 应用层:找到具体服务 |
实际场景:
- 网络层:找到你的电脑(192.168.1.10)
- 传输层:找到你的浏览器(端口80)
- 应用层:获取网页内容(HTTP服务)
更形象的类比:
网络层就像快递员找到你家地址,传输层就像快递员敲开你的门,把快递交给你本人。
网络层:北京朝阳区XX街道XX号(IP地址:202.108.22.5)
传输层:3号楼5单元602室(端口:80)
应用层:交给张三(进程:浏览器)进程通信的实现
传输层通过端口号标识进程:
发送方:
- 你的电脑 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. 先启动的程序占用端口
2. 后启动的程序报错:"端口已被占用"
3. 需要更换端口或关闭占用端口的程序1.3 复用与分用:数据传输的”调度中心”
复用是指多个应用进程共享同一个传输层服务,就像多个人共用一部电话打电话。
分用是指传输层将接收到的数据分发给相应的应用进程,就像电话交换机把来电转接给具体的人。
复用和分用的过程
类比电话交换机:
复用(多人打电话):
张三 → 电话机 → 电话线 → 交换局
李四 → 电话机 → 电话线 → 交换局
王五 → 电话机 → 电话线 → 交换局
(三个人共用同一部电话机打电话)
分用(来电转接):
交换局 → 电话线 → 电话机 → 张三
交换局 → 电话线 → 电话机 → 李四
交换局 → 电话线 → 电话机 → 王五
(根据来电显示转接给具体的人)网络中的复用和分用:
发送方(复用):
浏览器(端口54321) → 传输层 → 网络层 → 网络
邮件客户端(端口54322) → 传输层 → 网络层 → 网络
聊天软件(端口54323) → 传输层 → 网络层 → 网络
(三个应用共享传输层服务)
接收方(分用):
网络 → 网络层 → 传输层 → 浏览器(端口54321)
网络 → 网络层 → 传输层 → 邮件客户端(端口54322)
网络 → 网路层 → 传输层 → 聊天软件(端口54323)
(根据端口号分发数据)复用分用的实现机制
传输层如何实现分用:
接收数据包:
IP数据包 → TCP/UDP段 → 提取端口号
分用过程:
1. 检查目的端口:80(HTTP服务)
2. 查询端口对应进程:Web服务器进程
3. 将数据交给该进程
4. 进程处理数据具体例子:
场景:服务器收到多个请求
请求1:
- 源IP:192.168.1.10,源端口:54321
- 目的IP:服务器IP,目的端口:80
- 内容:网页请求
请求2:
- 源IP:192.168.1.11,源端口:54322
- 目的IP:服务器IP,目的端口:25
- 内容:邮件发送
分用过程:
- 端口80的数据 → Web服务器
- 端口25的数据 → 邮件服务器1.4 差错检测与可靠性:数据传输的”质量保证”
差错检测是传输层检测数据传输过程中错误的能力,就像快递员检查包裹是否完好。
可靠性保证是传输层确保数据完整、有序、无重复传输的能力,就像快递保证包裹完整送达。
差错检测机制
传输层的差错检测:
发送方:
1. 数据分段
2. 添加校验和(Checksum)
3. 发送数据段
接收方:
1. 接收数据段
2. 计算校验和
3. 对比发送方的校验和
4. 如果不匹配,丢弃数据段
5. 如果匹配,接受数据段校验和的作用:
类比快递检查:
- 快递员检查包裹外观(校验和)
- 如果包裹破损,拒收(丢弃数据)
- 如果包裹完好,接收(接受数据)可靠性保证机制
TCP 的可靠性保证:
1. 序号机制:
- 每个字节有序号
- 保证数据顺序
2. 确认机制:
- 接收方确认收到数据
- 发送方知道数据已送达
3. 重传机制:
- 未收到确认的数据重传
- 保证数据完整
4. 流量控制:
- 控制发送速率
- 防止接收方过载
5. 拥塞控制:
- 控制网络拥塞
- 保证网络稳定UDP 的简单性:
UDP不提供可靠性保证:
- 不使用序号
- 不使用确认
- 不使用重传
- 不使用流量控制
- 只提供基本差错检测2. 传输层与网络层的区别
2.1 功能层次对比
| 对比项 | 网络层 | 传输层 |
|---|---|---|
| 通信范围 | 主机到主机 | 进程到进程 |
| 寻址方式 | IP地址 | 端口号 |
| 可靠性 | 不保证(尽力而为) | 可以保证(TCP) |
| 流量控制 | 无 | 有(TCP) |
| 连接方式 | 无连接(IP) | 无连接(UDP)/面向连接(TCP) |
| 服务对象 | 主机 | 进程 |
| 类比 | 找到大楼 | 找到房间 |
2.2 作用关系
网络层是基础,传输层是延伸:
网络层:
- 负责主机间通信
- 提供IP寻址和路由
- 数据从一台主机到另一台主机
传输层:
- 在网络层基础上提供进程间通信
- 提供端口号寻址
- 数据从一个进程到另一个进程类比大楼通信:
网络层:
- 找到大楼地址(IP地址)
- 把信件送到大楼门口
传输层:
- 找到具体房间号(端口号)
- 把信件送到房间门口
- 确保信件完好无损(可靠性)3. 传输层的两大协议
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?
- 实时性要求高
- 数据量小
- 允许少量丢失
- 对可靠性要求不高4. 实际应用举例
例子1:访问网站的过程
让我们看看访问网站时传输层的作用:
场景:用浏览器访问 www.baidu.com
1. 应用层:
- 浏览器发起HTTP请求
2. 传输层(TCP):
- 选择端口:
* 客户端(浏览器):临时端口54321
* 服务器(百度):HTTP端口80
- 建立连接:三次握手
- 传输数据:发送HTTP请求
3. 网络层:
- IP地址:客户端192.168.1.10 → 服务器202.108.22.5
- 路由转发:逐步到达服务器
4. 服务器接收:
- 网络层:接收IP数据包
- 传输层:提取目的端口80,交给Web服务器
- 应用层:Web服务器处理HTTP请求
5. 返回响应:
- 传输层:服务器端口80 → 客户端端口54321
- 网络层:服务器IP → 客户端IP
- 应用层:浏览器显示网页例子2:多应用同时运行
你的电脑上同时运行多个网络应用,传输层如何处理?
场景:
- 浏览器访问网站
- 邮件客户端收邮件
- 聊天软件发消息
传输层的复用:
浏览器(端口54321) → TCP → 网络层 → 发送
邮件客户端(端口54322) → TCP → 网络层 → 发送
聊天软件(端口54323) → TCP → 网络层 → 发送
网络层的统一处理:
- 所有数据都用同一IP地址(192.168.1.10)
- 传输层用不同端口区分不同应用
接收数据时的分用:
网络 → 网络层 → TCP → 根据端口分发:
- 端口54321的数据 → 浏览器
- 端口54322的数据 → 邮件客户端
- 端口54323的数据 → 聊天软件例子3:DNS查询过程
DNS查询使用UDP协议:
场景:浏览器查询 www.baidu.com 的IP地址
1. 应用层:
- 浏览器需要解析域名
2. 传输层(UDP):
- 客户端端口:49152(临时端口)
- DNS服务器端口:53
- 发送DNS查询请求(UDP数据报)
3. 网络层:
- 客户端IP → DNS服务器IP
4. DNS服务器:
- 收到UDP数据报
- 查询域名对应的IP
- 返回IP地址(UDP数据报)
5. 客户端:
- 收到UDP响应
- 得到IP地址:202.108.22.5
- 浏览器使用该IP访问网站
特点:
- UDP简单快速
- 一次请求一次响应
- 不需要建立连接
- 响应速度快练习题
练习 1
传输层和网络层有什么区别?它们如何协作?
主要区别:
通信范围:
- 网络层:主机到主机(找到IP地址)
- 传输层:进程到进程(找到端口号)
寻址方式:
- 网络层:IP地址(32位或128位)
- 传输层:端口号(16位)
可靠性:
- 网络层:不保证,尽力而为
- 传输层:TCP保证,UDP不保证
流量控制:
- 网络层:无
- 传输层:TCP有流量控制
协作方式:
网络层和传输层分工协作:
- 网络层负责找到目标主机(IP地址)
- 传输层负责找到目标进程(端口号)
就像快递:
- 网络层:找到大楼地址
- 传输层:找到房间号
- 协作:把快递送到具体房间
实例: 访问网站时:
- 网络层:把数据送到服务器主机(IP地址)
- 传输层:把数据交给Web服务器进程(端口80)
练习 2
什么是端口?端口有什么作用?端口如何分类?
端口的定义: 端口是传输层用于标识进程的16位数字(0-65535),就像房间号标识大楼里的具体房间。
端口的作用:
- 标识进程:唯一标识主机内的进程
- 区分服务:区分不同的网络服务
- 数据分发:将数据分发给正确的应用进程
- 连接管理:在TCP中标识不同的连接
端口分类:
熟知端口(0-1023):
- 分配给常用服务
- 由IANA统一管理
- 例:HTTP(80)、FTP(21)、SSH(22)
注册端口(1024-49151):
- 分配给应用程序
- 需要注册
- 例:MySQL(3306)、Oracle(1521)
动态端口(49152-65535):
- 临时分配给客户端
- 由操作系统动态分配
- 连接结束后释放
类比:
- 知名端口:大楼公共服务区(前台、电梯)
- 注册端口:办公区(公司办公室)
- 动态端口:临时活动室(临时使用)
练习 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:两种协议的特点和适用场景
- 认识传输层与网络层的关系:分工协作实现通信
关键概念记忆
- 端口号:标识进程的16位数字
- 熟知端口:0-1023,分配给常用服务
- TCP:面向连接,可靠传输
- UDP:无连接,快速传输
- 复用:多个应用共享传输层
- 分用:传输层分发数据给应用
传输层是网络通信的”最后一公里”,确保数据准确到达具体应用进程!
