This article aims to explain the difference between acknowledged and unacknowledged GATT operations in Bluetooth Low Energy.
The two following figures show how the data flows between the GATT client and GATT server for a write operation both without and with response (unacknowledged and acknowledged).
It's good to emphasize that the terms acknowledged and unacknowledged apply to GATT operations. This is not just about the data being transmitted across the radio link but also about the data actually reaching the GATT/Application layer. On both acknowledged and unacknowledged GATT operations the data is reliably transported across the radio link. The difference between the two transfer types is in knowing if and when the data sent has actually been received by the application on the other side.
Taking 'user' type characteristics as an example: the response to write operations on these characteristics must be managed by the application. If for some reason the application is not capable of processing the write request then no response will be sent and a timeout will occur after 30 seconds, indicating to the client that it wasn't possible to accept the write request. In applications which need synchronous operation and availability of other resources, such as UART in a cable replacement application, using acknowledged operations is mandatory.
Another example is notifications and indications. Notifications are unacknowledged and indications are acknowledged. The data flow is again depicted below.
To summarize, in both unacknowledged and acknowledged data transfers the data is reliably transported across the radio link but in the former there is no guarantee of delivery at the GATT/Application layer.
On second picture: isn't it GATT Server who sends Indications and Notifications, not the Client?