2.5.6 CAPWAP状态机详解

2.5.6.1 Start to Idle

这个状态变迁发生在设备初始化完成。

¢  WTP: 开启CAPWAP状态机。    

¢  AC:  开启CAPWAP状态机。

2.5.6.2 Idle to Discovery

这个状态变迁发生是为了支持CAPWAP发现进程。    

¢   WTP:

WTP进入发现状态是为了优先去传输第一个Discovery Request message。在进入这个状态之前,WTP设置发现DiscoveryInterval timer,将DiscoveryCount counter为0.同时清理以前的发现过程中可能会从AC收到的所有信息。    

¢   AC:

由发现线程执行,且发生在收到一个发现请求报文的时候。此时,AC需要给这个报文响应一个Discovery Response message 。

2.5.6.3 Discovery to Discovery

在这个发现状态,WTP决定连接哪个AC。    

¢   WTP:

这个状态变迁发生在发现DiscoveryInterval timer触发的时候。对于这个事件的每次变迁,DiscoveryCount counter会递增。一旦WTP发送了Discovery Request message,WTP重启DiscoveryInterval timer。    

¢  AC:  

对于AC来说,这个状态变迁是无效的。

2.5.6.4 Discovery to Idle

当发现过程完毕的时候,AC的发现线程将会触发这个变迁。

¢  WTP: 

对于WTP来说,这个状态变迁是无效的。

¢  AC:  

这个状态变迁由AC发现线程执行,当发现线程传输了一个给Discovery Request回送了一个Discovery Response的时候,就会触发这个过程。

2.5.6.5 Discovery to Sulking

当WTP发现AC失败的时候会触发这个状态变迁。

¢  WTP:

发生在DiscoveryInterval timer超时的时候。 且此时DiscoveryCount变量等于MaxDiscoveries 。在进入这个状态之前,WTP必须开启SilentInterval timer 。当在Sulking状态的时候,所有收到的CAPWAP协议报文都会被忽略。    

¢   AC:

对于AC来说,这个状态变迁是无效的。

2.5.6.6 Sulking to Idle

这个状态变迁发生在WTP需要重新启动发现过程的时候。

¢  WTP:

当SilentInterval timer触发,WTP进入到这个状态。FailedDTLSSessionCount, DiscoveryCount和FailedDTLSAuthFailCount计数器被清零。     

¢  AC:  

对于AC来说,这是一个无效的状态变迁。

2.5.6.7 Sulking to Sulking

sulking状态提供安静时段,最小化DOS攻击的危险。

¢  WTP: 

在sulking状态收到的所有来自AC得报文都会被忽略。  

¢  AC:  

对于AC来说,这是一个无效的状态变迁

2.5.6.8 Idle to DTLS Setup

这个状态变迁发生在跟对端建立安全的DTLS会话的时候。

¢  WTP: 

WTP通过调用DTLSStart命令来初始化这个状态变迁,开始与选定AC进行DTLS会话,且开启WaitDTLS timer。此时,忽略了发现过程,假设WTP有本地配置的AC。

¢  AC:

从start状态进入Idle状态,监听线程自动变迁至DTLS Setup状态,调用DTLSListen命令,并且开启WaitDTLS timer。

2.5.6.9 Discovery to DTLS Setup

¢  WTP: 

WTP调用DTLSStart命令来初始化这个变迁,开始与指定AC建立DTLS会话。     

¢  AC:

对于AC来说,这是一个无效的状态变迁。

2.5.6.10 DTLS Setup to Idle

当DTLS连接失败的时候发生这个状态变迁。

¢  WTP: 

此时WTP接收到DTLSEstablishFail通知,并且FailedDTLSSessionCount或者FailedDTLSAuthFailCount counter 没有达到MaxFailedDTLSSessionRetry值。这个错误通知终止了DTLS会话的建立。当接收到这个通知,FailedDTLSSessionCount计时器会递增。

这个状态变迁也会发生在WaitDTLS timer超时的情况下。     

¢  AC:

对于AC来说,这是一个无效的状态变迁。

2.5.6.11 DTLS Setup to Sulking

当重复尝试建立DTLS连接失败的时候,会发生此状态变迁。

¢  WTP: 

当FailedDTLSSessionCount或者FailedDTLSAuthFailCount到达最大值MaxFailedDTLSSessionRetry的时候,WTP进入此状态变迁。进入这个状态,WTP必须开启SilentInterval定时器,且所有接收到的CAPWAP和DTLS协议报文将会被忽略。     

¢  AC:

对于AC来说,这是一个无效的状态变迁。

2.5.6.12 DTLS Setup to DTLS Setup

当DTLS会话建立失败的时候会发生这个状态变迁。    

¢  WTP:

对于WTP来说,这是一个无效的状态变迁

¢  AC:

当接收到一个来自DTLS的DTLSEstablishFail通知,AC监听线程初始化这个状态变迁。当收到这个通告,FailedDTLSSession Count会递增,监听线程然后调用DTLSListen命令。

2.5.6.13 DTLS Setup to Authorize

这个状态变迁发生在当一个正在建立DTLS会话需要认证才能继续进行的时候。           

¢  WTP: 

当WTP接收到DTLSPeerAuthorize通告的时候,开始这个状态变迁。在进入这个状态之前,WTP对AC的证书执行一个认证检查。    

¢  AC:  

当DTLS模块初始化DTLSPeerAuthorize通告的时候,AC监听线程处理这个状态变迁。监听线程fork一个服务线程和一个状态机内容的拷贝,然后,服务线程会对WTP证书执行认证。

2.5.6.14 Authorize to DTLS Setup

当监听线程对新进入的会话开始监听的时候,发生这个状态变迁。     

¢  WTP:

对于WTP来说,这是个无效的状态变迁

¢   AC:

当AC监听线程创建WTP内容空间和服务线程后,发生这个状态变迁。监听线程然后调用DTLSListen命令

2.5.6.15 Authorize to DTLS Connect

当通知DTLS栈会话将要建立的时候发生这个状态变迁。     

¢  WTP:

当AC证书被WTP认证成功的时候,会发生这个状态变迁。调用DTLSAccept命令来完成。    

¢  AC:

当WTP证书成功通过AC认证的时候发生这个状态变迁。调用DTLSAccept来完成。

2.5.6.16 DTLS Connect to DTLS Teardown

当DTLS会话建立失败的时候发生。

¢  WTP:

当WTP接收到一个DTLSAborted或者DTLSAuthenticateFail通告,告知这个DTLS会话建立不成功的时候,发生这个状态变迁。当因为DTLSAuthenticateFail通告发生的状态变迁,FailedDTLSAuthFailCount会增加,否则,FailedDTLSSessionCount计数器增加。这个状态变迁也在WaitDTLS 定时器超时的时候发生,此时WTP开启DTLSSessionDelete定时器。

¢  AC:

当WTP接收到一个DTLSAborted或者DTLSAuthenticateFail通告,告知这个DTLS会话建立不成功,此时FailedDTLSAuthFailCount和FailedDTLSSessionCount 不等于MaxFailedDTLSSessionRetry的时候,发生这个状态变迁。 这个状态变迁也在WaitDTLS定时器超时的时候发生。

2.5.6.17 DTLS Connect to Join

当会话成功建立的时候发生。

¢  WTP: 

当WTP接收到一个DTLSEstablished通告,表明这个DTLS会话成功建立的时候,发生这个状态变迁。当接收到这个通告FailedDTLSSessionCount计时器被设置为0.WTP进入join状态,传输Join Request给AC。WTP停止WaitDTLS定时器。     

¢  AC:

当AC接收到DTLSEstablished通告,表明这个DTLS会话成功建立的时候,发生这个状态变迁。当接收到这个通告,FailedDTLSSessionCount计时器被设置为0.AC停止WaitDTLS定时器,开启WaitJoin定时器。

2.5.6.18 Join to DTLS Teardown

当Join过程失败的时候发生。

¢  WTP:

当WTP接收到一个带有错误代码消息单元的Join响应消息,或者在Join响应中由AC提供的Image与WTP现在运行的版本不一样,且WTP的non-volatile memory中有这个请求的版本号.这个导致WTP初始化DTLSShutdown命令。当WTP接收到下面任何一个通告的时候,也会发生这个过程:DTLSAborted,             DTLSReassemblyFailure, or DTLSPeerDisconnect.WTP开启DTLSSessionDelete 定时器。

¢  AC:

发生在WaitJoin超时或者AC传送了一个带有错误码的Join Response的时候。AC初始化DTLSShutdown命令。当AC收到下面任何一个DTLS通告的时候,也会发生这个过程:DTLSAborted, DTLSReassemblyFailure,  DTLSPeerDisconnect。            此时,AC开启DTLSSessionDelete定时器。        

2.5.6.19 Join to Image Data

WTP和AC下载可执行的firmware时使用这个状态变迁。

¢  WTP:

当WTP收到了一个成功的Join Response message,告知它当前运行的版本与要求的不一样的时候,发生这个状态变迁。且此时,WTP的non-volatile storage中也没有要求的image版本。WTP初始化EchoInterval计时器。

¢  AC:

当AC发送一个Join Response给WTP之后,从WTP接受到一个Image Data Request报文,发生这个状态变迁。AC停止WaitJoin定时器,发送一个Image Data Response message给WTP。

2.5.6.20 Join to Configure

WTP和AC使用这个状态变迁来交换配置信息。

¢  WTP:

当WTP收到了一个successful Join Response message,且此时当前运行的版本与要求的一致。WTP发送一个Configuration Status Request message给AC,消息中包含了当前配置信息。

¢  AC:

当从WTP接收到Configuration Status Request message,且消息中包含指定消息元素需要覆盖WTP的配置。AC停止WaitJoin定时器,发送Configuration Status Response message,并且开启ChangeStatePendingTimer定时器。

2.5.6.21 Configure to Reset

这个状态变迁被用来重启连接。这个可能被配置阶段发生的错误导致,或者是WTP决定它有需要来重启让新的配置生效。CAPWAP Reset命令用来告诉对端它将会初始化一个DTLSteardown。

¢  WTP:

WTP接收到Configuration Status Response message告诉它有错误发生或者觉得有需要重新让新配置生效的时候,WTP进入reset 状态。

¢  AC:

AC接收到一个来自WTP的Change State Event message,当这个消息包含了因为AC的策略而不允许WTP提供服务的错误的时候,AC变迁到reset状态。这个状态变迁也会在ChangeStatePendingTimer定时器超时的时候发生。

2.5.6.22 Authorize to DTLS Teardown

这个状态变迁为了通知DTLS会话将要终止。     

¢  WTP:

当WTP认证失败的时候,发生这个状态变迁。WTP然后调用DTLSAbortSession命令终止这个DTLS会话。这个状态变迁也会发生在WaitDTLS定时器超时的情况下。WTP开启DTLSSessionDelete定时器。     

¢  AC:

这个状态变迁发生在AC认证失败的时候。AC调用DTLSAbortSession命令终止DTLS会话。这个状态变迁也会发生在WaitDTLS定时器超时的时候。AC开启DTLSSessionDelete定时器。

2.5.6.23 Configure to DTLS Teardown

这个变迁发生在因为DTLS错误导致的配置过程终止的时候。

¢  WTP:

当接收到下列任一DTLS通告:DTLSAborted,DTLSReassemblyFailure, 或者 DTLSPeerDisconnect,WTP进入这个状态。如果它接收到频繁的DTLSDecapFailure通告,WTP也有可能会终止DTLS会话。此时,WTP开启DTLSSessionDelete定时器。

¢  AC:

当接收到下列任一DTLS通告:DTLSAborted,DTLSReassemblyFailure,或者DTLSPeerDisconnect,AC进入这个状态。如果它接收到频繁的DTLSDecapFailure通告,WTP也有可能会终止DTLS会话。AC开启DTLSSessionDelete定时器。

2.5.6.24 Image Data to Image Data

image数据状态在WTP和AC在firmware下载阶段的时候使用。

¢  WTP:

ü  当WTP接收到一个表明AC有更多数据要发送的Image Data Response message的时候,WTP进入Image Data state。

ü  WTP 接收到频繁的Image Data Requests,此时,它将会重新设置ImageDataStartTimer的时间来保证它接收到下一个来自AC的Image Data Request。

ü  WTP的EchoInterval 超时的时候,这会导致WTP传输一个Echo Request message,并且重新设置它的EchoInterval定时器。

ü  WTP接收到一个来自AC的Echo Response。

¢  AC:

ü  当AC在Image数据状态下接收到来自WTP的Image Data Response message。

ü  当AC接收到一个来自WTP的Echo Request。这个会导致AC用一个Echo Response来进行响应,然后重新设置EchoInterval定时器。

2.5.6.25 Image Data to Reset

WTP下载image后重启,重新设置DTLS连接

¢  WTP:

ü   当image的下载完成,或者ImageDataStartTimer定时器超时,WTP进入reset状态。

ü    接收到一个来自AC的Image Data Response message消息的时候转入这个状态。

¢  AC:

当image传输成功完成,或者在传输过程中发生了一个错误的时候,AC进入reset状态。

2.5.6.26 Image Data to DTLS Teardown

当firmware下载过程由于DTLS错误而终止时发生

¢  WTP:

ü    接收到下面任一DTLS通告:DTLSAborted,DTLSReassemblyFailure,或者DTLSPeerDisconnect的时候

ü    收到频繁的DTLSDecapFailure通告的时候关闭DTLS会话。

此时WTP开启DTLSSessionDelete计时器。

¢  AC:

ü  当AC接收到下面任一DTLS通告:DTLSAborted,DTLSReassemblyFailure,或者DTLSPeerDisconnect的时候

ü  收到频繁的DTLSDecapFailure通告的时候关闭DTLS会话。

此时AC开启DTLSSessionDelete计时器。            

2.5.6.27 Configure to Data Check

当WTP与AC确认配置信息的时候

¢  WTP:           

从AC接收到一个成功的Configuration Status Response message的时候,WTP转入Data Check状态。此时WTP发送一个Change State Event Request message。

¢  AC:

当AC接收到来自WTP的Change State Event Request message时发生。然后,AC回应一个Change State Event Response message。此时, AC必须开启DataCheckTimer定时器,关闭ChangeStatePendingTimer定时器。

2.5.6.28 Data Check to DTLS Teardown

当WTP没有完成Data Check 交互的时候。

¢  WTP:

ü    当CAPWAP重传定时器超时,WTP仍没有接收到Change State Event Response message。         

ü    当RetransmitCount达到MaxRetransmit的时候。           

此时,WTP开启DTLSSessionDelete定时器。

¢  AC:

当DataCheckTimer定时器超时的时候进入这个状态。           

此时,AC开启DTLSSessionDelete定时器。

2.5.6.29 Data Check to Run

当控制和数据通道建立的时候

¢  WTP:

条件:当接收到来自AC的成功Change State Event Response message。

动作:WTP初始化一个数据通道,这个数据通道可选择是否由DTLS加密。开启DataChannelKeepAlive定时器,发送一个Data Channel Keep-Alive报文。然后,WTP开启EchoInterval定时器和DataChannelDeadInterval定时器。

¢  AC:

条件:当AC接收到Data Channel Keep-Alive报文,报文中的session Id与WTP在Join Request中设定的一致。           

动作:AC关闭DataCheckTimer定时器。注意,如果AC要求数据通道要加密,那么将会建立一个数据通道的DTLS会话。在接收到Data Channel Keep-Alive报文之前,AC就会发送一个自己的Data Channel Keep-Alive报文。

2.5.6.30 Run to DTLS Teardown

当DTLS发生错误的时候

¢  WTP:

条件

ü   接收到下面任何一个DTLS通告:DTLSAborted,DTLSReassemblyFailure, 或者DTLSPeerDisconnect。           

ü  接收到频繁的DTLSDecapFailure通告。           

ü  RetransmitCount达到MaxRetransmit值。           

动作

开启DTLSSessionDelete定时器。

AC:

条件

ü  接收到下面任何一个DTLS通告:DTLSAborted,DTLSReassemblyFailure, 或者DTLSPeerDisconnect。           

ü  接收到频繁的DTLSDecapFailure通告。           

ü  RetransmitCount达到MaxRetransmit值。           

ü  EchoInterval定时器触发。           

动作

开启DTLSSessionDelete定时器。

2.5.6.31 Run to Run

CAPWAP的常态。

¢  WTP:

这是WTP常态。在这个状态中,WTP每次发送一个请求给AC的时候,都会设置EchoInterval定时器。           

在这个状态中可以发生下面的事件: 

ü  Configuration Update:WTP接收到一个Configuration Update Request message。此时,WTP必须回应一个Configuration Update Response。           

ü  Change State Event:WTP接收到一个Change State Event Response,或者WTP需要初始化一个Change State Event Request。           

ü  Echo Request:WTP发送一个Echo Request或者接受到对应的Echo Response。            Clear Config Request:WTP接收到一个Configuration Request,必须产生一个对应的Clear Configuration Response。          

ü  WTP Event:WTP发送一个WTP Event Request,用于发送一些消息给AC。然后,WTP接收到来自AC的WTP Event Response。           

ü  Data Transfer:WTP发送一个Data Transfer Request或者Data Transfer Response给AC。           

ü  Station Configuration Request:WTP接收到一个Station Configuration Request,需要回应一个Station Configuration Response

¢  AC:

这是AC常态。在这个状态中,AC每次发送一个请求给WTP的时候,都会设置EchoInterval定时器。                       

ü  Configuration Update:AC发送一个Configuration Update Request message给WTP用以更新WTP的配置。然后接收到来自WTP的Configuration Update Response。          

ü  Change State Event:AC接收到一个Change State Event Request,需要回应一个Change State Event Response。           

ü  Echo Request:AC接收到一个Echo Response需要回应一个对应的Echo Request。           

ü  Clear Config Request:AC发送一个Configuration Request给WTP来清理WTP的配置,然后接收到来自WTP的Clear Configuration Response。           

ü  WTP Event:AC接收到一个来自WTP的WTP Event Request,需要回应一个对应的WTP Event Response。           

ü  Data Transfer:AC发送Data Transfer Request或者Data Transfer Response。AC接收到Data Transfer Request或者Data Transfer Response。           

ü  Station Configuration Request:AC发送Station Configuration Request或者接收到Station Configuration Response

2.5.6.32 Run to Reset

当AC或者WTP关闭连接的时候发生。可以有正常操作导致,也可能由错误导致。

¢  WTP:

WTP接收到来自AC的Reset Request

¢  AC:

AC发送一个Reset Request给WTP。

2.5.6.33 Reset to DTLS Teardown

CAPWAP reset关闭DTLS会话。

¢  WTP:

条件:WTP发送Reset Response。           

动作:WTP不调用DTLSShutdown命令,开启DTLSSessionDelete定时器。

¢  AC:

条件:当AC接收到Reset Response。           

动作:初始化DTLSShutdown命令,开启DTLSSessionDelete定时器。

2.5.6.34 DTLS Teardown to Idle

DTLS会话关闭

¢  WTP:

WTP成功清理控制层DTLS会话所关联的所有资源,或者DTLSSessionDelete定时器超时。如果存在数据层DTLS会话,那么也需要关闭,被释放所有资源。为这个状态机设置的所有定时器都要被重置。

¢  AC:

对AC来说是无效状态。

2.5.6.35 DTLS Teardown to Sulking

重复尝试建立DTLS连接失败

¢  WTP:

条件:当FailedDTLSSessionCount或者FailedDTLSAuthFailCount计时器达到MaxFailedDTLSSessionRetry值           

动作:开启SilentInterval定时器,在Sulking状态,所有接收到的CAPWAP和DTLS协议报文都必须忽略

¢  AC:

对AC来说是无效状态。

2.5.6.36 DTLS Teardown to Dead

DTLS会话被关闭

¢  WTP:

对WTP来说是无效状态

¢  AC:

AC成功清理控制层DTLS会话所关联的所有资源,或者DTLSSessionDelete定时器超时。如果存在数据层DTLS会话,那么也需要关闭,被释放所有资源。为这个状态机设置的所有定时器都要被重置。

capwap学习笔记——初识capwap(三)的更多相关文章

  1. capwap学习笔记——初识capwap(一)(转)

    初识CAPWAP 2.1 CAPWAP简介 CAPWAP——Control And Provisioning of Wireless Access Points Protocol Specificat ...

  2. capwap学习笔记——初识capwap(一)

    2 初识CAPWAP 2.1 CAPWAP简介 说了半天CAPWAP,连全称都还没说,汗-- CAPWAP--Control And Provisioning of Wireless Access P ...

  3. capwap学习笔记——初识capwap(四)(转)

    2.5.7 CAPWAP传输机制 WTP和AC之间使用标准的UDP客户端/服务器模式来建立通讯. CAPWAP协议支持UDP和UDP-Lite [RFC3828]. ¢ 在IPv4上,CAPWAP控制 ...

  4. capwap学习笔记——初识capwap(四)

    2.5.7 CAPWAP传输机制 WTP和AC之间使用标准的UDP客户端/服务器模式来建立通讯. CAPWAP协议支持UDP和UDP-Lite [RFC3828]. ¢ 在IPv4上,CAPWAP控制 ...

  5. capwap学习笔记——初识capwap(三)(下)

    2.5.6.25 Image Data to Reset WTP下载image后重启,重新设置DTLS连接 ¢  WTP: ü   当image的下载完成,或者ImageDataStartTimer定 ...

  6. capwap学习笔记——初识capwap(三)(转)

    2.5.6 CAPWAP状态机详解 2.5.6.1 Start to Idle 这个状态变迁发生在设备初始化完成. ¢  WTP: 开启CAPWAP状态机. ¢  AC:  开启CAPWAP状态机. ...

  7. capwap学习笔记——初识capwap(五)(转)

    3. CAPWAP Binding for IEEE 802.11 ¢ CAPWAP协议本身并不包括任何指定的无线技术.它依靠绑定协议来扩展对特定无线技术的支持. ¢ RFC5416就是用来扩展CAP ...

  8. capwap学习笔记——初识capwap(二)(转)

    2.5.1 AC发现机制 WTP使用AC发现机制来得知哪些AC是可用的,决定最佳的AC来建立CAPWAP连接. WTP的发现过程是可选的.如果在WTP上静态配置了AC,那么WTP并不需要完成AC的发现 ...

  9. capwap学习笔记——初识capwap(五)

    3. CAPWAP Binding for IEEE 802.11 ¢ CAPWAP协议本身并不包括任何指定的无线技术.它依靠绑定协议来扩展对特定无线技术的支持. ¢ RFC5416就是用来扩展CAP ...

随机推荐

  1. android adb命令 unable to connect to 192.168.1.155:5555

    如果使用有线网络无法用adb connect命令连接设备的话,可以选择使用无线wifi来连接. 首先在android设备上装一个叫做Adb Wireless的软件,打开wifi,然后打开adb wir ...

  2. socket listen参数中的backlog

    服务器监听时,在每次处理一个客户端的连接时是需要一定时间的,这个时间非常的短(也许只有1ms 或者还不到),但这个时间还是存在的.而这个backlog 存在的意义就是:在这段时间里面除了第一个连接请求 ...

  3. C++11 bind

    #include <iostream> #include <functional> using namespace std; int func(int a, int b) { ...

  4. 最简单的例子理解Javascript闭包

    理解Javascript的闭包非常关键,本篇试图用最简单的例子理解此概念. function greet(sth){ return function(name){ console.log(sth + ...

  5. 使用Axure RP原型设计实践01,使用概述

    首先认识Axure RP Pro 7.0软件的默认界面布局.最上面的是工具栏区域,左侧上方的是网站地图区域(sitemap),左侧中部的是部件区域(Widgets),左侧下方的是模板区域(Master ...

  6. 在ASP.NET MVC4中实现同页面增删改查,无弹出框02,增删改查界面设计

    在上一篇"在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建"中,已经搭建好了Repository层,本篇就剩下增删改查的界面了......今 ...

  7. ASP.NET Web API实践系列05,消息处理管道

    ASP.NET Web API的消息处理管道可以理解为请求到达Controller之前.Controller返回响应之后的处理机制.之所以需要了解消息处理管道,是因为我们可以借助它来实现对请求和响应的 ...

  8. TWebHttpRequest使用

    TWebHttpRequest使用 TWebHttpRequest通过HTTP GET方法,向中间件REST API申请数据. procedure TForm1.WebButton1Click(Sen ...

  9. Windows/Linux下引用jar包,并用javac/java编译运行

    Windows/Linux下引用jar包,并用javac/java编译运行,有需要的朋友可以参考下. 1> Windows 假设要引用的jar放在D:/test目录下,名字为t1.jar, ja ...

  10. 【ELK】【docker】【elasticsearch】2.使用elasticSearch+kibana+logstash+ik分词器+pinyin分词器+繁简体转化分词器 6.5.4 启动 ELK+logstash概念描述

    官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-cli-run-prod ...