Delivery Optimization is the single most widely deployed piece of peer-to-peer software in the enterprise, and almost nobody checks whether it works. It is on by default. It never throws an error when it fails. It just quietly stops peering, and your branch office downloads the same four gigabyte feature update once per device. Nothing in the Intune console will tell you. This post explains what Delivery Optimization actually is, exactly how it decides who to peer with, and how to prove from a single device whether bytes really arrived from a peer.
Delivery Optimization (DO) is a cloud-coordinated HTTP downloader with optional peer-to-peer, and Microsoft documents the default on Windows client as LAN mode, DODownloadMode value 1. Peering only happens if the device can reach the DO cloud service at *.do.dsp.mp.microsoft.com, if TCP 7680 is reachable between peers, and if the content file clears DOMinFileSizeToCache, so any one of those three silently reduces you to CDN-only with no error anywhere. Group mode (2) is the documented recommendation for multi-subnet sites, but it only works when every device resolves the same Group ID. The proof is Get-DeliveryOptimizationStatus, whose BytesFromPeers against BytesFromHttp is the only number that settles the argument - and note that Microsoft documents BytesFromHttp as already including BytesFromCacheServer, so do not add them.
The problem: 200 devices, 200 copies of the same update
Start with what the thing is, because the name is unhelpful. Delivery Optimization, abbreviated DO throughout, is not an update product. It is a downloader. Microsoft describes it as a reliable HTTP downloader with a cloud-managed solution that lets Windows devices pull content from alternate sources as well as from the normal internet servers.
Those alternate sources are two things. Other Windows devices, called peers. And a dedicated cache server, called Microsoft Connected Cache. The traditional internet servers are referred to throughout the Microsoft documentation as the HTTP source.
DO is not just for Windows Update. Microsoft publishes the full list of callers, and it is long: Windows Update quality and feature updates, drivers, language packs, Microsoft Store apps, Microsoft Defender definition updates, Intune Win32 apps, Microsoft 365 apps and updates, Microsoft Edge updates, Configuration Manager express updates, dynamic updates, Teams updates, Xbox Game Pass on PC, Windows Package Manager and the MSIX installer.
Context you need first. Not every caller can peer. Microsoft documents Windows 11 Win32 Store apps, Windows Package Manager, the MSIX installer and the MDM agent as HTTP-downloader only, with no peer-to-peer and no Connected Cache column ticked. So a device can be configured perfectly and still show zero peer bytes, simply because the thing it downloaded was never eligible. Always check the content type before you blame the network.
Here is the failure that costs money. A site has 200 Windows 11 devices behind one internet circuit. A feature update lands. In theory the first device pulls it from the content delivery network, and the other 199 pull most of it from that first device over the LAN. In practice the site pulls roughly 200 times the payload across the WAN, the circuit saturates for a working day, and the service desk gets tickets about Teams audio.
Nothing failed. That is the whole problem. DO is designed to fall back to the HTTP source seamlessly when peers are unavailable. The fallback is the feature. It also means a completely broken peering configuration produces exactly the same user experience as a perfect one, only slower and more expensive.
There are only four real failure modes, and they are all specific:
- The download mode is wrong, so peering is disabled by policy.
- The device cannot reach the DO cloud service, so it never receives a peer list.
- Devices are in different peer groups, so the cloud service never matches them.
- The peer port is blocked, so the peer list arrives and every connection to it fails.
Each one has a different fix, and each one leaves a different fingerprint on the device. The rest of this post is about reading those fingerprints.
Why it happens: how DO actually chooses a peer
Follow the chain in order. Nothing here is magic, and every hop can break independently.
First, a caller starts a download. Microsoft is explicit that DO only starts when an application or service integrated with DO starts a download. Nothing polls. Nothing runs on a schedule.
Second, the DO client on the device contacts the DO cloud service over HTTPS. It sends metadata about the content it wants. The service replies with a list of candidate peers and their IP addresses.
Third, and this is the part most people get wrong, the device connects to those peers directly over TCP. Microsoft states plainly that DO does not use multicast. It relies on the cloud service for peer discovery, resulting in a list of peers and their IP addresses, and client devices then connect to their peers to obtain download files over TCP/IP.
The gotcha that ends most investigations. No internet access to the DO cloud service means no peer list, which means no peering at all, even between two devices sitting on the same switch. Microsoft documents that to use either the peer-to-peer functionality or Microsoft Connected Cache, devices must have access to the internet and the DO cloud services. An air-gapped subnet cannot peer. This surprises people who assume peer-to-peer means local-only.
Fourth, DO downloads from peers and from the HTTP source in parallel, and tapers off the HTTP requests as the peers keep up. For background downloads Microsoft documents that DO drops the HTTP connections entirely once peers meet the minimum quality of service speed.
The six download modes, verified
Download mode is the master switch. It is one policy, DODownloadMode, and its value decides whether peering is even on the table. These are the documented values and behaviours.
| Mode | Documented behaviour | Peers? |
|---|---|---|
| HTTP Only (0) | Disables peer-to-peer caching but still allows DO to download over HTTP from the original source or a Connected Cache server. Uses DO cloud metadata for a peerless but reliable download. | No |
| LAN (1) | The documented default on Windows client. The DO cloud service finds other clients reaching the internet from the same public IP address, and those clients then connect over their private subnet IP addresses. | Yes |
| Group (2) | Peering occurs across internal subnets between devices in the same group, including remote offices. Microsoft calls this the recommended option for most organisations seeking the best bandwidth optimisation. | Yes |
| Internet (3) | Enables internet peer sources. | Yes |
| Simple (99) | Disables the DO cloud services completely, for offline environments. DO switches to this mode automatically when the cloud services are unavailable or unreachable, or when the file is smaller than the minimum cache size. | No |
| Bypass (100) | Deprecated starting in Windows 11. The download bypasses DO and uses BITS instead. | No |
Do not set download mode 100. Microsoft documents Bypass (100) as deprecated starting in Windows 11, and states that setting it can cause some content to fail to download with error code 0x80d03002. If your goal is to disable peer-to-peer, the documented value is 0. Value 99 is only for a device with no internet access. A surprising number of legacy GPOs from the Windows 10 era still carry 100, inherited from a blog post nobody re-read.
Note the automatic behaviour buried in mode 99. Microsoft documents that DO switches to Simple mode by itself when the cloud services are unreachable. So a device reporting mode 99 may not be misconfigured at all. It may be telling you that *.do.dsp.mp.microsoft.com is blocked. Microsoft's own troubleshooting guidance says exactly that: if the download mode is 99, it could indicate your device is unable to reach the DO cloud services.
What a group actually is
In LAN mode the group is implicit. It is every device that reaches the internet from the same public IP address, which usually means behind the same network address translation device. That is fine for a flat office and useless for a hub-and-spoke network.
Group mode replaces that with an explicit identifier. Two policies control it, and their interaction is the single most common source of a group that never forms.
DOGroupId takes an arbitrary group ID that the device belongs to, and Microsoft states a GUID must be used. DOGroupIdSource instead tells Windows to derive the ID from something the device already knows. These are its documented values.
| Value | Source | What it means in practice |
|---|---|---|
| 0 | Not Set | Fall back to the documented default order. |
| 1 | AD Site | Active Directory Domain Services site name. Needs a domain-joined device. |
| 2 | Authenticated domain SID | The domain security identifier. Also needs a domain. |
| 3 | DHCP Option ID | The client queries DHCP Option ID 234 and uses the returned GUID value as the Group ID. |
| 4 | DNS Suffix | The connection-specific DNS suffix. |
| 5 | Microsoft Entra tenant ID | Available from Windows 10 version 1903. The whole tenant becomes one group. |
Three documented rules decide the outcome, and you need all three.
DOGroupIdwins. Microsoft states that theDOGroupIdSourcepolicy is ignored if theDOGroupIdpolicy is also configured.- If neither is configured, the default order is AD Site (1), then authenticated domain SID (2), then Microsoft Entra tenant ID (5), in that order.
- If
DOGroupIdSourceis set to DHCP Option ID (3) or DNS Suffix (4) and those methods fail, the default behaviour above is used instead.
Group ID set, Group mode not set. Microsoft documents that the option configured in DOGroupIdSource only applies to Group (2) download mode, and that if Group (2) is not configured as the download mode the policy is ignored. A Group ID with download mode 1 does nothing at all. It is a very tidy-looking configuration that changes no behaviour whatsoever, and it survives audits because both settings individually look correct.
There is one more trap. Microsoft documents that if you configure DOGroupIdSource to anything other than 0 to 5, the policy is ignored. Not rejected loudly. Ignored.
Restricting peer selection, and the Windows 11 default change
DORestrictPeerSelectionBy narrows peer selection further, on top of the download mode. Its documented values are 0 for None, 1 for Subnet mask, which restricts peer discovery to devices within the same subnet, and 2 for Local Peer Discovery using DNS Service Discovery over multicast DNS.
Microsoft states plainly that selecting either Subnet mask (1) or Local Peer Discovery (2) prevents peer discovery across subnets. It also documents a behaviour difference that catches people migrating from Windows 10: on Windows 10 no peer selection restriction is applied by default, while on Windows 11 the default behaviour for LAN download mode 1 restricts peers to the local subnet.
The Windows 10 to Windows 11 regression that is not a bug. If your LAN-mode peering efficiency dropped when a site moved to Windows 11, this is probably why. Microsoft documents Windows 11 LAN mode as restricting peers to the local subnet by default. A site with six VLANs behind one NAT device used to be one peer group on Windows 10 and is now six. The documented answer is Group (2) mode, not a registry hack.
The silent disqualifiers
Even with a perfect mode and group, a device can refuse to peer because it fails a documented eligibility check. These are the defaults, and every one of them is a real reason for zero peer bytes.
| Setting | Documented default | Why it blocks peering |
|---|---|---|
DOMinFileSizeToCache | 50 MB | Content smaller than this is never cached for peering. Microsoft recommends lowering it to 10 MB above 30 devices, and 1 MB above 100 devices. |
DOMinRAMAllowedToPeer | 4 GB | Devices with less RAM than this do not peer at all. |
DOMinDiskSizeAllowedToPeer | 32 GB | Total disk capacity, checked against the cache working directory if the cache drive was moved. |
DOMaxCacheAge | 259,200 seconds (3 days) | After this the content leaves the cache and stops being available to peers. A value of 0 means unlimited. |
DOMaxCacheSize | 20 percent of available drive space | The cache is trimmed to stay under this, evicting content other devices still need. |
DOAllowVPNPeerCaching | Not allowed | By default, if a VPN connection is detected, peering is not allowed, except when Local Discovery is chosen. |
DOMinBatteryPercentageAllowedToUpload | Uploads off on battery | By default devices do not upload while on battery. Downloading from peers still works. |
Two of these deserve emphasis. The 50 MB default means a fleet whose largest regular download is a 40 MB Intune app will show zero peering forever, correctly. And the VPN rule is keyword-based: Microsoft documents the default keyword list as "VPN", "Secure" and "Virtual Private Network", matched against the network adapter Description and FriendlyName strings. An adapter called SecureConnect matches "Secure" and silently disables peering.
The ports, and what is actually listening
Microsoft publishes a ports table for DO. These are the documented entries.
| Port | Protocol | Documented function |
|---|---|---|
| 7680 | TCP/IP | Peer-to-peer content sharing between devices on the network. |
| 3544 | UDP | Teredo NAT traversal to discover and connect to peers across NATs. Required when using DownloadMode Group (2) or Internet (3). |
| 443 | HTTPS / TLS 1.2 | Communication between the DO client and cloud service for HTTPS content. |
| 67 | UDP | DHCP client, inbound responses for DHCP-based groups and cache server discovery. |
| 68 | UDP | DHCP client, outbound responses for DHCP-based groups and cache server discovery. |
Microsoft notes that port 7680 is automatically registered and opened by the DO service, and that blocking it disables peer-to-peer while leaving HTTP downloads over 80 and 443 working. That is the exact shape of the failure: everything still downloads, just never from a peer.
Windows ships two inbound Windows Defender Firewall rules for this. On a Windows 11 Enterprise device I checked, both are present and enabled by default:
| Rule name | Display name | Filter |
|---|---|---|
DeliveryOptimization-TCP-In | Delivery Optimization (TCP-In) | Inbound, Allow, TCP local port 7680, all profiles |
DeliveryOptimization-UDP-In | Delivery Optimization (UDP-In) | Inbound, Allow, UDP local port 7680, all profiles |
If your Endpoint Security firewall profile in Intune sets the inbound default to Block and does not merge local rules, those two rules stop applying. That is a configuration you own, not a Windows default.
System files, the service, and where the state lives
DO runs as a single service. Its short name is DoSvc and its display name is Delivery Optimization. On the Windows 11 device I inspected, the service registry key reports these values, which you can read yourself.
ImagePath = %SystemRoot%\System32\svchost.exe -k NetworkService -p
ServiceDll = %SystemRoot%\system32\dosvc.dll
ObjectName = NT Authority\NetworkService
DependOnService = rpcss
So the binaries involved are these. All of them exist in C:\Windows\System32 on Windows 11, and I verified each one on disk before listing it.
| File | Role |
|---|---|
C:\Windows\System32\dosvc.dll | The service DLL itself. It is the value of ServiceDll under the DoSvc key, and the service display name and description strings are resource entries inside it. |
C:\Windows\System32\doclient.dll | Present on Windows 11. Name and location verified on disk; Microsoft does not publish a per-DLL role description, so treat the role as inferred. |
C:\Windows\System32\dosettings.dll | Present on Windows 11. Same caveat as above. |
C:\Windows\System32\domgmt.dll | Present on Windows 11. Notable because the second family of DO trace files on disk is named domgmt.*.etl. |
C:\Windows\System32\domiprov.dll | Present on Windows 11, alongside DeliveryOptimizationMIProv.mof. This is the management-infrastructure provider that backs the PowerShell cmdlets. |
Why the DLL roles are hedged. Microsoft documents the service, the cmdlets and the policies, but does not publish a file-by-file breakdown of the DO binaries. I have listed only files I confirmed exist on a live Windows 11 Enterprise device, and I have labelled the roles I inferred as inferred. Do not write detection logic against an undocumented DLL name - it can change in any update.
There is no scheduled task. I enumerated every task under \Microsoft\Windows\ on a Windows 11 device and found nothing that drives DO. This is consistent with the documented design: DO only starts when an integrated caller starts a download, so there is nothing for a scheduler to trigger. If you were looking for a DO task to check the state of, there is not one, and that is expected.
How to verify: prove the bytes before you change anything
Everything in this section is read-only. Run it before you touch a single policy.
Step 1: what mode is this device actually in, and who set it
Two cmdlets answer this. Get-DODownloadMode returns the currently active download mode as a string. Get-DOConfig lists the local configuration and policies applied to DO, and Microsoft documents that each policy is listed with the current set value and the provider of that policy. That provider field is the part people miss, and it is how you tell a Group Policy value from an Intune value from a platform default.
Read the output as a chain. The cmdlet gives you the effective value. The provider field gives you the reason. If the two disagree with your intent, you have a policy conflict, not a network problem.
Step 2: the registry reference for the whole feature area
Every DO policy lands in one key. Microsoft publishes the registry key name for each setting in the Policy CSP documentation, and it is the same key for all of them. I also confirmed the value names directly from the shipping administrative template, C:\Windows\PolicyDefinitions\DeliveryOptimization.admx, which is the authoritative on-device source.
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization
| Value name | Type | What it controls |
|---|---|---|
DODownloadMode | DWORD | 0, 1, 2, 3, 99 or 100. The master switch. |
DOGroupId | String | Explicit group GUID. Wins over DOGroupIdSource. |
DOGroupIdSource | DWORD | 0 to 5. Ignored outside Group (2) mode. |
DORestrictPeerSelectionBy | DWORD | 0 None, 1 Subnet mask, 2 Local discovery (DNS-SD). |
DOMinFileSizeToCache | DWORD | Minimum peerable content size in MB. Default 50. |
DOMaxCacheSize | DWORD | Cache ceiling as a percentage, 1 to 100. Default 20. |
DOAbsoluteMaxCacheSize | DWORD | Cache ceiling in GB. Overrides DOMaxCacheSize. |
DOMaxCacheAge | DWORD | Seconds. Default 259200. 0 means unlimited. |
DOModifyCacheDrive | String | Alternate cache location. Default is %SYSTEMDRIVE%. |
DOMinRAMAllowedToPeer | DWORD | GB of RAM required to peer. Default 4. |
DOMinDiskSizeAllowedToPeer | DWORD | GB of disk required to peer. Default 32. |
DOMinBackgroundQos | DWORD | Minimum background QoS in KB/s. Default 20 MB/s. |
DOMonthlyUploadDataCap | DWORD | GB uploaded to internet peers per month. Default 20. |
DOAllowVPNPeerCaching | DWORD | 0 not allowed, 1 allowed. |
DOVpnKeywords | String | Comma-separated keywords used to recognise a VPN adapter. |
DOMinBatteryPercentageAllowedToUpload | DWORD | Battery floor for uploads, 1 to 100. |
DODelayBackgroundDownloadFromHttp | DWORD | Seconds to hold off the HTTP source on background downloads. |
DODelayForegroundDownloadFromHttp | DWORD | Seconds to hold off the HTTP source on foreground downloads. |
DOCacheHost | String | Comma-separated Connected Cache FQDNs or IP addresses. |
DOCacheHostSource | DWORD | 1 DHCP Option 235, 2 DHCP Option 235 Force. |
DODelayCacheServerFallbackBackground | DWORD | Seconds before falling back from the cache server, background. |
DODelayCacheServerFallbackForeground | DWORD | Seconds before falling back from the cache server, foreground. |
DODisallowCacheServerDownloadsOnVPN | DWORD | 1 blocks Connected Cache downloads over VPN. |
DOMaxForegroundDownloadBandwidth | DWORD | Absolute foreground cap in KB/s. 0 is dynamic. |
DOMaxBackgroundDownloadBandwidth | DWORD | Absolute background cap in KB/s. 0 is dynamic. |
DOPercentageMaxForegroundBandwidth | DWORD | Foreground cap as a percentage. 0 is dynamic. |
DOPercentageMaxBackgroundBandwidth | DWORD | Background cap as a percentage. 0 is dynamic. |
Two of the ADMX-backed settings split into four values each rather than one. The business-hours throttles write DOSetHoursToLimitForegroundDownloadBandwidth_From, _To, _In and _Out, and the same four suffixes for the background equivalent. If you are writing a detection script, look for the suffixed names, not the base name.
Here is what that key looks like in Registry Editor on a device where the policy is set by Group Policy.
Intune-applied settings do not land here. They land under the policy manager key, which is worth knowing because it is where you prove the MDM channel delivered the setting. On the Windows 11 device I checked, each value also has companion _ProviderSet and _WinningProvider values.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\current\device\DeliveryOptimization
Never write to either key by hand to "fix" this. The policy manager key is owned by the MDM stack and the policies key is owned by Group Policy. Editing either one directly gives you a value that the next policy refresh either reverts or, worse, leaves in place while the console still shows something different. Fix DO in the management tool that owns it. Read the registry to diagnose, never to remediate.
Step 3: prove the bytes
This is the step that settles arguments. Get-DeliveryOptimizationStatus returns a real-time snapshot of all current DO jobs, one object per file. These are the documented fields that matter for peering.
| Field | Documented meaning | How to read it |
|---|---|---|
BytesFromPeers | Total bytes downloaded from peer devices, the sum of LAN, Group and Internet peers. | Non-zero is the proof. Zero is the question. |
BytesFromHTTP | Total bytes received over HTTP. Represents all HTTP sources, which includes BytesFromCacheServer. | Never add this to the cache server figure. It already contains it. |
BytesFromCacheServer | Total bytes received from the Connected Cache server. | A subset of BytesFromHTTP. |
BytesFromLanPeers | Bytes from peers found on the LAN. | What you want to see in mode 1. |
BytesFromGroupPeers | Bytes from peers found in the group. Group mode is LAN plus Group, so LAN peers are counted in the LAN field. | Zero here with a non-zero LAN figure is normal in Group mode. |
PercentPeerCaching | The percentage of bytes downloaded from peers versus over HTTP. | The per-file headline number. |
NumPeers | The total number of peers returned from the service. | Zero means the cloud service offered nobody. That is a discovery failure, not a transfer failure. |
DownloadMode | The DO download mode value. | Confirms the mode that was in force for this specific file. |
PredefinedCallerApplication | The last caller that initiated a request for the file. | Tells you whether the content was even peer-eligible. |
The distinction between NumPeers being zero and BytesFromPeers being zero is the most useful diagnostic split in the whole feature. Zero peers offered means the cloud service could not match this device to anyone. Peers offered but zero bytes received means the match worked and the connection failed, which points at port 7680.
Read the first block as a ratio, not an absolute. A device that has only downloaded small Intune apps will show zero peer bytes and be perfectly healthy, because of the 50 MB minimum. Read the second block as a discovery test. If NumberOfPeers is zero on both devices after Microsoft's own two-device procedure, the cloud service is not matching them.
Two more documented cmdlets are worth knowing. Get-DeliveryOptimizationPerfSnapThisMonth returns the same class of data limited to the current calendar month, which is the right window for a Patch Tuesday post-mortem. And Get-DeliveryOptimizationStatus -PeerInfo, added in Windows 10 version 2004, returns a real-time list of potential peers per file including the documented ConnectionEstablished flag. That flag is the cleanest possible answer to "is the port blocked".
Use the Microsoft troubleshooter as your second opinion. Microsoft publishes a Delivery Optimization Troubleshooter at aka.ms/do-fix, documented as a diagnostic tool that verifies device configuration, checks peer-to-peer efficiency and settings, and validates Connected Cache connectivity. It takes documented switches including -HealthCheck, -P2P, -MCC, -GenerateSupportBundle and -AsObjects. The -AsObjects switch makes it scriptable, and the support bundle is what Microsoft support will ask for anyway.
Step 4: Event Viewer, and the honest answer about Event IDs
This is where I have to correct a common assumption, including one I started with. There is no Microsoft-Windows-DeliveryOptimization/Operational event log channel on Windows 11. I enumerated every event log on a Windows 11 Enterprise device and found no Delivery Optimization channel at all.
What does exist is an event provider. Two of them, in fact, named DeliveryOptimization and Microsoft-Windows-DeliveryOptimization. The second links to the Application log, and its manifest defines exactly one event. Its description template is "The policy '%1' was set with the value '%2', which is invalid and will be ignored." That is the entire published event surface.
Do not build DO monitoring on Event Viewer. One provider event, in the Application log, fired only when a policy value is invalid. That is useful for catching a DOGroupIdSource of 7, and useless for everything else. If a vendor dashboard claims to monitor Delivery Optimization health from the Windows event log, ask which Event ID. There is no operational channel to read.
Step 5: the log files that do carry the detail
The real diagnostic detail is in Event Tracing for Windows trace files, not text logs. They live in the service profile of the account DoSvc runs as.
C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Microsoft\Windows\DeliveryOptimization\Logs
| Path or file pattern | What it holds |
|---|---|
...\DeliveryOptimization\Logs\dosvc.*.etl | The main service trace. Every download decision, every cloud-service call, every peer connection attempt. |
...\DeliveryOptimization\Logs\domgmt.*.etl | A second, smaller trace family written alongside it. |
...\DeliveryOptimization\Cache\ | The peer cache itself, one folder per content item. This is the working directory reported by Get-DOConfig. |
...\DeliveryOptimization\State\ | Service state files. Undocumented format - read the cmdlets, not these. |
You do not open ETL files in a text editor. Microsoft documents Get-DeliveryOptimizationLog for this, and states that if no path is specified it reads all logs from the DoSvc log directory, which requires administrator permissions.
That hr = 80072ee7 is worth decoding, because it turns a vague network complaint into a specific one. 0x80072EE7 wraps WinINet error 12007, which Microsoft documents as ERROR_INTERNET_NAME_NOT_RESOLVED, "The server name could not be resolved." A name resolution failure against geo.prod.do.dsp.mp.microsoft.com means DNS or a proxy is eating the DO cloud service. No cloud service means no peer list, which means no peering.
Step 6: the port test Microsoft actually documents
If peers are being offered but no bytes arrive, test the port directly between two devices. Microsoft documents both a Telnet test and the modern equivalent.
That idle-shutdown behaviour is the reason a single failed port test proves nothing. Confirm the target is listening before you conclude the firewall is at fault. This is the most common false positive in DO troubleshooting.
The fix: mode, group, port, and the delay policies
Decide the mode first, because everything else follows from it.
If a site is one flat network behind one NAT device, LAN mode (1) is enough, and it is already the default. If a site has multiple subnets or VLANs, or you want remote offices to peer, Microsoft documents Group mode (2) as the answer, and calls it the recommended option for most organisations looking to achieve the best bandwidth optimisation.
For Group mode, pick one Group ID strategy and apply it consistently. Microsoft documents the DHCP option approach as querying DHCP Option ID 234 and using the returned GUID value as the Group ID, which is attractive because it makes the group follow the network rather than the device object. The alternative is an explicit DOGroupId GUID per site, which is more work and completely deterministic.
Configuring it in Intune, click by click
- Sign in to the Microsoft Intune admin center.
- Select Devices, then Manage devices, then Configuration, then Create, then New Policy.
- For Platform, select Windows 10 and later.
- For Profile type, select Templates, then Delivery Optimization.
- Select Create.
- On the Basics page, give the profile a name and a description, then select Next.
- On the Configuration settings page, set Download Mode to Group (2), then set Select the source of Group IDs or Group ID according to the strategy you chose. Then select Next.
- On the Scope tags page, add scope tags if you use them, then select Next.
- On the Assignments page, target a pilot group first, not All Devices. Then select Next.
- On the Review + create page, select Create.
The template changed under you in April 2025. Microsoft documents that in April 2025 the settings format of the Delivery Optimization template was updated, that profiles for this new platform use the settings format found in the Settings Catalog, and that you can no longer create new versions of the old profile. Existing instances of the old profile remain available to use. So if your tenant has both an old-format and a new-format DO profile assigned to the same devices, expect to spend an afternoon working out which one is winning. Check DownloadModeProvider from Get-DOConfig on a real device rather than trusting the console.
If you prefer the raw CSP, every setting has a documented OMA-URI under one path. The device-scope prefix is the same for all of them.
./Device/Vendor/MSFT/Policy/Config/DeliveryOptimization/
Example: ./Device/Vendor/MSFT/Policy/Config/DeliveryOptimization/DODownloadMode
Configuring it in Group Policy, click by click
- Open the Group Policy Management Console and edit a GPO scoped to the site.
- Expand Computer Configuration, then Policies, then Administrative Templates, then Windows Components, then Delivery Optimization.
- Open Download Mode, set it to Enabled, and choose Group (2) from the drop-down.
- Open Select the source of Group IDs, set it to Enabled, and choose DHCP Option ID (3). Alternatively skip this and use Group ID with an explicit GUID per site.
- Open Minimum P2P Content File Size (in MB) and set it to 10 for a site above 30 devices, or 1 above 100 devices.
- Open Delay background download from http (in seconds) and set 60. Open Delay Foreground download from http (in seconds) and set 30.
- Open Minimum Background QoS (in KB/s) and set a value below your observed average download speed.
- Close the editor and let the GPO replicate, then run
gpupdate /target:computeron a pilot device.
The administrative template file behind that node is DeliveryOptimization.admx, and Microsoft documents it as the ADMX file name for every one of these settings. Both a Group Policy path and an Intune path exist for DO, which is not true of every feature, so you are free to choose.
The values Microsoft actually recommends
Microsoft publishes a summary table of basic configuration recommendations. These are its documented values, not mine.
| Use case | Policy | Recommended value |
|---|---|---|
| Use peer-to-peer | DownloadMode | 1 or 2 |
| Do not use peer-to-peer | DownloadMode | 0 |
| Large device count | MinFileSizeToCache | 1 MB for a peer group above 100 devices |
| Idle system resources | MaxCacheAge | 7 days (604800 seconds) |
| Improve P2P efficiency | MinBackgroundQoS plus the two HTTP delay policies | 500 KB/s, and 60 seconds background / 30 seconds foreground |
| Using Connected Cache | The two cache-server fallback delays | 60 seconds background / 30 seconds foreground |
Minimum Background QoS is counter-intuitive. Microsoft documents that when the measured peer speed falls below the configured threshold, content is downloaded from both peers and the HTTP source, and once the threshold is reached the HTTP connections are closed and downloads continue only from peers. It then says setting a lower threshold makes it easier to meet the limit, which means more content comes from peers. So a lower number increases peering. The documented default is 20 MB/s, which most branch LANs will never sustain, so the default keeps HTTP connections open.
The port, and what not to do about it
Do not create a firewall rule for 7680. Windows already ships two, DeliveryOptimization-TCP-In and DeliveryOptimization-UDP-In, and Microsoft documents that port 7680 is automatically registered and opened by the DO service. Your job is to confirm nothing in your own Endpoint Security firewall profile or your network firewall is overriding them.
Two things to check on the network side. Allow TCP 7680 between the subnets you want to peer, in both directions. And if the peer group spans NAT boundaries in Group or Internet mode, allow UDP 3544 for Teredo, plus the documented Teredo server hostname win1910.ipv6.microsoft.com. Microsoft lists that hostname explicitly under "For group peers across multiple NATs (Teredo)".
The DO service endpoints must also be reachable. Microsoft documents these hostnames for the firewall allowlist: *.do.dsp.mp.microsoft.com for client-to-cloud communication, and *.dl.delivery.mp.microsoft.com plus *.windowsupdate.com for DO metadata.
Where Microsoft Connected Cache fits
Connected Cache is a software-only caching solution that delivers Microsoft content, and Microsoft documents two main offerings: one for internet service providers, in preview, and one for Enterprise and Education, generally available. Both are created and managed in the Azure portal. There is also a separate Connected Cache in Configuration Manager.
The important architectural point is that it does not replace peering. Microsoft states that when DO is configured to use peers and Connected Cache, the client connects to both in parallel, with no prioritisation between the two. If neither can supply the content, DO falls back to the HTTP source.
If you only change one thing this quarter. Set the two HTTP delay policies. Microsoft documents 60 seconds for background and 30 seconds for foreground as a good starting point, and the whole purpose is to stop DO racing off to the CDN before peers have had a chance to answer. It costs nothing, it cannot break a download because the fallback still happens, and on a Patch Tuesday it is the difference between a peer group that works and one that technically exists.
One ordering detail if you use both peers and Connected Cache. Microsoft documents that when both the HTTP delay policies and the cache-server delay policies are configured, both timers start from the beginning of the download and are not additive. If both are 60 seconds, fallback from the cache server to the HTTP source is immediate once the HTTP delay expires. The documented guidance is to set the cache-server delay higher than the HTTP delay.
Proof it worked: a real read-only run
The companion script for this post is Get-DeliveryOptimizationEfficiency.ps1. It reports the effective download mode with its documented meaning, the Group ID surface and how the group would be derived, the cache location and its size and thresholds, the state of both in-box firewall rules and whether anything is listening on 7680, and then the actual peering efficiency from three independent sources. It is read-only. It never calls a Set cmdlet, never clears or pins the cache, never touches a firewall rule, and never passes -Flush to the log cmdlet because -Flush stops the service.
The output below is a genuine run on a domain-joined, Intune-managed Windows 11 Enterprise device. Identifiers are replaced. It is a useful example precisely because the device is not healthy.
Read that as a narrowing exercise. The mode allows peering. The port is open and listening. So if there are no peer bytes, the failure must be discovery. The next section of the same run says exactly that.
That is the whole method in one screen. Zero peers offered plus an open port plus a name-resolution failure against the DO cloud service equals a proxy or DNS problem, not a Delivery Optimization problem. Without the byte counters you would have guessed. With them you have a specific hostname to take to the network team.
Note also what the same run proves about Connected Cache. This device pulled 4.66 GB from a cache server this month with no DOCacheHost configured at all, which is consistent with Microsoft's documented behaviour of downloading from a Connected Cache server hosted by an internet service provider. Peering was broken. Caching was not. Those are genuinely separate paths.
Community deep-dives worth reading
I fetched and read both of these before citing them.
| Author | Article | Why it is worth your time |
|---|---|---|
| Maurice Daly, MSEndpointMgr | Deep Dive: Delivery Optimization Troubleshooting & Reporting | Goes into the troubleshooter script, TCP 7680 and UDP 3544, the Windows 10 versus Windows 11 DNS-SD difference, and Log Analytics queries for fleet-wide DO efficiency. |
| Anders Ahl, MSEndpointMgr | Microsoft Delivery Optimization: Implementation, Benefits, and Recommended Practices | End-to-end implementation walkthrough including the network prerequisites and where Connected Cache changes the maths. |
References
- What is Delivery Optimization? - Microsoft Learn. The content-type support matrix and the NAT default.
- Delivery Optimization reference - Microsoft Learn. Every policy, every default, the download mode table and the Bypass deprecation.
- Configure Delivery Optimization for Windows - Microsoft Learn. The ports table, the firewall hostnames and the recommended-values summary.
- Monitor Delivery Optimization - Microsoft Learn. The cmdlets and every field they return.
- Troubleshoot Delivery Optimization - Microsoft Learn. The two-device test and the port 7680 check.
- Delivery Optimization Frequently Asked Questions - Microsoft Learn. Why the service is not listening on 7680, and the documented P2P efficiency ranges.
- Policy CSP - DeliveryOptimization - Microsoft Learn. OMA-URIs, allowed values and the registry key name for each setting.
- Windows Delivery Optimization settings in Microsoft Intune - Microsoft Learn. The profile creation steps and the April 2025 template change.
- Microsoft Connected Cache overview - Microsoft Learn.
- Error Messages (Wininet.h) - Microsoft Learn. Where 12007 and
ERROR_INTERNET_NAME_NOT_RESOLVEDare defined.
The companion script lives at github.com/Imran76Awan/Windows-11-Scripts under delivery-optimization-peer-caching-internals. It is read-only by design, it fails loudly rather than printing a clean report from a failed read, and it runs on both Windows PowerShell 5.1 and PowerShell 7.
Download it from Imran76Awan/Windows-11-Scripts — no sign-in required. It is read-only: it reports and never changes a device or anything in Intune. Validate it in your own environment before relying on the output.