docker stack常用命令
1、Docker Stack介绍
Docker Stack管理swarm堆栈与Swarm协调器配合使用,是Docker Swarm环境中用于管理一组相关服务的工具。它使得在Swarm集群中部署、管理和扩展一组相互关联的服务变得简单。主要用于定义和编排容器化应用的多个服务。以下是Docker Stack的一些关键特点:
- 服务集合:Docker Stack允许你在一个配置文件中定义应用的多个服务。这个配置文件通常是一个 docker-compose.yml 文件,定义了应用的服务、网络和卷。
- 简化部署:通过使用 docker stack deploy 命令,你可以一次性部署整个应用的所有服务。
- 配置管理:Docker Stack 允许你使用单个配置文件来管理多个服务的配置,这使得部署和更新变得更加一致和方便。
- 服务编排:它提供了高级的服务编排功能,如服务间的网络配置和卷挂载。
- 适用于生产环境:Docker Stack 被设计用于在生产环境中的 Docker Swarm 集群,提供了额外的可靠性和扩展性。
- 集群范围内的资源分配:Docker Stack 可以在集群的所有节点上分配和管理服务。
官方参考:docker stack | Docker Docs
2、Docker Stack常用命令
2.1 Docker堆栈配置
- 描述:合并和插值后输出最终配置文件
- 用法:docker stack config [OPTIONS]
| 选项 | 默认 | 描述 |
| -c, --compose-file | 指定compose文件的路径,或者-从stdin读取的路径 | |
| --skip-interpolation | 跳过插值并仅输出合并的配置 |
--输出两个Compose文件的合并和插值的结果
# docker stack config -c docker-compose.yml -c docker-compose.prod.yml
--Compose文件也可以作为标准输入提供--compose-file -
# cat docker-compose.yml | docker stack config --compose-file -
---跳过插值kip-interpolation
在某些情况下,跳过环境变量的插值可能会很有用。例如,当你想将此命令的输出通过管道传回时stack deploy。如果您的网络服务器的环境变量中有一个重定向路由的正则表达式,那么您将使用两个$符号来防止stack deploy插入${1}。
service: webserver
environment:
REDIRECT_REGEX=http://host/redirect/$${1}
使用插值时,stack config命令将用替换Compose文件中的环境变量REDIRECT_REGEX=http://host/redirect/${1},但当将其通过管道传回stack deploy命令时,它将再次被插值并导致未定义的行为。这就是为什么在将输出通过管道传回时,stack deploy应该始终选择--skip-interpolation选项。
# docker stack config --compose-file web.yml --compose-file web.prod.yml --skip-interpolation | docker stack deploy --compose-file -
2.2 Docker堆栈部署
- 描述:部署新堆栈或更新现有堆栈,集群管理命令,必须在Swarm管理器节点上执行。
- 用法:docker stack deploy [OPTIONS] STACK
- 别名:docker stack up
- 该deploy命令支持Compose文件版本3.0及以上。
| 选项 | 默认 | 描述 |
| -c, --compose-file | API 1.25+ Compose 文件的路径,或-从 stdin 读取 | |
| -d, --detach | true | 立即退出,而不是等待堆栈服务收敛 |
| --prune | API 1.27+ 修剪不再引用的服务 | |
| -q, --quiet | 抑制进度输出 | |
| --resolve-image | always | API 1.30+ 查询注册表以解析图像摘要和支持的平台(always,changed,never) |
| --with-registry-auth | 将注册表身份验证详细信息发送到 Swarm 代理 |
撰写文件(--compose-file)使deploy命令进行堆栈vossibility部署。
# docker stack deploy --compose-file docker-compose.yml vossibility
Ignoring unsupported options: links
Creating network vossibility_vossibility
Creating network vossibility_default
Creating service vossibility_nsqd
Creating service vossibility_logstash
Creating service vossibility_elasticsearch
Creating service vossibility_kibana
Creating service vossibility_ghollector
Creating service vossibility_lookupd
Compose文件也可以作为标准输入提供--compose-file -:
# cat docker-compose.yml | docker stack deploy --compose-file - vossibility
Ignoring unsupported options: links
Creating network vossibility_vossibility
Creating network vossibility_default
Creating service vossibility_nsqd
Creating service vossibility_logstash
Creating service vossibility_elasticsearch
Creating service vossibility_kibana
Creating service vossibility_ghollector
Creating service vossibility_lookupd
如果您的配置分为多个Compose文件,例如基本配置和特定于环境的覆盖,则可以提供多个--compose-file标志。
# docker stack deploy --compose-file docker-compose.yml -c docker-compose.prod.yml vossibility
Ignoring unsupported options: links
Creating network vossibility_vossibility
Creating network vossibility_default
Creating service vossibility_nsqd
Creating service vossibility_logstash
Creating service vossibility_elasticsearch
Creating service vossibility_kibana
Creating service vossibility_ghollector
Creating service vossibility_lookupd
您可以验证服务是否已正确创建
# docker service ls
2.3 Docker stack ls列出堆栈
- 描述:列出堆栈
- 用法:docker stack ls [OPTIONS]
- 别名:docker stack list
- 这是一个集群管理命令,必须在Swarm管理器节点上执行。
| 选项 | 默认 | 描述 |
| --format | 使用自定义模板格式化输出: 'table':以带有列标题的表格格式打印输出(默认) 'table TEMPLATE':使用给定的 Go 模板以表格格式打印输出 'json':以 JSON 格式打印 'TEMPLATE':使用给定的 Go 模板打印输出。有关使用模板格式化输出的更多信息,请参阅https://docs.docker.com/go/formatting/ |
- 显示所有堆栈信息
# docker stack ls
ID SERVICES ORCHESTRATOR
myapp 2 Kubernetes
vossibility-stack 6 Swarm
- 格式化输出(--format)
格式化选项(--format)使用Go模板漂亮地打印堆栈。
Go模板的有效占位符如下所列:
| 占位符 | 描述 |
| .Name | 堆栈名称 |
| .Services | 服务数量 |
| .Orchestrator | 协调器名称 |
| .Namespace | 命名空间 |
当使用该--format选项时,stack ls命令要么完全按照模板声明的方式输出数据,要么当使用该table指令时,同时包含列标题。
以下示例使用没有标题的模板并输出 所有堆栈的用冒号 ( ) 分隔的Name和条目:Services:
# docker stack ls --format "{{.Name}}: {{.Services}}"
web-server: 1
web-cache: 4
要以 JSON 格式列出所有堆栈,请使用以下json指令:
# docker stack ls --format json
{"Name":"myapp","Namespace":"","Orchestrator":"Swarm","Services":"3"}
2.4列出堆栈中的任务(容器)
- 描述:列出作为指定堆栈的一部分运行的任务。
- 用法:docker stack ps [OPTIONS] STACK
- 这是一个集群管理命令,必须在Swarm管理器节点上执行。
| 选项 | 默认 | 描述 |
| -f, --filter | 根据提供的条件过滤输出 | |
| -format | 使用自定义模板格式化输出: 'table':以带有列标题的表格格式打印输出(默认) 'table TEMPLATE':使用给定的 Go 模板以表格格式打印输出 'json':以 JSON 格式打印 'TEMPLATE':使用给定的 Go 模板打印输出。有关使用模板格式化输出的更多信息,请参阅 https://docs.docker.com/go/formatting/ | |
| --no-resolve | 不要将 ID 映射到名称 | |
| --no-resolve | 不要将 ID 映射到名称 | |
| -q, --quiet | 仅显示任务ID | |
命令显示堆栈中的所有任务voting
# docker stack ps voting
过滤(--filter)
过滤标志(-f或--filter)格式为一key=value对。如果有多个过滤器,则传递多个标志(例如--filter "foo=bar" --filter "bif=baz")。多个过滤标志组合为一个OR过滤器。例如, -f name=redis.1 -f name=redis.7返回redis.1和redis.7任务。
目前支持的过滤器有:
- ID
- 姓名
- 节点
- 期望状态过滤id器与任务ID的全部或前缀匹配
# docker stack ps -f "id=t" voting
过滤器name与任务名称匹配
# docker stack ps -f "name=voting_redis" voting
- 过滤node器与节点名称或节点 ID 匹配。
# docker stack ps -f "node=node1" voting
- 过滤器可以采用desired-state值running、shutdown或ready。accepted
- 格式化输出(--format)
格式化选项(--format)使用 Go 模板漂亮地打印任务输出。
Go 模板的有效占位符如下所列:
| 占位符 | 描述 | 占位符 |
| .ID | 任务编号 | |
| .Name | 任务名称 | |
| .Image | 任务形象 | |
| .Node | 节点 ID | |
| .DesiredState | 任务的期望状态(running、shutdown或accepted) | |
| .CurrentState | 任务的当前状态 | |
| .Error | 错误 | |
| .Ports | 任务发布端口 |
当使用该--format选项时,stack ps命令将完全按照模板声明的方式输出数据,或者当使用该table指令时,还包括列标题。
使用没有标题的模板并输出 所有任务的用冒号 ( ) 分隔的Name和条目:Image:
# docker stack ps --format "{{.Name}}: {{.Image}}" voting
以JSON格式列出所有任务,请使用以下json指令
# docker stack ps --format json myapp
{"CurrentState":"Preparing 23 seconds ago","DesiredState":"Running","Error":"","ID":"2ufjubh79tn0","Image":"localstack/localstack:latest","Name":"myapp_localstack.1","Node":"docker-desktop","Ports":""}
不将ID映射到名称(--no-resolve)
该--no-resolve选项显示任务名称的 ID,但不将 ID 映射到名称。
# docker stack ps --no-resolve voting
不截断输出(--no-trunc)
部署服务时,docker会解析服务镜像的摘要,并将服务固定到该摘要。默认情况下不显示摘要,但如果--no-trunc使用,则会打印。该--no-trunc选项还显示未截断的任务 ID 和错误消息,如下所示:
# docker stack ps --no-trunc voting
仅显示任务 ID (-q, --quiet)
-q或选项--quiet仅显示堆栈中的任务 ID。此示例输出voting堆栈的所有任务 ID:
# docker stack ps -q voting
此选项可用于执行批处理操作。例如,您可以使用任务 ID 作为其他命令的输入,例如docker inspect。以下示例检查voting堆栈的所有任务:
# docker inspect $(docker stack ps -q voting)
[
{
"ID": "xim5bcqtgk1b1gk0krq1",
"Version": {
<...>
2.5删除一个或多个堆栈
- 描述:删除一个或多个堆栈
- 用法:docker stack rm [OPTIONS] STACK [STACK...]
- 别:docker stack remove和docker stack down
- 这是一个集群管理命令,必须在 Swarm 管理器节点上执行。
| 选项 | 默认 | 描述 |
| -d, --detach | true | 不要等待堆栈移除 |
移除堆栈
这将删除名为myapp的堆栈,与堆栈相关的服务、网络和机密将被删除。
# docker stack rm myapp
Removing service myapp_redis
Removing service myapp_web
Removing service myapp_lb
Removing network myapp_default
Removing network myapp_frontend
移除多个堆栈
这将删除所有指定myapp和vossibility的堆栈。与所有指定堆栈关联的服务、网络和机密都将被删除。
# docker stack rm myapp vossibility
Removing service myapp_redis
Removing service myapp_web
Removing service myapp_lb
Removing network myapp_default
Removing network myapp_frontend
Removing service vossibility_ghollector
Removing service vossibility_lookupd
Removing network vossibility_default
Removing network vossibility_vossibility
2.6列出堆栈中的服务
- 描述:列出作为指定堆栈的一部分运行的服务。
- 用法:docker stack services [OPTIONS] STACK
- 这是一个集群管理命令,必须在 Swarm 管理器节点上执行。
| 选项 | 默认 | 描述 |
| -f, --filter | 根据提供的条件过滤输出 | |
| --format | 使用自定义模板格式化输出: 'table':以带有列标题的表格格式打印输出(默认) 'table TEMPLATE':使用给定的 Go 模板以表格格式打印输出 'json':以 JSON 格式打印 'TEMPLATE':使用给定的 Go 模板打印输出。有关使用模板格式化输出的更多信息,请参阅 https://docs.docker.com/go/formatting/ | |
| -q, --quiet | 仅显示 ID |
显示myapp堆栈中的所有服务:
# docker stack services myapp
过滤(--filter)
过滤标志(-f或--filter)格式为key=value一对,如果有多个过滤器,则传递多个标志(例如--filter "foo=bar" --filter "bif=baz"),多个过滤标志组合为一个OR过滤器。
以下命令显示web和db服务:
docker stack services --filter name=myapp_web --filter name=myapp_db myapp
目前支持的过滤器有:
- id / ID(--filter id=7be5ei6sqeye,或--filter ID=7be5ei6sqeye)
- 标签 (--filter label=key=value)
- 模式(--filter mode=replicated, 或--filter mode=global)
Swarm:不支持
- 姓名 (--filter name=myapp_web)
- 节点 ( --filter node=mynode)
Swarm:不支持
- 服务 (--filter service=web)
Swarm:不支持
- 格式化输出(--format)
格式化选项(--format)使用 Go 模板漂亮地打印服务输出。
Go 模板的有效占位符如下所列:
| 占位符 | 描述 |
| .ID | 服务 ID |
| .Name | 服务名称 |
| .Mode | 服务模式(复制、全局) |
| .Replicas | 服务副本 |
| .Image | 服务形象 |
当使用该--format选项时,stack services命令将完全按照模板声明的方式输出数据,或者当使用该 table指令时,还包括列标题。
使用没有标题的模板,并输出所有服务的ID、Mode和Replicas以冒号 ( :) 分隔的条目:
# docker stack services --format "{{.ID}}: {{.Mode}} {{.Replicas}}"
0zmvwuiu3vue: replicated 10/10
fm6uf97exkul: global 5/5
要以 JSON 格式列出所有服务,请使用以下json指令:
# docker stack services ls --format json
{"ID":"0axqbl293vwm","Image":"localstack/localstack:latest","Mode":"replicated","Name":"myapp_localstack","Ports":"*:4566-\u003e4566/tcp, *:8080-\u003e8080/tcp","Replicas":"0/1"}
{"ID":"384xvtzigz3p","Image":"redis:6.0.9-alpine3.12","Mode":"replicated","Name":"myapp_redis","Ports":"*:6379-\u003e6379/tcp","Replicas":"1/1"}
{"ID":"hyujct8cnjkk","Image":"postgres:13.2-alpine","Mode":"replicated","Name":"myapp_repos-db","Ports":"*:5432-\u003e5432/tcp","Replicas":"0/1"}
相关文章:
docker stack常用命令
1、Docker Stack介绍 Docker Stack管理swarm堆栈与Swarm协调器配合使用,是Docker Swarm环境中用于管理一组相关服务的工具。它使得在Swarm集群中部署、管理和扩展一组相互关联的服务变得简单。主要用于定义和编排容器化应用的多个服务。以下是Docker Stack的一些关…...
python reportlab模块----操作PDF文件
reportlab模块----操作PDF文件 一. 安装模块二. reportlab相关介绍三. 扩展canvas类四. 水平写入完整代码五. 垂直写入完整代码 一. 安装模块 pip install reportlab二. reportlab相关介绍 # 1. letter 生成A4纸张尺寸 from reportlab.lib.pagesizes import letter print(let…...
解锁基因密码之重测序(从测序到分析)
在生命科学的奇妙世界中,基因恰似一本记录着生命奥秘的“天书”,它承载着生物体生长、发育、衰老乃至疾病等一切生命现象的关键信息。而重测序技术,则是开启基因“天书”奥秘的一把神奇钥匙。 试想,你手中有一本经典书籍的通用版…...
TQTT_KU5P开发板教程---QSFP25G光口回环测试
文档实现功能介绍 本文档通过一个叫做ibert的IP,实现25G光口回环测试例子。工程新建方法请参考文档《流水灯》,其中只是将文件名进行修改。 Vivado 起始页(或 file-->Project-->New 创建新工程(Create New Project) 向导起始页面 点…...
JVM虚拟机篇(七):JVM垃圾回收器全面解析与G1深度探秘及四种引用详解
JVM垃圾回收器全面解析与G1深度探秘及四种引用详解 JVM虚拟机(七):JVM垃圾回收器全面解析与G1深度探秘及四种引用详解一、JVM有哪些垃圾回收器1. Serial回收器2. ParNew回收器3. Parallel Scavenge回收器4. Serial Old回收器5. Parallel Old回…...
柑橘病虫害图像分类数据集OrangeFruitDaatset-8600
文章目录 1. 前言2. 数据类别介绍3. 数据集地址 1. 前言 柑橘,作为水果界的 “宠儿”,不仅以其酸甜可口的味道深受大众喜爱,更是在全球水果产业中占据着举足轻重的地位。无论是早餐中的一杯橙汁,还是下午茶里的柑橘甜点ÿ…...
深度学习总结(4)
张量积 张量积(tensor product)或点积(dot product)是最常见且最有用的张量运算之一。注意,不要将其与逐元素乘积(*运算符)弄混。在NumPy中,使用np.dot函数来实现张量积,…...
利用CST Microwave Studio设计贴片天线
利用CST Microwave Studio设计贴片天线的步骤如下,分为几个关键阶段: --- ### **1. 初始设置** - **新建项目**:打开CST,创建新项目(File > New),选择“Antenna (Planar)”或“Microwave &…...
STM32之SG90舵机控制(附视频讲解)
目录 前言: 一、硬件准备与接线 1.1 硬件清单 1.2 接线 二、 SG90舵机简介 1.1 外观 1.2 基本参数 1.3 引脚说明 1.4 控制原理 1.5 特点 1.6 常见问题 三、 单片机简介 四、 程序设计 4.1 定时器配置 4.2 角度控制函数 4.3 主函数调用 五、 总结 …...
(1)英特尔 RealSense T265(三)
文章目录 前言 4.4 地面测试 4.5 飞行测试 4.6 室内外实验 4.7 数据闪存记录 4.8 启动时自动运行 4.9 使用 OpticalFlow 进行 EKF3 光源转换 前言 Realsense T265 通过 librealsense 支持 Windows 和 Linux 系统。不同系统的安装过程差异很大,因此请参阅 gi…...
Spring入门概念 以及入门案例
Spring入门案例 Springspring是什么spring的狭义与广义spring的两个核心模块IoCAOP Spring framework特点spring入门案例不用new方法,如何使用返回创建的对象 容器:IoC控制反转依赖注入 Spring spring是什么 spring是一款主流的Java EE轻量级开源框架 …...
xwiki的中文国际化
https://www.xwiki.org/xwiki/bin/view/Documentation/DevGuide/Tutorials/InternationalizingApplications/ 首先启用中文支持(参考此网页) 到Wiki的管理界面,进入Localization,在Supported Languages和Default Language里填zh&…...
多模态大语言模型arxiv论文略读(七)
MLLM-DataEngine: An Iterative Refinement Approach for MLLM ➡️ 论文标题:MLLM-DataEngine: An Iterative Refinement Approach for MLLM ➡️ 论文作者:Zhiyuan Zhao, Linke Ouyang, Bin Wang, Siyuan Huang, Pan Zhang, Xiaoyi Dong, Jiaqi Wang,…...
【操作系统(Linux)】——生产者消费者同步互斥模型
✅ 一、程序功能概述 我们将做的:实现一个经典的「生产者-消费者问题」多线程同步模型的案例,主要用到 循环缓冲区 POSIX 信号量 sem_t pthread 多线程库,非常适合理解并发控制、线程通信和缓冲区管理。 案例目标:通过多个生产…...
SQL ③-基本语法
SQL基本语法 表操作 创建表 CREATE TABLE table_name (column1 datatype constraint,column2 datatype constraint,column3 datatype constraint,... );删除表 DROP [TEMPORARY] TABLE [IF EXISTS] table_name [, table_name...];TEMPORARY:表示临时表ÿ…...
【Pandas】pandas DataFrame bool
Pandas2.2 DataFrame Conversion 方法描述DataFrame.astype(dtype[, copy, errors])用于将 DataFrame 中的数据转换为指定的数据类型DataFrame.convert_dtypes([infer_objects, …])用于将 DataFrame 中的数据类型转换为更合适的类型DataFrame.infer_objects([copy])用于尝试…...
2025年3月全国青少年软件编程等级考试(Python五级)试卷及答案
2025.03电子学会 全国青少年软件编程等级考试(Python五级)试卷 一、单选题 1.以下哪个选项不是Python中的推导式?( ) A.列表推导式 B.字典推导式 C.集合推导式 D.元组推导式 2.以下Python代码的返回结果是?( ) [x**2 for…...
esp32cam -> 服务器 | 手机 -> 服务器 直接服务器传输图片
服务器先下载python : 一、Python环境搭建(CentOS/Ubuntu通用) 一条一条执行 安装基础依赖 # CentOS sudo yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel # Ubuntu sudo apt update && sudo apt install b…...
豆浆机语音提示芯片方案:基于可远程在线更换语音的WT2003H-16S芯片
随着智能家居概念的普及,消费者对家电产品的智能化、便捷性提出了更高要求。豆浆机作为厨房常用电器,其操作便捷性和用户体验直接影响市场竞争力。传统豆浆机多依赖指示灯或简单蜂鸣器提示用户操作状态,信息传递单一且无法满足个性化需求。 在…...
解密工业控制柜:认识关键硬件(PLC)
前言 作为一名视觉开发工程师,我们不仅要做到做好自己的工作,我们更需要在工业现场学习更多知识,最近网上流传很多,“教会徒弟,饿死师傅”;在自动化行业中,在项目下来很忙的时候,我们…...
【嵌入式系统设计师】知识点:第11 章 嵌入式系统设计案例分析
提示:“软考通关秘籍” 专栏围绕软考展开,全面涵盖了如嵌入式系统设计师、数据库系统工程师、信息系统管理工程师等多个软考方向的知识点。从计算机体系结构、存储系统等基础知识,到程序语言概述、算法、数据库技术(包括关系数据库、非关系型数据库、SQL 语言、数据仓库等)…...
记录一次SSH和SFTP服务分离后文件上传权限问题
开门见山 因服务器安全需求,需要将ssh和sftp服务分离,并创建一个用户组sftpuser::sftp,根目录权限均正常。用户sftpuser仅能通过sftp访问服务器,不能通过ssh访问服务器。但是,ssh应用用户appuser::sftp通过sftp建立链…...
【深度解析】SkyWalking 10.2.0版本安全优化与性能提升实战指南
前言 Apache SkyWalking 作为云原生可观测性领域的佼佼者,在微服务架构监控中扮演着至关重要的角色。然而,官方版本在安全性、镜像体积和功能扩展方面仍有优化空间。本文将分享一套完整的 SkyWalking 10.2.0 版本优化方案,从安全漏洞修复到镜…...
面向大模型的开发框架LangChain
这篇文章会带给你 如何使用 LangChain:一套在大模型能力上封装的工具框架如何用几行代码实现一个复杂的 AI 应用面向大模型的流程开发的过程抽象 文章目录 这篇文章会带给你写在前面LangChain 的核心组件文档(以 Python 版为例)模型 I/O 封装…...
pip install pytrec_eval失败的解决方案
1、问题描述 在使用华为云 notebook 的时候,想要: !pip install transformer结果失败,阅读报错后,疑似是 pytrec_eval 库的下载问题。 于是,单独尝试: !pip install pytrec_eval发现确实是这个库安装失…...
Easysearch VS Opensearch 数据写入与存储性能对比
本文记录 Easysearch 和 Opensearch 数据写入和数据存储方面的性能对比。 准备 压测工具:INFINI Loadgen 对比版本: Easysearch 1.11.1(lucene 8.11.4)Opensearch 2.19.1(lucene 9.12.1) 节点 JVM 配置…...
【Proteus仿真】【32单片机-A009】矩阵按键系统设计
目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、按键值与LCD显示 2、矩阵按键 二、使用步骤 系统运行后,LCD1602显示当前的按键值; 当按下不同按键后显示屏更新对应的按键值。 三、硬件资…...
考研单词笔记 2025.04.09
act v表现,行动,做事,扮演,充当,担任,起作用n行为,行动,法案,法令 action n行为,行动 behave v表现,行事,守规矩,举止端…...
用一个实际例子快速理解MCP应用的工作步骤
已经有很多的文章介绍MCP server,MCP Client工作原理,这里不做太多介绍。但是很多介绍都只是侧重介绍概念,实际的工作原理理解起来对初学者还是不太友好。本文以一个智能旅游咨询系统为例,详细说明在利用 Model Context Protocol&…...
TCP 和 UDP 可以使用同一个端口吗?
TCP 和 UDP 可以使用同一个端口吗? 前言 在深入探讨 TCP 和 UDP 是否可以使用同一个端口之前,我们首先需要理解网络通信的基本原理。网络通信是一个复杂的过程,涉及到多个层次的协议和机制。在 OSI 模型中,传输层是负责端到端数…...
