在流控制传输协议 SCTP(Stream Control Transmission Protocol)出现以前,在IP 网上传输七号信令使用的是UDP 和TCP 协议。
UDP 是一种无连接的传输协议,无法满足七号信令对传输质量的要求。TCP 协议是一种有连接的传输协议,可以信令的可靠传输,但是TCP 协议具有行头阻塞、实时性差、支持多归属比较困难、易受拒绝服务攻击(Dos)的缺陷。因此IETF(Internet Engineering Task Force)RFC2960 制定了面向连接的基于分组的可靠传输协议SCTP 协议。
SCTP 对TCP的缺陷进行了完善,使得信令传输具有更高的可靠性,SCTP 的设计包括适当的拥塞控制、防止泛滥和伪装攻击、更优的实时性能和多归属性支持,因此,SCTP 成为SIGTRAN 协议族中的传输协议。
SCTP 被视为一个传输层协议,它的上层为SCTP 用户应用,下层作为IP分组网络。SCTP上层的用户常见有Sigtran中的M3UA、S1AP、Diameter等;目前在现网中,SCTP主要用来传关M3UA报文。
在这里,对UDP、TCP、SCTP三种传输层协议进行一个区别说明:
(1)每个UDP报文,可以看成一封信,这封信就是一条独立的消息。发送端发几个UDP报文,接收端就等于收到了几条消息,每条消息之间是相互独立的,只有一收到消息就可以直接发送给应用程序去处理。因此说UDP是基于消息(或报文)的;但UDP报文的缺点是容易丢失。发送端不停的发,不会去感知IP网络有没有拥塞,也不考虑接收端有没有能力接收;
(2)同样是一条消息,UDP用一个报文就可以发完了,但对于TCP来说,它传送这条消息,需要按比特流方式来传送,也就是说,TCP要把这条消息分成多个子段(术语称为比特流),每个TCP报文只携带一个子段向外发送。当接收端收到TCP报文后,从中提出消息子段放到队列中,直到等到所有TCP报文全部收到,提出全部的消息子段并组合成完整的消息后才向应用程序递交该消息。
那么TCP是如何知道何时去组合完整的消息呢?秘密就在TCP报文头部。在TCP报文头部,有个比特位称为PSH位,当Tx端发送一条消息的最一个TCP报文时,就把TCP头部的PSH比特位置1,当Rx端看到这个比特为1时,就把缓存中已经接收的所有数据组合成完整的消息,递交给应用程序。
在TCP传送消息时,Tx端和Rx端还需要建立连接,Tx端发送的每个TCP报文,Rx端都要进行确认,如果出现丢失的报文,Tx端要重发。所以TCP为可靠传输。
最后,在两个设备间,TCP在传送某个应用层数据(可以理解为消息)时,必须把这此数据分成成多个TCP报文传送。当这两个设备之间有多个应用程序需要同时用TCP来发送数据,那么这些应用程序就必须排队来使用TCP的连接。当某个应用程序的单个TCP报文丢失了,其他应用程序就必须等待该TCP的重传。
行头阻塞参见下图:
[attach]2566[/attach]
[attach]2567[/attach]
对于SCTP来说,它结合了UDP、TCP两者的优点,同时采用传送消息来说明:
A. SCTP可以同时传送多个应用程序的消息,象UDP一样,这些消息是完整的,不象TCP报文(其中仅为消息的一部分);
B. SCTP在单个报文中传送多个应用程序的多个消息时,任何一个消息的丢失,都不影响其它应用程序继续发送;并且丢失的消息可以通过确认机制进行重发。
C. 除了上面优点,SCTP还有一个优点,就是通信的两个主机之间的会话可以采用多个IP间互联来完成,也称为偶联。
SCTP传送报文的示意可参考如下:
[attach]2569[/attach]
[attach]2570[/attach]
CHUNK ID | CHUNK Type | Chunk解释 |
0 | DATA | 用于传送业务数据 |
1 | INIT | 用于发起两个端点之间的SCTP 偶联。 |
2 | INIT ACK | 用来确认SCTP 偶联的发起消息(INIT)。 |
3 | SACK | 该数据块送至对端,以确认收到DATA 块,并且通知对端DATA 的接收顺序间隙。 |
4 | HEARTBEAT | 端点发送该数据块至对端,以检测当前偶联中定义的某 一目的地址的可达性。 |
5 | HEARTBEAT ACK | 响应HEARTBEAT 消息。 |
6 | ABORT | 快速关闭偶联。 |
7 | SHUTDOWN | 偶联中的一个端点对其偶联发起一个GRACEFUL 关闭。 |
8 | SHUTDOWN ACK | 响应SHUTDOWN 消息,关闭程序完成时发出。 |
9 | ERROR | 通知对端,SCTP 偶联发生某种错误 |
10 | COOKIE ECHO | 仅用于偶联发起过程,它由偶联的发起者发送至对端以完成发起程序 |
11 | COOKIE ACK | COOKIE 证实,相对于COOKIE ECHO |
12 | ECNE | 保留,应用于外部环境拥塞发布回声 |
13 | CWR | 保留,应用于降低拥塞窗口 |
14 | SHUTDOWN COMPLETE | 用于关闭程序完成时对SHUTDOWN ACK 消息进行确认 |
15~255 | IETF保留 | IETF保留 |
欢迎光临 51学通信技术论坛 (http://51xuetongxin.com/bbs/) | Powered by Discuz! X2 |