зеркало из https://github.com/microsoft/msquic.git
Update DocFx after documentation changes.
This commit is contained in:
Родитель
a7a1361481
Коммит
b0a7c75923
|
@ -201,6 +201,9 @@ Any time the <code>LoadBalancingMode</code> is updated, the server must be resta
|
|||
<h2 id="overloaded-worker-threads">Overloaded Worker Threads</h2>
|
||||
<p>MsQuic uses worker threads internally to execute the QUIC protocol logic. For each worker thread, MsQuic tracks the average queue delay for any work done on one of these threads. This queue delay is simply the time from when the work is added to the queue to when the work is removed from the queue. If this delay hits a certain threshold, then existing connections can start to suffer (i.e. spurious packet loss, decreased throughput, or even connection failures). In order to prevent this, new connections are rejected with the SERVER_BUSY error, when this threshold is reached.</p>
|
||||
<p>The queue delay threshold can be configured via the <code>MaxWorkerQueueDelayMs</code> setting.</p>
|
||||
<h2 id="version-negotiation">Version Negotiation</h2>
|
||||
<p>MsQuic supports QUIC protocol versions 1 and 2, and the version negotiation extension. By default, version negotiation is off, but can be enabled at runtime.
|
||||
Instructions for configuring and deploying QUIC versions are at <a href="Versions.html">Versions</a>.</p>
|
||||
<h1 id="diagnostics">Diagnostics</h1>
|
||||
<p>For details on how to diagnose any issues with your deployment at the MsQuic layer see <a href="Diagnostics.html">Diagnostics</a>.</p>
|
||||
|
||||
|
|
|
@ -451,6 +451,13 @@ Generally MsQuic already choses the best / most correct default values for all s
|
|||
<td>Unset</td>
|
||||
<td>Sets the list of QUIC versions that is supported and negotiated by every single QUIC server instance in this deployment. Used to generate the AvailableVersions list in the Version Negotiation Extension Transport Parameter.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Version Negotiation Ext. Enabled</td>
|
||||
<td>uint32_t</td>
|
||||
<td>VersionNegotiationExtEnabled</td>
|
||||
<td>0 (FALSE)</td>
|
||||
<td>Enables the Version Negotiation Extension.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>The <code>uint32_t[]</code> type is a <code>REG_BINARY</code> blob of the versions list, with each version in little-endian format.</p>
|
||||
|
@ -545,6 +552,12 @@ Generally MsQuic already choses the best / most correct default values for all s
|
|||
<td>Set-Only</td>
|
||||
<td>Globally change the stateless reset key for all subsequent connections.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>QUIC_PARAM_GLOBAL_VERSION_NEGOTIATION_ENABLED</code><br> (preview)</td>
|
||||
<td>uint8_t (BOOLEAN)</td>
|
||||
<td>Both</td>
|
||||
<td>Globally enable the version negotiation extension for all client and server connections.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="registration-parameters">Registration Parameters</h2>
|
||||
|
@ -595,6 +608,12 @@ Generally MsQuic already choses the best / most correct default values for all s
|
|||
<td>Set-only</td>
|
||||
<td>Calls <code>SetCredentialsAttributesW</code> with the supplied attribute and buffer on the credential handle. Schannel-only. Only valid once the credential has been loaded.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>QUIC_PARAM_CONFIGURATION_VERSION_NEG_ENABLED</code><br> (preview)</td>
|
||||
<td>uint8_t (BOOLEAN)</td>
|
||||
<td>Both</td>
|
||||
<td>Enables the version negotiation extension for all client connections on the configuration.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="listener-parameters">Listener Parameters</h2>
|
||||
|
|
|
@ -132,7 +132,7 @@ Settings.FullyDeployedVersionsListLength = 2;
|
|||
<p>A server application may also want to restrict the QUIC versions it supports to ensure a specific feature is available, or to prevent older versions of QUIC from being used.
|
||||
Configuring the QUIC versions on a MsQuic server is similar to configuring them on a client, however, the setting for server <strong>MUST</strong> be set globally, and not on the <code>QUIC_CONFIGURATION</code> used for the <code>QUIC_LISTENER</code> or <code>QUIC_CONNECTION</code>.</p>
|
||||
<p>If a server is not in a fleet, or the operator/application does not ever need to change QUIC versions, then all three lists in <code>QUIC_VERSION_SETTINGS</code> <strong>MUST</strong> be the same.</p>
|
||||
<p>If a server is deployed in a fleet, and the server operator wishes to change the supported QUIC versions, the Version Negotiation specification details how that should be done, quoted here:</p>
|
||||
<p>If a server is deployed in a fleet, and the server operator wishes to change the supported QUIC versions, the <a href="https://www.rfc-editor.org/rfc/rfc9368.html#section-5">Version Negotiation specification</a> details how that should be done, quoted here:</p>
|
||||
<blockquote>
|
||||
<p>When adding support for a new version:</p>
|
||||
<ul>
|
||||
|
@ -148,6 +148,7 @@ Configuring the QUIC versions on a MsQuic server is similar to configuring them
|
|||
</ul>
|
||||
</blockquote>
|
||||
<p><strong>Note that this opens connections to version downgrades (but only for partially-deployed versions) during the update window, since those could be due to clients communicating with both updated and non-updated server instances.</strong></p>
|
||||
<h3 id="configuring-versions-via-code">Configuring Versions via code</h3>
|
||||
<p>This snippet should execute before the server's <code>QUIC_CONFIGURATION</code> is created:</p>
|
||||
<pre><code class="lang-c">QUIC_VERSION_SETTINGS Settings = { 0 };
|
||||
const uint32_t SupportedVersions[2] = {
|
||||
|
@ -167,13 +168,31 @@ MsQuic->SetParam(
|
|||
sizeof(Settings),
|
||||
&Settings);
|
||||
</code></pre>
|
||||
<h3 id="configuring-versions-via-windows-registry">Configuring Versions via Windows Registry</h3>
|
||||
<p>MsQuic supports setting the Acceptable Versions, Offered Versions, and Fully-Deployed Versions lists via the Windows registry. These settings are global for all servers and clients on the machine.
|
||||
The registry settings are overridden by settings specified in the code.
|
||||
The registry values must be created under the <code>HKLM\System\CurrentControlSet\Services\MsQuic\Parameters</code> key.
|
||||
Each list is stored in the registry as a <code>REG_BINARY</code> type, with the version numbers in little-endian (host) order.
|
||||
The registry value for Acceptable Versions must be named <code>AcceptableVersions</code>.
|
||||
The registry value for Offered Versions must be named <code>OfferedVersions</code>.
|
||||
The registry value for Fully-Deployed Versions must be named <code>FullyDeployedVersions</code>.</p>
|
||||
<p>Here's a sample .reg file that creates all three lists with QUIC version 2 first and QUIC version 1 after, in little endian order, and enables version negotiation:</p>
|
||||
<pre><code class="lang-reg">Windows Registry Editor Version 5.00
|
||||
|
||||
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MsQuic\Parameters]
|
||||
"AcceptableVersions"=hex:cf,43,33,6b,01,00,00,00
|
||||
"OfferedVersions"=hex:cf,43,33,6b,01,00,00,00
|
||||
"FullyDeployedVersions"=hex:cf,43,33,6b,01,00,00,00
|
||||
"VersionNegotiationExtEnabled"=dword:00000001
|
||||
</code></pre>
|
||||
<h1 id="quic-version-negotiation-extension">QUIC Version Negotiation Extension</h1>
|
||||
<p>The Version Negotiation Extension is on by default in our officially-released binaries. Since the standard is not yet complete, incompatible changes may be made preventing different drafts from working with each other. An application using MsQuic should be cautious about enabling the Version Negotiation Extension in production scenarios until the standard is complete.</p>
|
||||
<p>The Version Negotiation Extension is off by default in our officially-released binaries, but can be enabled via registry or <a href="Settings.html">Settings</a>.
|
||||
The Version Negotiated Extension has been standardized and is present in MsQuic since version 2.3.</p>
|
||||
<h2 id="enabling-version-negotiation-extension-on-msquic-client">Enabling Version Negotiation Extension on MsQuic Client</h2>
|
||||
<p>The Version Negotiation Extension is enabled on client when <code>QUIC_VERSION_SETTINGS</code> are set on the <code>QUIC_CONFIGURATION</code> or <code>QUIC_CONNECTION</code> via <a href="api/SetParam.html"><code>SetParam</code></a>.
|
||||
This setting <strong>MUST</strong> be set before <a href="api/ConnectionStart.html"><code>ConnectionStart</code></a> to take effect.</p>
|
||||
<h2 id="enabling-version-negotiation-extension-on-msquic-server">Enabling Version Negotiation Extension on MsQuic Server</h2>
|
||||
<p>Enabling the Version Negotiation Extension on server follows the same restrictions as setting the QUIC version on server, i.e. it <strong>MUST</strong> be set globally, using <a href="api/SetParam.html"><code>SetParam</code></a> before the <code>QUIC_CONFIGURATION</code> is opened for the server. It is set automatically when <code>QUIC_VERSION_SETTINGS</code> are set.</p>
|
||||
<p>Enabling the Version Negotiation Extension on server follows the same restrictions as setting the QUIC version on server, i.e. it <strong>MUST</strong> be set globally, using <a href="api/SetParam.html"><code>SetParam</code></a> before the <code>QUIC_CONFIGURATION</code> is opened for the server. It is set automatically when <code>QUIC_VERSION_SETTINGS</code> are set, except via registry.</p>
|
||||
|
||||
</article>
|
||||
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Загрузка…
Ссылка в новой задаче