5

I'm seeing an issue where the iPhone's/iOS's MTU size seems to decrease after upgrading from iOS 15 to iOS 16. Before upgrading to iOS 16, the MTU size from the phone's size was always 185 bytes, which matches what most links claim the maximum MTU for the iPhone is (example 1, example 2, and example 3).

However, after upgrading to iOS 16, the MTU sent by the iPhone decreases to 77 bytes. This is using the same phone and the exact same code for the iOS app. I am connecting to a wearable device (i.e. the iPhone is the central device and the wearable is the peripheral) that contains an nRF52 chipset and always sends an MTU request of 247 bytes.

I managed to capture sniffer logs showing the iPhone replying with an MTU of 185 when using iOS 15 (which is expected):-

enter image description here

And the sniffer log below shows how the iPhone sends a reduced MTU of 77 bytes when using iOS 16:-

enter image description here

One thing worth noting is that restarting the phone seems to temporarily fix the problem, and the MTU response from the iPhone reverts back to 185 bytes, but after a few connections the iPhone starts sending 77 bytes again. Restarting Bluetooth on the iPhone does not fix the problem, and the only way to temporarily fix this is to restart the phone.

We've managed to consistently recreate the problem on an iPhone 11, iPhone 13 Pro Max, and iPhone 14. The issue was recreated using iOS 16 and iOS 16.0.2.

Given that there's no CoreBluetooth API to modify the MTU size, this seems to be purely an iOS 16 bug, am I correct? Is there a way that we can overcome this and force the phone to revert to using the maximum MTU of 185 bytes?

General Grievance
  • 4,555
  • 31
  • 31
  • 45
Youssif Saeed
  • 11,789
  • 4
  • 44
  • 72
  • 2
    That looks like an issue at the os level. Since there doesn't appear to be a way to modify it, you could contact Apple support to try to see if they can resolve it. Though it would appear to me to be a power saving feature. Can you not break up packets of data into 77 byte portions? – MiltoxBeyond Oct 17 '22 at 03:56
  • 1
    I'm surprised at this change, but it definitely may be intentional. I would not assume it's a bug. Agreed w/ MiltoxBeyond that you should contact Apple with a TSI/DTS (https://developer.apple.com/support/technical/). An MTU request is just that: a request. The other side is free to reduce it and all devices need to deal with that. But if this creates a performance problem for you, Apple may have some guidance (at least something to hint to the system that a larger MTU would be preferred; you definitely will never be able to force it). – Rob Napier Nov 03 '22 at 14:53

1 Answers1

1

So it turns out that this was a bug/regression with iOS 16 and 16.0.2. It has since been fixed on iOS 16.1 and we have tested the fix and it is working here.

Youssif Saeed
  • 11,789
  • 4
  • 44
  • 72