当前位置: 首页 > news >正文

【TCP/IP】8. 传输层协议

8. 传输层协议

  • 8. 传输层协议
    • 概述
    • 8.1 进程间通信
      • 8.1.1 端口与端口号
      • 8.1.2 端口分配方式
      • 8.1.3 端口号范围及分类
      • 8.1.4 进程标识与关联
      • 8.1.5 客户 / 服务器模型
    • 8.2 TCP 段格式
      • 8.2.1 首部字段(20~60 字节)
      • 8.2.2 伪首部
    • 8.3 TCP 连接的建立和拆除
      • 8.3.1 连接建立(三次握手)
      • 8.3.2 连接拆除(四次握手)
    • 8.4 TCP 流量控制
      • 8.4.1 滑动窗口原理
      • 8.4.2 特例:停等协议
    • 8.5 TCP 拥塞控制
      • 8.5.1 发送窗口的决定因素
      • 8.5.2 拥塞控制策略
    • 8.6 TCP 差错控制
      • 8.6.1 错误类型及处理
      • 8.6.2 超时重传定时
    • 8.7 TCP 状态转换图
    • 8.8 用户数据报协议(UDP)
      • 8.8.1 UDP 数据报格式
      • 8.8.2 UDP 特点
      • 8.8.3 TCP 与 UDP 对比
    • 8.9 流控制传输协议(SCTP)
      • 8.9.1 核心概念
      • 8.9.2 关键功能
      • 8.9.3 偶联建立与关闭
    • 本章要点

8. 传输层协议

概述

传输层的核心目的是弥补和加强通信子网的服务

  • 弥补:提供端到端的进程间通信(网络层仅提供点到点传输);
  • 加强:提升服务质量(QoS),尤其是可靠性(需权衡开销,故提供多种服务类型供选择)。

TCP/IP 传输层的三个核心协议:

  • 传输控制协议(TCP):面向连接、高可靠,适用于可靠性较差的广域网;
  • 用户数据报协议(UDP):无连接、高效率,适用于可靠性较高的局域网;
  • 流控制传输协议(SCTP):面向报文、可靠,适合流式通信(如多媒体、信令传输)。

8.1 进程间通信

传输层的核心是实现源进程到目的进程的端到端通信,关键是解决进程标识问题。

8.1.1 端口与端口号

  • 端口:抽象的软件结构(含数据结构和 I/O 缓冲区),是进程访问传输服务的入口,也是通信进程的标识。
  • 端口号:16 比特标识符(范围 0~65535),用于标识主机上的特定进程。

8.1.2 端口分配方式

分配方式特点适用场景
全局分配由权威机构(如 ICANN)统一分配,端口号固定常用服务(如 HTTP、FTP),方便寻址
本地分配进程动态向操作系统申请,使用后释放临时通信,灵活适应大量应用

8.1.3 端口号范围及分类

范围类型用途
0~1023熟知端口(保留端口)标准服务的服务器端(如 HTTP 用 80,FTP 控制用 21)
1024~49151注册端口企业应用软件的固定端口(需注册以避免冲突)
49152~65535动态端口(临时端口)客户端进程临时使用,用完释放

8.1.4 进程标识与关联

  • 全局唯一进程标识:三元组(协议,主机地址,端口号)(协议区分 TCP/UDP/SCTP)。
  • 进程关联:描述两个通信进程的关系,用五元组(协议,本地主机地址,本地端口号,远地主机地址,远地端口号)

8.1.5 客户 / 服务器模型

  • 交互流程:客户向服务器发送服务请求→服务器处理并响应。
  • 地址特点:服务器使用熟知端口(固定且公开),客户使用临时端口(动态分配)。

8.2 TCP 段格式

TCP 将应用层数据分块封装为TCP 段(不定长),格式如下:

8.2.1 首部字段(20~60 字节)

字段长度(比特)含义
源端口16发送进程的端口号
目的端口16接收进程的端口号
序号32本段数据第一个字节在发送端数据流中的位置(用于按序重组)
确认号32期望接收的下一字节序号(表示该序号前的数据已正确接收,实现累计确认)
HLEN(首部长度)4以 32 位字为单位的首部长度(定长部分 20 字节,故最小值为 5;含选项时最大为 15,即 60 字节)
保留4留作将来使用(置 0)
控制位8含 8 个标志位,分别为: - CWR:拥塞窗口缩减标志(响应 ECN); - ECE:ECN 响应标志(通知对方网络拥塞); - URG:紧急位(紧急数据优先传输,配合紧急指针); - ACK:确认位(确认号有效); - PSH:推送位(立即发送 / 提交数据,不等待缓冲区满); - RST:复位位(连接异常时释放连接); - SYN:同步位(建立连接时请求同步序号); - FIN:终止位(请求释放连接)
窗口大小16接收方当前可用接收缓冲区大小(字节),用于流量控制
校验和16校验范围包括段首部、数据及伪首部(确保数据完整性)
紧急指针16URG=1 时有效,指示本段中紧急数据的最后一个字节位置
选项(+ 填充)0~40 字节变长字段,常用选项: - 最大段大小(MSS):协商最大数据段长度(默认 536 字节); - 窗口规模因子:扩展窗口大小(新窗口=原窗口×2^因子); - 选择确认(SACK):报告失序 / 重复数据,优化重传; - 时间戳:计算往返时间(RTT),防止序号绕回

8.2.2 伪首部

  • 作用:验证 TCP 段是否传送到正确信宿(补充端口号无法覆盖的主机和协议信息)。
  • 内容:源 IP 地址、目的 IP 地址、保留(0)、协议(TCP=6)、TCP 段长度(字节)。

8.3 TCP 连接的建立和拆除

TCP 是面向连接的协议,连接管理通过 “握手” 实现。

8.3.1 连接建立(三次握手)

  • 目的:同步双方序号,建立双向连接,防止重复连接。
  • 过程:
    1. 第一次握手:客户→服务器,发送SYN=1,携带客户端初始序号(SEQ=x);
    2. 第二次握手:服务器→客户,发送SYN=1,ACK=1,携带服务器初始序号(SEQ=y)和确认号(ACK=x+1);
    3. 第三次握手:客户→服务器,发送ACK=1,携带确认号(ACK=y+1)。
  • 特点:前两次握手消耗序号(SYN=1 时序号 + 1),第三次握手不消耗序号。

8.3.2 连接拆除(四次握手)

  • 目的:确保双方数据均已传输完毕,有序释放双向连接。

  • 过程

    (假设 A 主动关闭):

    1. A→B:发送FIN=1,请求关闭 A→B 方向连接(SEQ=a);
    2. B→A:发送ACK=1,确认关闭(ACK=a+1),此时 A→B 方向关闭(半关闭);
    3. B→A:发送FIN=1,请求关闭 B→A 方向连接(SEQ=b);
    4. A→B:发送ACK=1,确认关闭(ACK=b+1),此时 B→A 方向关闭,连接完全释放。

8.4 TCP 流量控制

  • 目的:协调发送方与接收方的速率,避免接收方因缓冲区溢出丢失数据。
  • 机制滑动窗口协议,通过发送窗口和接收窗口的动态调整实现。

8.4.1 滑动窗口原理

  • 接收窗口:接收方通过 TCP 段的 “窗口大小” 字段通告当前可用缓冲区大小(接收窗口=缓存总大小-未提交数据量)。
  • 发送窗口:发送方窗口大小≤接收方窗口大小,限制连续发送的数据量(无需等待每个段的确认)。
  • 窗口滑动:当接收方确认部分数据后,发送窗口向右滑动,释放已确认数据的缓冲区,纳入新数据。

8.4.2 特例:停等协议

当发送窗口大小 = 1 时,每发送一个字节需等待确认,效率极低,仅用于简单场景。

8.5 TCP 拥塞控制

  • 拥塞:网络中路由器超载导致的延迟 / 丢包,可能引发 “丢包→重传→更拥塞” 的恶性循环。
  • 机制:通过控制发送方的拥塞窗口调节注入网络的数据流速度。

8.5.1 发送窗口的决定因素

发送窗口大小 = min(接收方通告窗口大小,拥塞窗口大小)

  • 接收方通告窗口:反映接收方处理能力;
  • 拥塞窗口:反映网络处理能力(动态调整)。

8.5.2 拥塞控制策略

  1. 慢启动
    • 连接建立时,拥塞窗口初始化为 1 个最大段大小(MSS);
    • 每收到一个确认,拥塞窗口翻倍(指数增长),直到达到门限值(初始为 65535 字节)。
  2. 拥塞避免
    • 当拥塞窗口≥门限值时,每经过一个往返时间(RTT),拥塞窗口增加 1 个 MSS(线性增长),减缓增长速度。
  3. 拥塞解决
    • 若发生超时重传(检测到拥塞),将门限值设为当前拥塞窗口的一半,拥塞窗口重置为 1 个 MSS,重新进入慢启动。

8.6 TCP 差错控制

  • 目的:处理数据传输中的错误(破坏、重复、失序、丢失),保证数据可靠交付。

8.6.1 错误类型及处理

错误类型检测方式处理方法
数据破坏校验和接收方丢弃,发送方超时重传
重复数据序号接收方丢弃重复段,仍发送确认
数据失序序号接收方暂存失序数据,等待前面数据到达后一并确认
数据丢失超时重传机制发送方超时后重传未确认数据

8.6.2 超时重传定时

  • 核心:动态调整重传定时器的超时时间(Timeout),适应往返时间(RTT)的变化。
  • 算法:
    1. 估算平滑 RTT(RTTS):RTTS(n) = (1-α)×RTTS(n-1) + α×RTTM(n)(α=1/8,RTTM 为实测 RTT);
    2. 估算 RTT 偏差(RTTD):RTTD(n) = (1-β)×RTTD(n-1) + β×|RTTS(n)-RTTM(n)|(β=1/4);
    3. 计算超时时间:Timeout = RTTS + 4×RTTD

8.7 TCP 状态转换图

TCP 通过有限状态机描述连接生命周期,关键状态及转换如下:

状态含义典型转换事件
CLOSED无连接状态服务器 “被动打开”→LISTEN;客户端 “主动打开”→SYN-SENT
LISTEN监听状态收到 SYN→SYN-RCVD
SYN-SENT已发送 SYN收到 SYN+ACK→ESTABLISHED
SYN-RCVD已收到 SYN发送 ACK→ESTABLISHED
ESTABLISHED连接已建立发送 FIN→FIN-WAIT-1;收到 FIN→CLOSE-WAIT
FIN-WAIT-1已发送 FIN(等待 ACK)收到 ACK→FIN-WAIT-2;收到 FIN→CLOSING
FIN-WAIT-2半关闭(等待对方 FIN)收到 FIN→发送 ACK→TIME-WAIT
CLOSE-WAIT收到 FIN(等待应用关闭)应用关闭→发送 FIN→LAST-ACK
LAST-ACK已发送 FIN(等待 ACK)收到 ACK→CLOSED
CLOSING双方同时发送 FIN收到 ACK→TIME-WAIT
TIME-WAIT等待超时(确保对方收到 ACK)超时(通常 30 秒)→CLOSED

8.8 用户数据报协议(UDP)

UDP 是无连接的传输层协议,在 IP 基础上增加进程通信能力,牺牲可靠性换取高效率。

8.8.1 UDP 数据报格式

  • 首部

    (定长 8 字节):

    • 源端口(16 比特):发送进程端口(可置 0);
    • 目的端口(16 比特):接收进程端口;
    • 总长度(16 比特):UDP 数据报总字节数(首部 + 数据,最大 65535);
    • 校验和(16 比特,可选):校验范围包括首部、数据及伪首部(验证信宿正确性)。

8.8.2 UDP 特点

  • 无连接:发送前无需建立连接,开销低;
  • 不可靠:不提供流量控制、拥塞控制和确认机制,数据可能丢失、失序;
  • 高效率:适用于交易型应用(如 DNS 查询)、实时通信(如视频会议)。

8.8.3 TCP 与 UDP 对比

特性TCPUDP
连接性面向连接无连接
可靠性高(确认、重传、排序)低(仅校验和)
开销大(握手、窗口管理等)小(仅 8 字节首部)
适用场景大数据传输(如文件下载)小数据交互(如 DNS)、实时通信

8.9 流控制传输协议(SCTP)

SCTP 是为流式通信设计的可靠传输协议,结合 TCP 的可靠性和 UDP 的高效性,适用于多媒体、信令传输(如 IP 电话)。

8.9.1 核心概念

  • 传送地址IP地址+SCTP端口号,标识端点的通信地址;
  • 端点:逻辑实体,可关联多个传送地址(多归属);
  • 偶联:两个端点间的关联(含协议状态信息),类似 TCP 连接;
  • :偶联中的单向逻辑通道,流内数据按序提交,流间独立;
  • 传输序号(TSN):标识数据块,用于确认和重传;
  • 流序号(SSN):标识流内数据块的顺序。

8.9.2 关键功能

  • 偶联建立:四次握手(避免 SYN 泛洪攻击);
  • 流内顺序提交:流内数据按序交付,流间不影响;
  • 分组验证:通过校验和确保数据完整性;
  • 通路管理:支持多通路(多归属),故障时切换通路;
  • 拥塞控制:类似 TCP(慢启动、拥塞避免)。

8.9.3 偶联建立与关闭

  • 建立:四次握手(交换 INIT、INIT ACK、COOKIE ECHO、COOKIE ACK);
  • 关闭:三次握手(发送 SHUTDOWN、SHUTDOWN ACK、SHUTDOWN COMPLETE),不支持半关闭。

本章要点

  • 传输层通过端口标识进程,用三元组(协议,主机地址,端口号)全局唯一标识进程。
  • TCP 是面向连接的可靠协议,通过三次握手建立连接、四次握手拆除连接,利用滑动窗口实现流量控制,通过拥塞窗口实现拥塞控制,通过超时重传处理差错。
  • UDP 是无连接的高效协议,适用于实时通信,仅提供简单校验和。
  • SCTP 是面向报文的可靠协议,支持多流、多通路,适用于流式通信。
  • 端口号分熟知端口(0~1023)、注册端口(1024~49151)、动态端口(49152~65535)。
http://www.dtcms.com/a/272672.html

相关文章:

  • hive小文件问题
  • 二层环路避免-STP技术
  • Linux【大数据运维】下制作Redis绿色免安装包(一)
  • 企业网络安全的“金字塔”策略:构建全方位防护体系的核心思路
  • upload-labs靶场通关详解:第20关 /.绕过
  • 以下哪种类型在Golang中不是内置类型?
  • zookeeper etcd区别
  • Keepalived+LVS实现LNMP网站的高可用部署
  • 登录为图片验证时,selenium通过token直接进入页面操作
  • Java 导出word 实现饼状图导出--可编辑数据
  • CIEDE2000 色差公式C++及MATLAB实现
  • 【零基础学AI】第35讲:策略梯度方法 - 连续控制任务实战
  • Swift 图论实战:DFS 算法解锁 LeetCode 323 连通分量个数
  • 快速搭建服务器,fetch请求从服务器获取数据
  • ReentrantLock 与 Synchronized 的区别
  • 给MySQL做定时备份,一天3次
  • method_name字段是什么
  • 单片机基础(STM32-DAY2(GPIO))
  • Linux驱动06 --- UDP
  • 飞书AI技术体系
  • web 系统对接飞书三方登录完整步骤实战使用示例
  • 低温冷启动 高温热启动
  • OpenCV 图像进阶处理:特征提取与车牌识别深度解析
  • 醋酸镨:闪亮的稀土宝藏,掀开科技应用新篇章
  • Spring IoC 如何注入一些简单的值(比如配置文件里的字符串、数字)?
  • 【文献阅读】Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data
  • MyBatis 使用教程及插件开发
  • 自动驾驶环境感知:天气数据采集与融合技术实战
  • AI-Sphere-Butler项目语音切换数字人管家形象功能老是开发不成功。
  • Oracle 数据库管理与维护实战指南(用户权限、备份恢复、性能调优)