原文出处:http://blog.chinaunix.net/u1/34831/showart_1871853.html
 
 
SCTP处于SCTP用户应用层与IP网络层之间,它运用“关联”(association)这个术语定义交换信息的两个对等SCTP用户间的协议状态 。SCTP也是面向连接的,但在概念上,SCTP“关联”比TCP连接更为广泛:TCP的连接只有一个源地址和一个目的地址,SCTP提供一种方式使得每个SCTP端点能为另一个对等端点提供一组传输地址,即传输地址= 一组IP地址+端口号。

在继承TCP特点的基础上,SCTP提供了一些额外的功能:

1. 在多个“流”(stream)中实现用户数据的有序发送

“流”在TCP中指一系列的字节,而在SCTP中是指发送到上层协议的一定系列的用户消息,这些消息的顺序与流内其他消息相关。SCTP用户在建立关联时,可以规定关联支持的流的数目。这个数目是与源端商定的,用户消息与流数目关联。在链路中,SCTP为每个送到对等端的消息分配一个流序号。在接收端,SCTP确保在给定流中消息按顺序发送。同时,当一个流正在等待下一个非顺序的用户消息时,其他流的发送会继续。

2. 根据已发现的路径MTU(最大传输单元)大小进行用户数据分片

为了确保发送到下层的SCTP数据包与路径MTU一致,SCTP对用户消息分片。在接收端,分片被重组后传给上层SCTP用户。

3. 选择性确认(SACK)和拥塞控制

选择性确认用于数据包丢失发现,TCP中确认序号返回的是发送方已成功收到数据字节序号(不包含确认序号所指的字节),而SCTP反馈给发送端的是丢失的并且要求重传的消息序号。

SCTP运用了TCP中的拥塞控制技术,包括慢启动,拥塞避免和快速重传。因此,当和TCP应用共存时,SCTP应用可接收属于SCTP的网络资源部分。

4. 块(chunk)绑定

即多个用户消息可选择地绑定到一个SCTP包上,通过将消息放到一个或多个SCTP数据结构——“块”中,SCTP保留了应用程序的消息框架边界。不同类型的块可绑定到一个SCTP包中,但是控制块必须放在任何一个数据块之前。

5. 路径管理

SCTP 路径管理功能主要负责从远端提供的一组传输地址中选择目的传输地址,它根据两个方面来选择目的地址:SCTP用户指示和当前可达的合格目的地。当其他流控制不能提供可达性信息时,路径管理功能定时地扫描链路的可达性,并向SCTP报告远端传输地址所发生的变化。SCTP 路径管理功能模块同时还负责在建立链路时,向远端报告可用的本地地址,并把远端返回的传输地址告诉SCTP用户。

6. 支持多宿

当SCTP传送数据包给目的IP地址时,如果此IP地址是不可达的,SCTP可以将消息重路由给一个交替的IP地址。这样,在关联的一端甚至两端,可容忍网络级错误。

7. 防范拒绝服务(DoS)攻击

DoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。SYN Flooding攻击是DoS攻击的一种实例,是目前效果最好的一种黑客攻击方式。为了抵抗SYN Flooding对目标主机攻击,SCTP在关联初始化阶段实施了一种安全的“Cookie”机制。

8. 支持多种传输模式

严格有序传输(像TCP),部分有序传输(像per-stream)和无序传输(像UDP)。
2 SCTP包结构

SCTP包的结构,一个数据包首部可跟一个或多个可变长的块。块采用“类型—长度—值”(TLV)的格式。源端口、目的端口、校验码的意义同TCP中的意义相似。确认标签保存着在SCTP握手中第一次交换的初始标签的值。在关联中,任何SCTP数据包若不包含这样一个标签,当到达时会被接收端丢弃。

在每个块中,TLV包括块类型、传输处理标记、块长度。不同的块类型可用来传输控制信息或数据。

传输序列号(TSN)和流序列号(SSN)是两种不同的序列号,TSN保证整个关联的可靠性,而SSN保证整个流的有序性,这样,在传输中,将数据的可靠性与有序性独立分开。
3 SCTP数据传输

4.1 SCTP四路握手及抵抗SYN Flooding攻击的原理

一个SCTP关联定义为:[主机A的一组IP地址]+[主机A的端口]+ [主机B的一组IP地址]+[主机B的端口]。 因此,每一端对应组中的任何一个IP地址都可作为相应的源/目的地址来标示本次关联,通过四路握手,两端SCTP主机交换通信状态。

SYN Flooding利用了TCP/IP的固有漏洞,面向连接的TCP三次握手是SYN Flooding存在的基础。SYN Flooding攻击的原理是:恶意的攻击者大量向服务器发送SYN报文,服务器在发出SYN+ACK应答报文后无法收到客户端的ACK报文(第三次握手无法完成),服务器端将为维护一个非常大的半连接列表而消耗非常多的CPU时间和内存资源,还要不断对这个列表中的IP进行SYN+ACK的重试。服务器端将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求,此时从正常客户的角度看来,服务器失去响应。

而在一次SCTP四路握手中,INIT消息的接收端不必保存任何状态信息或者分配任何资源,这样就可防范SYN Flooding等DoS攻击。它在发送INIT-ACK消息时,采用了一种机制——“状态Cookie”,该Cookie具有发送端要建立自己状态所需的全部信息。

SCTP产生一个状态Cookie的过程如下:

1. 使用收到的INIT和发出的INIT- ACK块中的信息创建一个关联的TCB(传输控制块)。

2. 在TCB中,将当前日期设为创建日期,将协议参数“有效Cookie时间”设为生存期间。

3. 根据TCB,收集重建TCB所需的最小信息子集,将该子集和密钥产生一个MAC(信息认证编码)。

4. 结合上述最小信息子集和MAC产生状态Cookie。

5. 在发送完INIT ACK(包含状态Cookie参数)后,发送方必须删除TCB以及任何与新关联有关的本地资源。

INIT和INIT-ACK都必须包含建立初始状态所需的参数:一组IP地址,保证可靠传输的初始TSN,每个被接收的SCTP包中必须含有的初始标签,每一端请求发出的流数目和每一端能支持接收的流数目。交换完这些消息之后,INIT的发送端以COOKIE-ECHO消息的方式发送回状态Cookie。接收端根据所接收到的COOKIE-ECHO中的状态Cookie,完整地重建自己的状态,并回送COOKIE- ACK来确认关联已建立。COOKIE-ECHO和COOKIE-ACK都可将用户数据消息绑定到各自的包中。

由此可见,采用以上这种方式,即使接收再多的INIT消息, 接收端也没有任何资源的消耗:它既不分配任何系统资源,也不保存此次新关联的状态,它只是把相应重建状态所用的状态Cookie作为参数,包含在每一个回送的INIT-ACK消息中,最后该状态Cookie会被COOKIE-ECHO消息发送回来。

2.2 SCTP数据交换

在两个SCTP主机间的正常数据交换。SCTP主机发送SACK块,用来确认每一个收到的SCTP包。因为SACK能完整地描述接收端的状态,因此,依据SACK,发送端能做出重传判决。SCTP支持类似于TCP中的快速重传和time-out重传算法。

对于数据包丢失发现,SCTP和TCP采用截然不同的机制:当TCP发现接收序号有缺口时,会等到该缺口被填上后,才发送序列号高于丢失数据包的数据。然而,SCTP即使发现接收序号有缺口或顺序错乱,仍会发送后面的数据。

3.3 SCTP关闭关联

作为面向连接的传输协议,SCTP也运用三路握手来关闭一个关联,但与TCP有一点不同:一个TCP终端在“关联关闭”的过程中能够保持连接开启,并从对端接收新的数据,而SCTP不支持TCP的这种“半关闭”状态。 1. 主机A发出“关闭”(SHUTDOWN)块来终止与主机B的关联,主机A进入“SHUTDOWN- PENDING”状态,对应的动作是:不再接受上层应用的数据,只发送队列中剩余的数据,进入“SHUTDOWN-SENT”状态。

2. 主机B一旦接收到“关闭”块,就进入“SHUTDOWN-RECEIVED”状态,同主机A一样,不再接受上层应用的数据,只发送队列中剩余的数据。

3. 主机A再次发送“关闭”块,通知主机 B所发送的剩余数据已到达,并且重申了关联正在关闭。

4. 当第二次收到“关闭”块时,主机B发送“确认关闭”块。

5. 主机A随后发送“关闭结束”块,完成本次关联的关闭。

4 结束语

SCTP是为传输信令业务流而开发的,但它所具有的一些优于TCP的先进协议机制,如选择性确认、快速重传、无序递交等,使它又满足高性能传输的需求,这会给它带来更为宽广的应用需求。目前,已有各种操作系统支持SCTP, 如Linux、AIX、Solaris、Windows、FressBSD。在不同协议实现间的互操作性测试的成功,揭示着SCTP正走向商业产品之路。

IEFT正在致力于SCTP进一步的修改,使其更能满足下一代应用的需求,例如支持IPv6地址,解决对端对于IPv6的site-local、link-local地址无连通性的问题,以及在已存在的关联中动态地增加或删除IP地址而无需重启该关联。

此外,在第三代移动通信中,SCTP可作为信令承载层的备选方案之一,它的应用及其性能评估也有待研究。

【转载·SCTP协议】浅析 - SCTP协议相关推荐

  1. (转载)浅析HTTP协议

    转自:http://www.cnblogs.com/gpcuster/ 浅析HTTP协议 HTTP协议是什么? 简单来说,就是一个基于TCP/IP通信的规范:双方要进行通信,大家都要遵守一个规范,这个 ...

  2. TCP协议与SCTP协议的区别

    TCP服务 目录 TCP服务 TCP消息头 TCP建立三次连接的过程(三次握手) TCP终止连接过程(四次挥手) SCTP协议 SCTP与TCP的区别 TCP将用户数据打包构成报文段,它发送数据时启动 ...

  3. 下一代互联网协议:SCTP

    我国从2002年到2006年信息产业部发布的通信行业相关标准都涉及到流控制传输协议--SCTP,其作为下一代互联网传输协议,无论是运用在固网或移动网,都具备比TCP.UDP协议更为突出的优势. 由于S ...

  4. 从TCP三次握手说起——浅析TCP协议中的疑难杂症

    PeterWang_bupt 贡献值:2 等級:L1 0 发布 0 评论 1 顶 发布链接发布图文   全部主题 我关注的主题 GEEKNEWS Rust Swift 全栈工程师 /home Pres ...

  5. 浅析http协议、cookies和session机制、浏览器缓存

    浅析http协议.cookies和session机制.浏览器缓存http://blog.csdn.net/coslay/article/details/41674799 最近几天在复习http协议中h ...

  6. swift int转string_Swift集合类型协议浅析(下)

    关注[搜狐技术产品]公众号,第一时间获取技术干货 导读 本篇是Swift集合类型协议浅析系列文章的下篇,在这篇文章中,我们将继续围绕集合类型协议展开讨论,侧重点更多地关注于String相关的周边协议. ...

  7. 前端接入HTTP协议浅析

    [摘要]:本文整理并简要分析了HTTP协议的交互过程和内容格式,包括HTTP请求.HTTP应答的头域和实体内容,HTTP 1.0与HTTP 1.1的差异,并举例说明了Chunked编码的工作过程原理. ...

  8. 【IoT】基于NB-IoT的CoAP协议浅析

    [IoT]基于NB-IoT的CoAP协议浅析 CoAP(Constrained Application Protocol) 协议是 IETF 提出的一种面向网络的协议,采用了与 HTTP 类似的特征, ...

  9. UniSwap V3协议浅析(下)

    文章前言 本篇文章我们继续接着之前的UniSwap V3协议浅析(上)来进行分析Uniswap v3设计 源码分析 UniswapV3Factory UniswapV3Factory的主要功能是提供创 ...

最新文章

  1. [转]数据仓库,OLAP与数据挖掘之间的关系
  2. NLP类别不均衡问题之loss大集合
  3. matlab画泡面图,MATLAB中,( )函数可以保存图像并指定为图像文件格式。
  4. SQL语言基础:常用的数据查询语句
  5. teamlab与redmine试用对比报告
  6. 用java实现楼层导航_JS实现网站楼层导航效果代码实例
  7. A10 平板开发一硬件平台搭建
  8. 怎么查看当前登录的svn账号_在linux下查看svn对应的账号和密码
  9. Bibles_Numpy离线文档
  10. 高德地图Amap绘制路线首尾相连问题
  11. RESTFul与RESTFul案例
  12. created和mounted的区别
  13. 2022年卡塔尔世界杯黑科技盘点
  14. NYIST_ACM Ranking List FAQ
  15. 《F4+2》β冲刺第二天
  16. Tableau考试指南部分试题(用步骤,过程,考试内容说明)
  17. DOS/WinPE双启动U盘Gho镜像【MS-DOS 7.1+WinPE老毛桃最终修改版】 简体中文版
  18. python selenium 处理弹窗_python 让selenium(webdriver ) 不打开浏览器(弹出窗口)运行(静默模式启动)...
  19. 《ARPG游戏深度强化学习 》序贯决策问题、完成ARPG世界里的游戏代码实践
  20. mysql 一行数据拆分成多行

热门文章

  1. imgproc/src/morph.simd.hpp:756: error:(-213:The function/feature is not implemented)解决方案
  2. 工频X线机计算机控制,FSK302-1A型500mA程控X线机.doc
  3. 华为云服务器新增d盘,华为桌面云【windows组策略】桌面重定向
  4. 三种常数项级数收敛准则。
  5. C++图书馆管理系统——基于jsoncpp与windows.h
  6. 视频教程-React全栈:前后端分离的招聘Web App项目(含资料)-ReactJS
  7. linux下的压缩工具下载,linux 各压缩工具
  8. Linux下最常用的10个文件压缩工具
  9. 怎么用python挣钱-利用业余时间怎么用python挣钱?
  10. Java中加载图片并显示