diff options
| author | Marius Peter <marius.peter@tutanota.com> | 2022-10-23 20:31:32 +0200 |
|---|---|---|
| committer | Marius Peter <marius.peter@tutanota.com> | 2022-10-23 20:31:32 +0200 |
| commit | 8526ea431759468860a436b02abfa24cc3502430 (patch) | |
| tree | fb8564087f66248d41510a87c5c7ad823f0fca3d /wiki | |
| parent | a8c435c83fbd52f8051730bfa3b7994f8c98ddb7 (diff) | |
Standards & protocols reorg.
Diffstat (limited to 'wiki')
| -rw-r--r-- | wiki/engineering/protocols/ARINC-429.org (renamed from wiki/engineering/aerospace/protocols/ARINC-429.org) | 0 | ||||
| -rw-r--r-- | wiki/engineering/protocols/CAN-bus.org (renamed from wiki/engineering/aerospace/protocols/CAN-bus.org) | 0 | ||||
| -rw-r--r-- | wiki/engineering/protocols/SIP.org | 575 | ||||
| -rw-r--r-- | wiki/engineering/standards/ARP4754.org (renamed from wiki/engineering/aerospace/standards/ARP4754.org) | 0 | ||||
| -rw-r--r-- | wiki/engineering/standards/DO-160.org (renamed from wiki/engineering/aerospace/standards/DO-160.org) | 0 |
5 files changed, 575 insertions, 0 deletions
diff --git a/wiki/engineering/aerospace/protocols/ARINC-429.org b/wiki/engineering/protocols/ARINC-429.org index 220e27d..220e27d 100644 --- a/wiki/engineering/aerospace/protocols/ARINC-429.org +++ b/wiki/engineering/protocols/ARINC-429.org diff --git a/wiki/engineering/aerospace/protocols/CAN-bus.org b/wiki/engineering/protocols/CAN-bus.org index 2abbd23..2abbd23 100644 --- a/wiki/engineering/aerospace/protocols/CAN-bus.org +++ b/wiki/engineering/protocols/CAN-bus.org diff --git a/wiki/engineering/protocols/SIP.org b/wiki/engineering/protocols/SIP.org new file mode 100644 index 0000000..6b80b96 --- /dev/null +++ b/wiki/engineering/protocols/SIP.org @@ -0,0 +1,575 @@ +# -*- mode: org; -*- + +#+TITLE: SIP +#+SUBTITLE: The Session Initiation Protocol. +#+AUTHOR: Marius Peter +#+DATE: <2022-07-12 Tue> +#+OPTIONS: toc:2 + +#+DESCRIPTION: The Session Initiation Protocol. + + +#+begin_abstract +SIP is a communication protocol used for VOIP. +#+end_abstract + + +* Introduction + +- ``Session Information Protocol'' +- Layer 7 (Application Layer) protocol + - Based on HTTP (request/response architecture for service delivery) +- VOIP, IM, video calling... +- Invite other participants into existing session +- RFC 3261 + +What SIP does /not/ do: provide the media services. + + +* Establishing and terminating multimedia sessions + +- User location :: What end system will be used to communicate? + +- User availability :: Is the called party willing to engage in + communication? + +- User capabilities :: What media and media parameters will be used? + +- Session setup :: How are session parameters established between + calling/called parties? (``Ringing'') + +- Session management :: How are sessions transferred and terminated? + How are session parameters modified? How are services invoked? + + +* User Agents +# Section 2 + +SIP endpoints are called User Agents. At the very least, two types of +UAs needed to setup a call: User-Agent Client and User-Agent Servers. + + +** UAC + +#+BEGIN_QUOTE +A user agent client is a logical entity that creates a new request, +and then uses the client transaction state machinery to send it. The +role of UAC lasts only for the duration of the transaction. In other +words, if a piece of software initiates a request, it acts as a UAC +for the duration of the transaction. If it receives a request later, +it assumes the role of a UAS for the processing of that transaction. + +From RFC 3261 +#+END_QUOTE + + +** UAS + +#+BEGIN_QUOTE +A user agent server is a logical entity that generates a response to a +SIP request. The response accepts, rejects or redirects the request. +This role lasts only for the duration of the transaction. In other +words, if a piece of software responds to a request, it acts as a UAS +for the duration of the transaction. If it generates a request later, +it assumes the role of a UAC for the processing of that transaction. + +From RFC 3261 +#+END_QUOTE + + +** B2BUA + +#+BEGIN_QUOTE +A back-to-back user agent is a logical entity that receives a request +and processes it as a UAS. In order to determine how the request +should be answered, it acts as a UAC and generates requests. Unlike a +proxy server, it maintains dialog state and must participate in all +requests sent on the dialogs it has established. Since it is the +concatenation of a UAC and a UAS, no explicit definitions are needed +for its behavior. + +From RFC 3261 +#+END_QUOTE + + +** Proxy Server + +#+BEGIN_QUOTE +A proxy server is an intermediary entity that acts as both a server +and a client for the purpose of making requests on behalf of other +clients. A proxy server primarily serves the role of routing, which +means its job is to ensure that a request is sent to another entity +``closer'' to the targeted user. Proxies are also useful for enforcing +policy (for example, making sure that a user is allowed to make a +call). A proxy interprets and, if necessary, rewrites specific parts +of a request message before forwarding it. + +From RFC 3261 +#+END_QUOTE + +A proxy does not need to be involved for requests after a dialog has +been created. + + +* SIP messages +# Section 3 + +A SIP message is either a request or a response. When a UAC sends a +request to a UAS, the UAS replies with a response, to inform the UAC +that the request was received. + + +** Message structure + +: Start line (request line for request/status line for response) +: Message headers +: Empty line +: Message body + + +** SIP request methods + +- =REGISTER= :: Register contact information +- =INVITE= :: Setting up a session +- =ACK= :: Acknowledge +- =CANCEL= :: Cancel session before other party answers +- =BYE= :: Hang up (tear down) the session +- =OPTIONS= :: Query UAS to determine capabilities, can be used as a + ``ping'' method + +RFC 3261 defines six types of REQUEST methods, other RFCs define +additional methods. + + +** SIP response codes + +- Status line for responses consists of a response code and a /reason + phrase/. +- The reason phrase has a default value, which can be overridden. +- Generated by UAS to inform UAC on transaction state. +- Responses usually have no body, but always have an empty line + following the headers. +- SIP response codes are consistent with HTTP, the reverse is not + true. + + +*** =1XX= provisional response + +- Provisional: UAS is performing some additional actions. +- Sent when UAS expects >200 ms delay to obtain final response. +- Not transmitted reliably. +- Never requires UAC to send ACK. +- May contain message bodies. +- Stops retransmission of an =INVITE= by UAC. + + +- =100 TRYING= :: Request has been received by the next-hop server, + some unspecified action (e.g. database query) is being + performed. =100 TRYING= is never forwarded upstream by a stateful + proxy. + +- =180 RINGING= :: UAS has received the =INVITE= request, the UAC + should initiate local ringback while further call processing takes + place. + +- =181 CALL IS BEING FORWARDED= :: A UAS may use this status code to + indicate that the call is being forwarded to a different set of + destinations. + +- =182 QUEUED= :: Called party is temporarily unavailable, but UAS has + decided to queue the call rather than reject it. When callee + becomes available, it will return appropriate final status response. + Reason phrase may give further details about call status, e.g. ``5 + calls queued, expected waiting time is 15 minutes''. UAS may issue + many =182 QUEUED= responses to update caller about queued call + status. + +- =183 SESSION IN PROGRESS= :: Convey information about call + progress. Typically used for ``early media session'', implying that + audio or video is being sent before call is answered. + + +*** =200 OK= + +- Only one =2XX= response. +- Implies request was successful. +- When callee picks up the phone, the phone sends a =200 OK= response. + + +*** =3XX= redirections + +- =300 MULTIPLE CHOICES= :: Address in the request resolves to more + than one choice, each with a specific location. UA can select + preferred communication endpoint and redirect communication to that + location. Response body may contain a list of resource + characteristics and locations. + +- =301 MOVED PERMANENTLY= :: User cannot be found at the address in + the request URI, requesting client should retry at new address given + by the =CONTACT= header. Requesting client should update any local + directories, address books, and user location caches with this new + value, and redirect future requests to this new address. + +- =302 MOVED TEMPORARILY= :: Requesting client should retry at the new + address. Duration of validity of the new address can be specified in + the =EXPIRES= header. If no explicit expiration time, address is + only valid once, and must not be cached for future transactions. + +- =380 ALTERNATIVE SERVICE= :: Call was unsuccessful, but alternative + services are available. These alternative services are described in + the response body. + + +*** =4XX= request failures + +- Definite failure responses +- UAC should not retry submitting the same request. +- However, same request with a different UAS might be successful. + + +- =400 BAD REQUEST= :: UAS cannot understand the request due to + malformed syntax. Reason phrase should identify the syntax error so + UAC can fix it. Associated with /fuzzing/, i.e. purposefully sending + malformed data to the UAS for a DoS attack or to compromise a + security weakness. + +- =401 UNAUTHORIZED= and =407 PROXY REQUIRES AUTHENTICATION= :: UAS + wants UAC to authenticate. Usually seen when UAC is attempting to + =REGISTER=, can also be seen for other methods. + +- =403 FORBIDDEN= :: Many systems issue this response if UAC sends an + =INVITE=, but is not registered. + +- =404 NOT FOUND= :: Request was received by UAS, but user does not + exist at the specified domain. Can also be sent if domain does not + match. Expected if you call the wrong number. + +- =405 METHOD NOT ALLOWED= :: Request method is understood, but not + allowed for the address specified in the URI. Response must include + an =ALLOW= header that contains a list of allowed methods for the + address. + +- =406 NOT ACCEPTABLE= :: The UAS cannot generate a response with a + content type that satisfies the =ACCEPT= header in the request. + +- =408 REQUEST TIMEOUT= :: The UAS cannot produce a response within a + suitable amount of time. UAC may repeat the request at any later + time. + +- =410 GONE= :: The requested resource is no longer available, and no + forwarding address is known. This condition is expected to be + permanent. If UAS does not/cannot know whether the condition is + permanent, =404 NOT FOUND= should be used instead. + +- =413 REQUEST ENTITY TOO LARGE= :: Request body is larger than the + UAS is willing or able to process. UAS may close the connection. If + condition is temporary, UAS should include a =RETRY-AFTER= header to + indicate the delay after which the UAC can try again. + +- =414 REQUEST URI TOO LONG= :: Request URI is longer than the UAS is + willing to interpret. + +- =415 UNSUPPORTED MEDIA TYPE= Request body :: format is unsupported + by UAS for the specified method. UAS must return a list of + acceptable formats using the =ACCEPT=, =ACCEPT-ENCODING=, or + =ACCEPT-LANGUAGE= headers depending on the specific problem. + +- =416 UNSUPPORTED URI SCHEME= :: The request URI scheme is unknown to + the server. + +- =420 BAD EXTENSION= :: The UAS did not understand a protocol + extension specified in the =PROXY-REQUIRE= or =REQUIRE= header + fields. UAS must return a list of unsupported extensions in an + =UNSUPPORTED= header. + +- =421 EXTENSION REQUIRED= :: UAS needs a particular extension to + process the request which is not listed in the =SUPPORTED= + header. Response must contain a =REQUIRE= header listing the + required extensions. UAS should only return this response if no + service whatsoever can be provided to the UAC. + +- =423 INTERVAL TOO BRIEF= :: Expiration time of the resource to be + refreshed is too short. + +- =480 TEMPORARY UNAVAILABLE= :: UAS was contacted successfully, but + callee is unavailable, e.g. not logged in, ``do not disturb'' + feature activated. Response may include better time to call in the + =RETRY-AFTER= header. User might be available elsewhere. Reason + phrase should include more precise reason why callee is unavailable, + and should be settable by the UA. =486 BUSY HERE= may be used for + more details on why the call failed. + +- =481 TRANSACTION DOES NOT EXIST= :: UAS received a request that does + not match any existing transaction. + +- =482 LOOP DETECTED= :: Observed frequently with packet loss, + i.e. the same request is sent again, without packet sequence number + being incremented. + +- =483 TOO MANY HOPS= :: UAS has received a request in which + =MAX-FORWARDS= header is equal to zero. + +- =484 ADDRESS INCOMPLETE= :: Request URI is incomplete. Additional + reason should be provided in reason phrase. + +- =486 BUSY HERE= :: Callee's end system contacted successfully, but + callee is unavailable at this end system. Response may include a + better time to call in the =RETRY-AFTER= header. Callee might be + available elsewhere, e.g. via a voicemail system. + +- =487 REQUEST TERMINATED= :: Request terminated by a =BYE= or + =CANCEL= request. + +- =488 NOT ACCEPTABLE HERE= :: Request is not acceptable for the + specific resource identified in the request URI. Request may succeed + somewhere else. Description of media capabilities may be included + in response body. + +- =491 REQUEST PENDING= :: UAS received the request but had a pending + request in the same dialog. This is a ``glare condition''. + + +*** =5XX= server failures + +The UAS has experienced an error. + + +- =501 NOT IMPLEMENTED= :: UAS does not support the functionality + required to fulfill the request. If UAS recognizes the request + method, but it is not allowed or supported, use =405 METHOD NOT + ALLOWED= instead. + +- =502 BAD GATEWAY= :: The UAS, whilst acting as a gateway or proxy, + received an invalid response from the downstream server it accessed + when attempting to fulfill the request. + +- =503 SERVER NOT AVAILABLE= :: UAS is temporarily unable to fulfill + the request due to temporary overload or server maintenance. UAS may + include a =RETRY-AFTER= header; if it does not, UAC must act as if + it has received a =500 SERVER INTERNAL ERROR= response. UAC should + attempt to forward the request to an alternate server. UAS may + refuse the connection or drop the request instead of responding with + =503 SERVER NOT AVAILABLE=. + +- =504 SERVER TIMEOUT= :: UAS did not receive a response from an + external server in time. =408 REQUEST TIMEOUT= should be used if + there was no response within the time period specified in the + =EXPIRES= header from the upstream server. + +- =505 VERSION NOT SUPPORTED= :: The UAS does not or refuses to + support the SIP protocol version used in the request. + +- =513 MESSAGE TOO LARGE= :: Message length exceeds UAS capabilities. + + +*** =6XX= global failures + +These responses indicate that the UAS has information about a +particular user (not just the instance specified in request URI). + +- =600 BUSY EVERYWHERE= :: Callee's end system was contacted + successfully, but callee does not wish to take the call at this + time. Response may indicate a better call back time in the + =RETRY-AFTER= header. This response is returned if client know that + callee is not available anywhere else (otherwise return =486 BUSY + HERE=). + +- =603 DECLINE= :: Callee's end system was contacted successfully, but + callee explicitly does not wish to or cannot participate. Response + may indicate a better call back time in the =RETRY-AFTER= + header. This response is returned if client know that callee is not + available anywhere else (otherwise return =486 BUSY HERE=). + +- =604 DOES NOT EXIST ANYWHERE= :: Server is certain that the resource + pointed to in request URI does not exist anywhere. + +- =605 NOT ACCEPTABLE= :: The UAS was contacted successfully, but + cannot properly support the described session. Response may contain + a list of reasons in a =WARNING= header. This response is only + returned if UAS knows that no other endpoint will answer the + request. + + +** SIP URI structure + +: sip:user:password@host:port:parameters +or +: sip:user@host:port;parameters + +| =sip= | =bob= | =example.com= | =5060= | =;user=phone= | +| scheme | user | host | port | parameters | + +- SIP addresses are based on the same URI structure used in e-mail + (RFC 2396). +- =sip= scheme is used for unsecured communication, =sips= is used + alongside TLS. +- While permitted, the RFC recommends against including the password + in the URI. +- No limit to parameter amount; however, they must each only appear + once. +- Common parameters: =transport=, =maddr=, =ttl=, =user=, =method=, + =lr=. + - =transport=: either TCP or UDP. + - =maddr= (mandatory address): defines server to be contacted for + this user. Overrides =host=. + - =ttl= (time to live): for a UDP multicast packet. Must only be + used if =maddr= is a multicast address. + - =lr= (loose route): indicates that the device responsible for the + resource implements the routing methods. + + +** SIP headers + +- SIP headers are named attributes that provide additional information + about the message. +- Who is calling? What new requests are allowed in the call? Many + other details too. + + +*** Mandatory headers + +- =REQUEST-URI= :: +- =TO= :: Logical recipient of the request. It can optionally include + a display name. +- =FROM= :: Logical identity of the request initiator. Used by SIP + elements to determine call processing rules. A tag is appended to + establish a dialog. +- =CSEQ= :: Sequence number + method. +- =CALL-ID= :: Unique identifier to group a series of messages. Must + be the same for all requests within dialog. Recommended that the UAC + generate a globally unique =CALL-ID=. +- =MAX-FORWARDS= :: Used to prevent loops. Default value should be 70. +- =VIA= :: Used for routing responses and identifying the transport + protocol used. Must contain a unique branch parameter. RFC + 3261-compliant branch parameters must begin with =z9hG4bK= (magic + cookie). + + +- =CONTACT= :: Contains a URI used to contact UA for subsequent + requests. +- =ALERT-INFO= :: In an =INVITE= request, specify an alternative + ringtone to the UAS. In a =180 RINGING= response, specify an + alternative ringback tone to the UAC. Can also be used for ``auto + answering'' calls by certain endpoints. +- =ALLOW= :: Specify the type of methods supported by the UA + generating the message. +- =AUTHORIZATION= :: Contains UA auth credentials. +- =CALL-INFO= :: Contains additional information about request + originator or responder. +- =CONTENT-DISPOSITION= :: Describes how the body should be + interpreted by UAC/UAS. +- =CONTENT-LENGTH= :: Size of the message body, not including CRLF + separating header from body. +- =CONTENT-TYPE= :: Type of media sent in body. +- =MIN-EXPIRES= :: Minimum refresh interval of soft-state elements + managed by the UA. +- =RECORD-ROUTE= :: Inserted by a proxy in a request to force future + requests to route through the proxy. +- =REQUIRE= :: Used by a UAC to inform a UAS about options that are + expected to be supported by the UAS. +- =ROUTE= :: Force the routing of a request through the listed set of + proxies. +- =SUPPORTED= :: List all extensions supported by the UAC/UAS. +- =USER-AGENT= :: Information about the UA, e.g. manufacturer name, + SIP UA version. +- =WWW-AUTHENTICATE= :: Authentication challenge. + + +- Compact headers act the same as regular headers; they are just + presented differently (single letter instead of full words). + + +** Session Description Protocol + +- RFC 4566. +- When used with SIP, provides a standard representation of how + information should be transported. +- Contains: + - Session name and purpose + - Time(s) the session is active + - Media type used by the session + - Information about how to receive media +- Normally presents enough information for UAs to join a session. + + +** SIP and user mobility + +- A proxy receives an =INVITE= from a UAC, and proceeds with /Parallel + Call Forking/: it relays the =INVITE= to all devices the callee is + susceptible to pick up the call from. Contrast this with /Sequential + Call Forking/. +- Each proxy that forks a request adds its own branch ID. + + +* SIP authentication +# Section 4 + +- SIP provides the same stateless, challenge-based authentication as + used in HTTP. +- After authentication is performed, the challenger should determine + if user is authorized to make the request. +- When a UAS requires authentication, it will return a =401 + UNAUTHORIZED= response. +- When a proxy requires authentication, it will return a =407 PROXY + REQUIRES AUTHENTICATION= response. +- Basic authentication is not used. SIP uses Digest Authentication. +- A =401= or =407= response is sent with a =WWW-AUTHENTICATE= header + containing the challenge information. +- The challenged UAC sends a response within the =AUTHENTICATION= + header, consisting of: + - Hash_1 = hash of =username:realm:password= + - Hash_2 = hash of =method:domain-in-401-response= + - Hash_3 = hash of =hash1:nonce:hash2= + - If Quality Of Protection is required, Hash_3 = hash of + =hash1:nonce:nc:cnonce:qop:h2= + + +* SIP routing and responses +# Section 5 + +- A SIP transaction consists in a single request, zero or more + provisional responses, and a final response (plus an =ACK= if + transaction is not =INVITE=). +- A dialog is a P2P relationship between two UAs that persists for + some amount of time, following a successful =INVITE= transaction. +- The dialog is responsible for facilitating the sequence of messages + and proper routing of requests between two UAs. +- A dialog is identified at each UA by a dialog ID, consisting in the + call ID header value, a local tag, and a remote tag. +- The dialog ID is not the same for the UAC and the UAS. +- If either UAC or UAS initiates an =INVITE= within a dialog, this is + called a =RE-INVITE=. + + +** SIP call routing + +- Proxy may operate in stateless or stateful manner. +- A stateless proxy chooses the routing based on the request. After + forwarding, it forgets any information about the request. +- A stateful proxy remembers transaction state of each request and + uses this information when processing additional associated + messages. + + +** COMMENT SIP trapezoid model + +This name results from the shape observed when plotting a typical SIP +message flow on a sequence diagram. + +* COMMENT SIP registration +# Section 6 + + +* Media and RTP +# Section 7 + +- RTP is defined in RFC 3550. It is used to send media or audio + between devices. +- Mainly two aspects: + - Real Time Protocol: used to carry data with real time properties. + - Real Time Control Protocol: used to monitor the quality of the + session and convey information. +- RTP payload types used in a call can be found in the SDP. +- Mixers combine media from multiple sources and place them in a new + RTP packet. +- Translators are able to modify the encoding, yet keep the same SSRC. diff --git a/wiki/engineering/aerospace/standards/ARP4754.org b/wiki/engineering/standards/ARP4754.org index fa7a5e1..fa7a5e1 100644 --- a/wiki/engineering/aerospace/standards/ARP4754.org +++ b/wiki/engineering/standards/ARP4754.org diff --git a/wiki/engineering/aerospace/standards/DO-160.org b/wiki/engineering/standards/DO-160.org index 2e9f60f..2e9f60f 100644 --- a/wiki/engineering/aerospace/standards/DO-160.org +++ b/wiki/engineering/standards/DO-160.org |