<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://docs.yate.ro/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://docs.yate.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=About_SCTP</id>
		<title>About SCTP - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://docs.yate.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=About_SCTP"/>
		<link rel="alternate" type="text/html" href="https://docs.yate.ro/wiki/index.php?title=About_SCTP&amp;action=history"/>
		<updated>2026-05-17T18:38:12Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.1</generator>

	<entry>
		<id>https://docs.yate.ro/wiki/index.php?title=About_SCTP&amp;diff=8069&amp;oldid=prev</id>
		<title>Liviu: /* SCTP in YATE */</title>
		<link rel="alternate" type="text/html" href="https://docs.yate.ro/wiki/index.php?title=About_SCTP&amp;diff=8069&amp;oldid=prev"/>
				<updated>2017-10-26T11:12:32Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;SCTP in YATE&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 11:12, 26 October 2017&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 55:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 55:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''See also'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''See also'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [[Configure M2PA]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* [[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Configuring M2PA | &lt;/ins&gt;Configure M2PA]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Liviu</name></author>	</entry>

	<entry>
		<id>https://docs.yate.ro/wiki/index.php?title=About_SCTP&amp;diff=8068&amp;oldid=prev</id>
		<title>Liviu: Created page with &quot; SCTP (Stream Control Transmission Protocol) represents the transport layer preferred to use for SIGTRAN protocols because it provides: * Connection oriented and packet based ...&quot;</title>
		<link rel="alternate" type="text/html" href="https://docs.yate.ro/wiki/index.php?title=About_SCTP&amp;diff=8068&amp;oldid=prev"/>
				<updated>2017-10-26T11:12:12Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot; SCTP (Stream Control Transmission Protocol) represents the transport layer preferred to use for SIGTRAN protocols because it provides: * Connection oriented and packet based ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
SCTP (Stream Control Transmission Protocol) represents the transport layer preferred to use for SIGTRAN protocols because it provides:&lt;br /&gt;
* Connection oriented and packet based transmissions mechanisms.&lt;br /&gt;
* Message loss detection and sequence control algorithms.&lt;br /&gt;
* Multi stream message delivery&lt;br /&gt;
* Support for multi homed sockets.&lt;br /&gt;
* Message fragmentation&lt;br /&gt;
* Corrupt packet detection.&lt;br /&gt;
&lt;br /&gt;
==Connection oriented and packet based transmissions mechanisms.==&lt;br /&gt;
For a better understanding let's take a closer look at world's most known socket types.&lt;br /&gt;
&lt;br /&gt;
===UDP (User Datagram Protocol)===&lt;br /&gt;
UDP sockets provides a mechanism to transmit a packet from point A to point B without the need to establish a connection between A and B and with no concern about packet loss and sequence control.&lt;br /&gt;
The lack of connection allows to an UDP socket user to send/receive messages to/from any destination without the need to create a new socket.&lt;br /&gt;
&lt;br /&gt;
===TCP (Transmission Control Protocol)===&lt;br /&gt;
The TCP sockets also provides a mechanism to transmit messages form a point A to a point B but it provides sequence delivery and packet loss detection, and for this it requires to establish a connection first.&lt;br /&gt;
After the connection has been established the messages can start flowing in both directions. For each message the protocol assigns a sequence number to control in order delivery and to detect packet loss.&amp;lt;br&amp;gt;&lt;br /&gt;
For a better understanding let's say that A has a message to send to B.&amp;lt;br&amp;gt;&lt;br /&gt;
A detects that it needs to send a message to B and it puts the message in a queue, assigns a sequence number, starts a re-transmit timer, sends the message to B and waits for B to acknowledge the message.&amp;lt;br&amp;gt;&lt;br /&gt;
If A is not informed by B that it received the message before re-transmit timer expires, it resend's the message. In this way packet loss detection is provided.&amp;lt;br&amp;gt;&lt;br /&gt;
Let's say that A need to send another message and the previews message was not acknowledged by B.&amp;lt;br&amp;gt;&lt;br /&gt;
A starts the send message procedure and sends the message to B.&amp;lt;br&amp;gt;&lt;br /&gt;
B receives the second message and it checks the sequence number of the message.&lt;br /&gt;
B Detects that the message is not the next one in sequence and it puts the message in a queue and acknowledges the message to A.&lt;br /&gt;
After A's re-transmit timer expires A re-sends the first message.&lt;br /&gt;
B receives the first message send by A, it acknowledges it and it delivers to user the firs message and after that the second. In this way sequence control is provided.&lt;br /&gt;
&lt;br /&gt;
As we can see UDP sockets are packet based and TCP sockets are connection based. SCTP sockets can be packet or connection based depending on what they are used for.&lt;br /&gt;
&lt;br /&gt;
==Message loss detection and sequence control algorithms==&lt;br /&gt;
&lt;br /&gt;
As I was explaining on TCP sockets the SCTP sockets implements mostly the same algorithm for sequence control and packet loss. But this mechanisms are for both packet based and connection based.&lt;br /&gt;
&lt;br /&gt;
==Multi stream message delivery==&lt;br /&gt;
&lt;br /&gt;
When we have to transport a lot of data in real time over a socket, packet loss can be an issue because when a packet is lost the remote pear will not receive any messages until the lost packet is received ... this can cause delayed message processing witch in case of a M2PA link can trigger abort link alignment.&lt;br /&gt;
To avoid packet loss damage, in SCTP was introduced the notion of &amp;quot;stream&amp;quot;. Mainly you can specify for each SCTP socket the number of streams to use and the socket will allocate, for each stream, a sequence number a re-trans timer and a message queue. In this way if a message send o stream 0 was lost the remote endpoint will continue delivering the messages received on other streams, without waiting for the message send on stream 0 to be recovered.&amp;lt;br&amp;gt;&lt;br /&gt;
As an abstraction i think that we can look at SCTP multi stream delivery as at multiple TCP socket connections on the same coonection.&lt;br /&gt;
&lt;br /&gt;
==Support for multi homed sockets==&lt;br /&gt;
I my opinion the main goal of SCTP sockets is to provide a reliable connection between two endpoints and keep it alive as long as the user needs it regardless of the network issues.&lt;br /&gt;
As we can see above the multi stream message delivery minimize the packet loss damage, but another issue is network unavailability.&amp;lt;br&amp;gt;&lt;br /&gt;
In this way the SCTP sockets have support for multi homed. Basically this means that if we have two or more IP addresses we can tell to a SCTP socket to use all of them. In this way if the used interface goes down other interface will be selected to be used.&lt;br /&gt;
&lt;br /&gt;
==SCTP in YATE==&lt;br /&gt;
&lt;br /&gt;
SCTP implementation in YATE is based on LKSCTP library and is located in lksctp module located in modules/server/lksctp.cpp.&amp;lt;br&amp;gt;&lt;br /&gt;
The rpm packets for the lksctp library can be found [http://yate.null.ro/tarballs/misc/ here].&lt;br /&gt;
&lt;br /&gt;
A SCTP socket can be obtained with the help of &amp;quot;socket.sctp&amp;quot; message. For an example please check sigtransport module source file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''See also'''&lt;br /&gt;
&lt;br /&gt;
* [[Configure M2PA]]&lt;/div&gt;</summary>
		<author><name>Liviu</name></author>	</entry>

	</feed>