Message Session Relay Protocol
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ęć.
Architektura MSRP
[edytuj | edytuj kod]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ż:
- Message-ID
- Success-Report
- Failure-Report
- Byte-Range
- Status
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ń:
- SEND
- REPORT
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.
Przykład
[edytuj | edytuj kod]msrp://atlanta.example.com:7531/jshA7weztas;tcp
- msrp jest schematem
- atlanta.example.com jest adresem (organizacja)
- 7351 jest numerem użytego portu
- jshA7weztas jest identyfikatorem sesji
- tcp określono protokół transportowy
Użytkowanie w SIP
[edytuj | edytuj kod]MSRP może być stosowany w sesjach SIP:
- wiadomości błyskawiczne w trybie jeden-do-jednego lub jeden-do-wielu
- aby przesłać pliki w komunikatorach, przesyłkę slajdu prezentacji
- niektóre aplikacje do udostępniania zdjęć (np. Image Share) na podstawie wcześniejszego podziału funkcji między użytkownikami końcowymi
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.
Implementacje
[edytuj | edytuj kod]Wspólna i otwarta biblioteka jest zaimplementowana w różnych językach programowania:
Biblioteki
[edytuj | edytuj kod]- Java MSRP Peer library[2], na następujące porty:
- C#/.Net
- Java ME
- Python MSRPlib
- Centralized Conferencing framework (Sourceforge)
Klienci
[edytuj | edytuj kod]- Blink to cross-platformowy klient SIP z supportem protokołu MSRP.
- Wireshark narzędzie monitorujące ruch sieciowy
Serwery
[edytuj | edytuj kod]- Przekaźnik MSRP ma swoją implementację (open source) napisaną w Pythonie, tutaj.
- Switch MSRP również ma implementację (open source), napisaną w Pythonie, tutaj.
- Kamailio (serwer SIP) ma wbudowany przekaźnik (open source) do MSRP, napisany w C, tutaj.
Przypisy
[edytuj | edytuj kod]- ↑ RFC 3264 ↓.
- ↑ Strona internetowa MSRP Java peer library
.
Linki zewnętrzne
[edytuj | edytuj kod]- B. Campbell , R. Mahy , C. Jennings , The Message Session Relay Protocol (MSRP), RFC 4975, IETF, wrzesień 2007, DOI: 10.17487/RFC4975, ISSN 2070-1721, OCLC 943595667 (ang.).
- C. Jennings , R. Mahy , A.B. Roach , Relay Extensions for the Message Sessions Relay Protocol (MSRP), RFC 4976, IETF, wrzesień 2007, DOI: 10.17487/RFC4976, ISSN 2070-1721, OCLC 943595667 (ang.).
- T. Berners-Lee , R. Fielding , L. Masinter , Uniform Resource Identifier (URI): Generic Syntax, STD 66, RFC 3986, IETF, styczeń 2005, DOI: 10.17487/RFC3986, ISSN 2070-1721, OCLC 943595667 (ang.).
- J. Rosenberg , H. Schulzrinne , An Offer/Answer Model with Session Description Protocol (SDP), RFC 3264, IETF, czerwiec 2002, DOI: 10.17487/RFC3264, ISSN 2070-1721, OCLC 943595667 (ang.).
- C. Holmberg , S. Blau , E. Burger , Connection Establishment for Media Anchoring (CEMA) for the Message Session Relay Protocol (MSRP), RFC 6714, IETF, sierpień 2012, DOI: 10.17487/RFC6714, ISSN 2070-1721, OCLC 943595667 (ang.).