Description
The Service Discovery Protocol (SDP) is a core protocol in the Bluetooth specification, defined in the 3GPP context primarily for interoperability and testing references (e.g., in 3GPP TS 36.579 for LTE-WLAN interworking tests involving Bluetooth). SDP provides a mechanism for Bluetooth devices to discover services available on other Bluetooth devices and to retrieve the attributes of those services without prior knowledge. It operates in a client-server model: the device seeking services acts as an SDP client, while the device providing services acts as an SDP server. Each service is characterized by a set of attributes stored in an SDP server's service record database. The most fundamental attribute is a Universally Unique Identifier (UUID) which identifies the service class (e.g., Serial Port, Object Push, Headset Audio Gateway). SDP uses a request-response protocol over a dedicated L2CAP channel. A client can search for services based on service class UUIDs or browse an unspecified list of services offered by a server. Once a service of interest is discovered, the client can retrieve its attributes, which include information like the RFCOMM channel number or L2CAP Protocol Service Multiplexer (PSM) needed to actually connect to and use the service. SDP itself does not provide access to the services; it only provides the information needed to establish a connection using the appropriate protocol (e.g., RFCOMM for serial emulation, L2CAP for data channels). This design allows for a dynamic environment where devices can join and leave a piconet, advertising and discovering available capabilities on the fly. It is essential for the plug-and-play user experience associated with Bluetooth technology.
Purpose & Motivation
SDP was created to address a key challenge in ad-hoc wireless personal area networks (PANs): how can two Bluetooth devices, potentially from different manufacturers and with different capabilities, automatically determine what they can do together? Without a standardized discovery mechanism, users would need to manually configure connections, severely limiting usability and the potential for seamless interoperability. The purpose of SDP is to enable this automatic service discovery, which is the foundation for Bluetooth's goal of replacing cables. It solves the problem of service identification and description in a low-power, short-range, dynamic networking environment. Before establishing a data or voice connection, devices use SDP to answer questions like 'Does the other device offer a hands-free profile?' or 'Can it receive a business card?'. This allows applications to present users with meaningful options (e.g., 'Send File' or 'Use as Audio Output') only when the remote device supports them. Its creation was motivated by the need for a simple, efficient protocol that could run on resource-constrained devices and support the wide variety of services envisioned for Bluetooth, from file transfer to telephony control. By providing this discovery layer, SDP enabled the proliferation of interoperable Bluetooth profiles and the rich ecosystem of connected devices we see today.
Key Features
- Client-server protocol for discovering services on remote Bluetooth devices
- Uses UUIDs to uniquely identify service classes and attributes
- Operates over a dedicated L2CAP channel for reliable communication
- Supports service search and service browsing requests
- Retrieves service attributes necessary for establishing a connection (e.g., RFCOMM channel, L2CAP PSM)
- Enables dynamic ad-hoc networking without pre-configuration
Evolution Across Releases
Initial referencing of Bluetooth SDP within 3GPP specifications, primarily in the context of feature interworking or device capability descriptions. The protocol itself is defined and maintained by the Bluetooth Special Interest Group (SIG). 3GPP specs reference its existence and use for certain ancillary services or testing scenarios.
Defining Specifications
| Specification | Title |
|---|---|
| TS 21.905 | 3GPP TS 21.905 |
| TS 22.977 | 3GPP TS 22.977 |
| TS 23.140 | 3GPP TS 23.140 |
| TS 23.207 | 3GPP TS 23.207 |
| TS 23.218 | 3GPP TS 23.218 |
| TS 23.228 | 3GPP TS 23.228 |
| TS 23.231 | 3GPP TS 23.231 |
| TS 23.333 | 3GPP TS 23.333 |
| TS 23.479 | 3GPP TS 23.479 |
| TS 23.701 | 3GPP TS 23.701 |
| TS 23.758 | 3GPP TS 23.758 |
| TS 23.792 | 3GPP TS 23.792 |
| TS 23.802 | 3GPP TS 23.802 |
| TS 23.849 | 3GPP TS 23.849 |
| TS 23.894 | 3GPP TS 23.894 |
| TS 23.979 | 3GPP TS 23.979 |
| TS 24.103 | 3GPP TS 24.103 |
| TS 24.147 | 3GPP TS 24.147 |
| TS 24.173 | 3GPP TS 24.173 |
| TS 24.196 | 3GPP TS 24.196 |
| TS 24.206 | 3GPP TS 24.206 |
| TS 24.228 | 3GPP TS 24.228 |
| TS 24.229 | 3GPP TS 24.229 |
| TS 24.247 | 3GPP TS 24.247 |
| TS 24.259 | 3GPP TS 24.259 |
| TS 24.281 | 3GPP TS 24.281 |
| TS 24.282 | 3GPP TS 24.282 |
| TS 24.315 | 3GPP TS 24.315 |
| TS 24.379 | 3GPP TS 24.379 |
| TS 24.385 | 3GPP TS 24.385 |
| TS 24.386 | 3GPP TS 24.386 |
| TS 24.404 | 3GPP TS 24.404 |
| TS 24.405 | 3GPP TS 24.405 |
| TS 24.406 | 3GPP TS 24.406 |
| TS 24.407 | 3GPP TS 24.407 |
| TS 24.410 | 3GPP TS 24.410 |
| TS 24.416 | 3GPP TS 24.416 |
| TS 24.428 | 3GPP TS 24.428 |
| TS 24.454 | 3GPP TS 24.454 |
| TS 24.504 | 3GPP TS 24.504 |
| TS 24.516 | 3GPP TS 24.516 |
| TS 24.528 | 3GPP TS 24.528 |
| TS 24.575 | 3GPP TS 24.575 |
| TS 24.587 | 3GPP TS 24.587 |
| TS 24.604 | 3GPP TS 24.604 |
| TS 24.606 | 3GPP TS 24.606 |
| TS 24.607 | 3GPP TS 24.607 |
| TS 24.610 | 3GPP TS 24.610 |
| TS 24.616 | 3GPP TS 24.616 |
| TS 24.628 | 3GPP TS 24.628 |
| TS 24.654 | 3GPP TS 24.654 |
| TS 24.803 | 3GPP TS 24.803 |
| TS 24.819 | 3GPP TS 24.819 |
| TS 24.930 | 3GPP TS 24.930 |
| TS 26.114 | 3GPP TS 26.114 |
| TS 26.142 | 3GPP TS 26.142 |
| TS 26.223 | 3GPP TS 26.223 |
| TS 26.233 | 3GPP TS 26.233 |
| TS 26.234 | 3GPP TS 26.234 |
| TS 26.235 | 3GPP TS 26.235 |
| TS 26.236 | 3GPP TS 26.236 |
| TS 26.237 | 3GPP TS 26.237 |
| TS 26.244 | 3GPP TS 26.244 |
| TS 26.253 | 3GPP TS 26.253 |
| TS 26.346 | 3GPP TS 26.346 |
| TS 26.347 | 3GPP TS 26.347 |
| TS 26.348 | 3GPP TS 26.348 |
| TS 26.506 | 3GPP TS 26.506 |
| TS 26.517 | 3GPP TS 26.517 |
| TS 26.802 | 3GPP TS 26.802 |
| TS 26.827 | 3GPP TS 26.827 |
| TS 26.847 | 3GPP TS 26.847 |
| TS 26.862 | 3GPP TS 26.862 |
| TS 26.881 | 3GPP TS 26.881 |
| TS 26.902 | 3GPP TS 26.902 |
| TS 26.905 | 3GPP TS 26.905 |
| TS 26.910 | 3GPP TS 26.910 |
| TS 26.914 | 3GPP TS 26.914 |
| TS 26.923 | 3GPP TS 26.923 |
| TS 26.924 | 3GPP TS 26.924 |
| TS 26.928 | 3GPP TS 26.928 |
| TS 26.937 | 3GPP TS 26.937 |
| TS 26.946 | 3GPP TS 26.946 |
| TS 26.962 | 3GPP TS 26.962 |
| TS 26.980 | 3GPP TS 26.980 |
| TS 26.982 | 3GPP TS 26.982 |
| TS 26.998 | 3GPP TS 26.998 |
| TS 27.060 | 3GPP TS 27.060 |
| TS 29.232 | 3GPP TS 29.232 |
| TS 29.238 | 3GPP TS 29.238 |
| TS 29.332 | 3GPP TS 29.332 |
| TS 29.333 | 3GPP TS 29.333 |
| TS 29.334 | 3GPP TS 29.334 |
| TS 29.414 | 3GPP TS 29.414 |
| TS 29.421 | 3GPP TS 29.421 |
| TS 29.424 | 3GPP TS 29.424 |
| TS 29.513 | 3GPP TS 29.513 |
| TS 29.514 | 3GPP TS 29.514 |
| TS 29.864 | 3GPP TS 29.864 |
| TS 31.103 | 3GPP TR 31.103 |
| TS 32.260 | 3GPP TR 32.260 |
| TS 32.272 | 3GPP TR 32.272 |
| TS 32.299 | 3GPP TR 32.299 |
| TS 33.108 | 3GPP TR 33.108 |
| TS 33.128 | 3GPP TR 33.128 |
| TS 33.203 | 3GPP TR 33.203 |
| TS 33.303 | 3GPP TR 33.303 |
| TS 33.871 | 3GPP TR 33.871 |
| TS 36.579 | 3GPP TR 36.579 |
| TS 37.579 | 3GPP TR 37.579 |