概述
为什么80%的码农都做不了架构师?>>>
本站首发兼远创, 全拼, 写字不易, 程序调试更烦. 所以, 如果转请保持作者信息和此联接, 给我动力 :)
SCTP和TCP比较
SCTP好处:
1. SCTP 做了TCP类似的事情, 但他比TCP有更强的可靠性 (多址 multihome)
如果丢了包, TCP可以通过重传帮你拣回来. 如果电信出了问题呢?比方说,电信网络出故障了,那就没办法了.
网络故障,软件确实不好解决. 不过, 如果你是有钱人, 你可以再搞个有线宽带(有人说,有线也用电信的核心网, 是真的吗?)
这样,你有两个IP, 一个电信,一个有线. 如果使用SCTP,你可以给你的应用程序分两个IP,这两个IP用于同一个偶联(association, SCTP的术语),相当于你的socket绑了两个地址. 这样,只要其中一个还在,你的数据流就不会断.
2. SCTP 支持多流, 即使某个流由于对方处理不及堵塞了,其他流还可以继续传输.
多流,参照TCP来讲,就是, 一个socket, 逻辑上给多个通道.
首先,如果网络堵塞,该堵的还是要堵. 不过, 如果使用SCTP,那么, 如果这样的堵塞是由于两端软件处理能力的问题, 那么, 你可以把关键的数据放在一个特别的流中, 比方说,你有视频数据还有聊天文字要传输,你把文字放在单独一个流中,可以避免视频把你的文字给堵塞了.(一个简单的例子, SIGTRAN协议组使用0做控制通道, 1~流做数据)
3. SCTP是基于包发送的
对于使用SCTP的人来说, 他比TCP方便的地方还在于,他是基于包的, TCP 是基于流的, 比方说, 发送"Hello"到对端, 理论上TCP可能会发送"He",然后再发剩下的"llo". 你要自己定义包格式来解决这个问题, (比方说, H323协议中使用TPKT), 虽然不复杂,但是麻烦.
4. SCTP流控比TCP先进一些.
毕竟新一点.
5. 安全性 SCTP > TCP
首先, SCTP没有client/server的说法, 下面的服务端,只是为了方便描述, 指收到初始连接请求(INIT)的一方
针对TCP的半开连接攻击, 在SCTP中不成立. 因为SCTP使用cookie机制. 攻击TCP的一种方式是, 发些假连接, 让服务器端为你的假连接分配资源,比方说内存. 这样, 你就可以以很小的代价(或者说无代价, 服务器端有资源分配, 你无须分配保持连接所须的资源)让服务器挂掉.
对SCTP, 攻击方发送的请求,他会回你一个包, 包含建立连接所需的数据(cookie), 然后, 不做任何资源分配.
TCP: 攻击方的代价是组包,服务器端, 分配资源 (挂)
SCTP: 服务器不分配资源.
cookie数据都是认证过的. 你无法伪造. 方法是, 定义一个私密的钥匙, 然后,把这个钥匙和数据等做MD5散列. 可以看到散列结果,无法倒推私钥,所以无法仿冒. 真正的连接不想改cookie数据, 所以他无须关心此私钥,他只需原样发回cookie就是. 仿冒者想改cookie数据,所以,他想知道次私钥,然后用他构造一个假cookie发回来.不幸运的是, 他不是南京(是哪个大学的教授的? 真高科技)的那个牛人, 就是MD5算法他也无法找到冲突,更别说SCTP可能更喜欢SHA.
SCTP差的地方:
打个比方, 你可以写出QQ, 但你不能成为小马哥, 为何? 除了 命运, 能力, 等等. 一个原因是先发优势, TCP用的人多啊.
SCTP over UDP
为什么呢? UDP可以打个洞, 穿透 NAT (部分,咱不严格的讲,就是可以). 但UDP不可靠, 地球人都知道.
那SCTPoverUDP呢, 可以整一个. 本文从这里进入正题.
------------------------------- 正题华丽的分割线 -------------------------------------------------
1. 状态机
协议软件千千万, 状态机万万千. 写协议软件的兄弟姐妹都知道, 怎么处理状态机很大程度上决定了协议软件的主要架构.
咱写C的, 好多很炫的方法用不上,
转载于:https://my.oschina.net/jundai/blog/15174
最后
以上就是儒雅音响为你收集整理的SCTP 库的简述和代码的全部内容,希望文章能够帮你解决SCTP 库的简述和代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复