Message Session Relay Protocol (MSRP) jest protokołem stosowanym w sieciach komputerowych do transmisji sekwencji powiązanych wiadomości w kontekście sesji komunikacyjnej. Aplikacja może utworzyć (zestawić) sesję za pomocą Session Description Protocol (tzw. SDP), z użyciem Session Initiation Protocol (tzw. SIP), lub gamy innych metod konfiguracji sieci, najczęściej dostępny portem TCP nr 2855.
Protokół MSRP jest zdefiniowany w dokumencie RFC 4975 ↓. Komunikaty mogą być również przekazywane przez pośredników, z pomocą rozszerzeń zdefiniowanych w dokumencie RFC 4976 ↓.
MSRP jest używany w kontekście RCS (joyn), szczególnie dla usług wiadomości błyskawicznych, transferu plików i udostępniania zdjęć.
MSRP ma podobną składnię (syntax), jak i inne protokoły tekstowe udokumentowane przez Internet Engineering Task Force (IETF), takie jak np. SIP, HTTP, czy RTSP.
Każdy komunikat jest albo zapytaniem, albo odpowiedzią (REQUEST-RESPONSE). URI są używane, komunikat zawiera nagłówki i sekcję body, które może przyjąć dowolny typ danych, w tym dane binarne. W odróżnieniu od SIP, MSRP jest bardziej uproszczone. Pierwsze 2 nagłówki zawsze są następujące To-Path i From-Path, a ostatni musi określać Content-Type (typ zawartości), to znacznie zmniejsza złożoność dla parserów. Możliwe są również:
Komunikaty muszą kończyć się 7-ma znakami myślnika („ – „), a następnie identyfikatorem transakcji, który pojawia się w pierwszej linijce, następnie flagą kontynuacji, oraz znakiem końca wiersza (CRLF). Tak standaryzowana ostatnia linia na końcu komunikatu sprawia, że jest prosto odkryć granice komunikatu. MSRP nie jest zdefiniowany do działania w CL-mode (tzw. Connectionless communication, jak np. UDP), więc nie zapewnia, że odpowiedź na zapytanie przybędzie w trakcie tego samego połączenia. MSRP również zależy od niezawodności w warstwie transportowej (vide Model OSI), to jest: gwarantuje dostawy i utrzymuje kolejność komunikatów, co jeszcze bardziej upraszcza design całego protokołu.
Stosowane są dwie metody zapytań:
Adresy URI dla MSRP jak to określono RFC 3986 ↓, są schematyczne, tj. zaczynają się od „msrp://” lub „msrps://”, oraz zawierają adres IP/nazwę organu (organizacji), opcjonalnie: numer portu, identyfikator sesji, i dodatkowe parametry.
msrp://atlanta.example.com:7531/jshA7weztas;tcp
MSRP może być stosowany w sesjach SIP:
Sesja MSRP jest zestawiana przez model oferta-odpowiedź[1] Protokół Deskrypcji Sesji (SDP), określa typ medium w linii „m” jako message (komunikat), w kolejnym miejscu protokół jako TCP/MSRP dla MSRP przez TCP, oraz jako TCP/TLS/MSRP dla bezpiecznego protokołu TLS.
Ponadto w atrybucie path podany jest jeden lub więcej adresów URI urządzeń MSRP przez które przechodzi komunikat.
Pełny przykład SDP, jak jest to podane w dokumencie RFC:
v=0 o=alice 2890844526 2890844527 IN IP4 alice.example.com s= – c=IN IP4 alice.example.com t=0 0 m=message 7531 TCP/MSRP * a=accept-types:text/plain a=path:msrp://alice.example.com:7531/2s93i9ek2a;tcp
MSRP zawiera adres i port, a w tym samym czasie wiersz c (c-line) zawiera adres, oraz wiersz m (m-line) zawiera port, to jest przyczyną niejasności. Generalnie, inne typy nośników (mediów) używają wiersza c (c-line) i m (m-line) by opisać adres, jednak MSRP RFC 4975 ↓ stanowi, że informacja ta została wyspecyfikowana również jako atrybut path. To może spowodować, że niektóre urządzenia nieprawidłowo zestawią sesję, w szczególności działające w B2BUA (Back-to-back user agent) wymaga, aby zmienić atrybut path każdemu komunikatowi MSRP w kolejce a wysyłanemu do różnych urządzeń. Aby przezwyciężyć to, artykuł RFC 6714 ↓ „CEMA for MSRP” zmienia sposób w jaki urządzenia świadome CEMA (Connection Establishment for Media Anchoring) korzystają z SDP, który rozwiązał problem wybudzenia tych urządzeń, za pomocą atrybutu (msrp-cema), oraz podjął kroki pogłębiające kwestie bezpieczeństwa i wydajności takich integracji.
Wspólna i otwarta biblioteka jest zaimplementowana w różnych językach programowania: