SCTP协议(二)

书接上回,在《SCTP协议(一)》中我们总结概括了SCTP的几大要点,了解了SCTP的四次握手与三次挥手过程。在这次的文章中,我们着重介绍两点点:SCTP为什么能够抵御SYN攻击、SCTP在通信上的多重串流与路径多宿的特点。上次我们了解到SCTP是TCP协议的改进版,那么我们这一次也仍然会拿熟知的TCP协议来做对比,介绍SCTP协议。

一、SCTP的四次握手与三次挥手

详情参见《SCTP协议(一)》


二、SCTP为什么能够抵御SYN攻击?

要了解这个问题首先我们来看一下TCP中SYN泛洪攻击,它利用的正是TCP建立连接时三次握手的特点。攻击者发送大量的SYN报文给Server,根据TCP协议的规定,Server会回复SYN+ACK应答报文。在回复应答报文后由于无法收到接下来的ACK报文,Server会一直处于等待状态,此时处于TCP的半连接状态。Server将会消耗大量资源来维持这样一个半连接的列表,因为没有收到ACK报文,并且还要不断重发SYN+ACK报文给攻击者。这使得Server无暇顾及正常的连接请求,从而造成服务阻塞或者迟缓甚至瘫痪。这就是TCP的SYN攻击的过程。

SCTP在建立连接的过程中,双方要交换自己的IP地址列表以及端口。我们假设Client要主动向Server发起SCTP连接,开始四次握手的过程。Client向Server发送INIT请求,Server在收到INIT请求后,不需要消耗资源建立任何的类似于TCP半连接池的列表。而是回复一个INIT ACK消息来确认自己收到了建立连接的请求。在INIT ACK包中包含了状态cookie,状态cookie里面有Server告诉Client,要建立连接需要的Client准备的全部状态信息。

INIT和INIT ACK都必须包含建立连接所需的参数:一组IP地址,一个初始的TSN,以及两个端点要建立的数据流数和可支持的数据流数。在交换完这些信息后,Client才会向Server发送cookie-echo,Client会在发送的cookie-echo中回射Server的状态cookie。Server在接收到cookie-echo后会回复cookie-ack,表明收到了Client发来的要求,验证了状态cookie是正确的。并且准备完毕,此时连接才会建立。

在整个四次握手的过程中,Server收到INIT包并不会第一时间消耗资源做连接的准备工作。只有到了握手的最后几步,收到了cookie-echo后才会消耗资源准备建立连接。所以不管Server收到了多少的INIT包,都不会消耗Server的资源,Server只需要回包就ok了。因此就可以很好的避开了TCP三次握手的缺点,不会受到SYN的攻击。


三、SCTP在通信上的多重串流与路径多宿的特点

多重串流和路径多宿的解释都非常的抽象,单纯的看网上的资料可能并不好理解。那么我们在这里做一下简单的介绍。

多重串流是指在SCTP通信时,通信双方可以规定发送数据的数据流数量。这个数量可以有很多个,在其中一个数据流发生丢包重送的时候,并不影响其他数据流的传输。每个数据流在传输过程中都有特定的串流序号(SSN),因此数据流之间的传输互不影响。这样的通信机制会大有用处,比如在访问网页的时候,图片、视频、音频、文本这些类型的数据可以通过不同的串流传输给访问者,图片无需等待文本传输完毕之后再进行传输。可以大大提高传输效率,也避免了排头阻塞情况的存在(排头阻塞的具体情况会在下一期的文章进行介绍)。

多重串流示意图

路径多宿,顾名思义,是指的路径,而不是传输过程。SCTP允许收发数据的两端拥有多个上网装置,也可以理解为网卡。这样在数据收发两端就会有很多条路径可以连接起来。SCTP会选择其中的一条作为主要传输路径,把其他的作为备援路径。SCTP会周期性的去探测哪些路径是畅通的,将其作为备援路径。当主要传输路径发生问题断开时,SCTP会选择一条备援路径快速连接以恢复数据的传输。这样就大大提高了SCTP的可靠性。

路径多宿示意图

多重串流与路径多宿在表面上看起来是很类似的两个特点。都是SCTP可以通过多条线路传输数据。但是前提条件不同,路径多宿是指可以有多个传输的路径。而多重串流是指在一条路径上传输时,可以有多个数据流进行传输且互不干扰。

这篇文章就到此结束啦,不要问为啥少了一个SCTP的SACK机制,这个是SCTP的拥塞控制机制。这个截止到目前为止还没有整明白,变量有点多。等研究好了再继续写出来。

下一篇文章会介绍《排头阻塞》,也就是在文中提到的。

然后让我们把目光再放回到Linux上,了解一下《linux中的supervisor》

 

 

 

 

此条目发表在学习总结分类目录,贴了, , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注