智喆(INTELLIFEED)行情分发系统,是闪策科技基于中国两大证券交易所低延时行情发布系统,为用户提供公平、高效、高速的行情优化、转发服务的系统。
目前,上证所和深交所的Level-2行情数据通过Level-2行情生成引擎生成后,经行情发布中心发送到信息接收组件,传统第三方信息商经过一层的中转处理后,以TCP(Transmission Control Protocol,传输控制协议)方式转发给客户。
由于TCP点播机制是点到点传输,不能真正支持多个用户同时下载接收数据,效率较低,延迟较高,因此,为了满足用户对数据获取以及带宽使用效率的高要求,闪策科技规划开发了使用UDP(User Datagram Protocol,用户数据报协议)组播转发的智喆行情分发系统。
01
智喆特点和优势
1.接收行情后直接分发,不经过程序的中转清洗处理,效率更高。
2. 将行情通过UDP组播而非TCP分发,支持更多并发客户,高效公平,可扩展性强。
3. 允许投资者按需订阅行情信息,有针对性地对指定股票行情解码,避免了对整个市场行情解码造成的性能损耗,提升了带宽的使用效率。
4. 支持将需要的行情分类发布到指定的组播地址以满足投资者的需求。
5. 具备完善的合规控制,所有行情仅在授权机房内广播。
6. 支持实时查询用户列表、MAC地址、IP地址等信息,并提供详细日志报表。
7. 沿用传统行情商的格式发布数据,以确保用户可以在做出尽量少的代码改动的情况下接入智喆系统。
8. 在配置不同组件时,也可同时支持期货交易所行情的接收与转发。
02
基本涵盖交易所发布的各种行情数据
上证所现有:
1.上证所Level-2 行情;
2.固定收益行情;
3.指数通行情;
深交所现有:
1.逐笔委托数据;
2.逐笔成交数据;
3.快照行情数据;
4.指数行情数据;
根据客户需要,可能增加的有:
1.上证所Level-1行情;
2.深交所Level-1行情;
3.上证所股票期权行情。
打完广告,今天我们就来讲讲TCP和UDP到底是什么鬼?
在交换机中有三种通信方式:单播(unicast)、广播(broadcast)、组播(multicast)。
单播解决了点对点通信的需求;
广播是点对多点的通信,其存在两个缺点:
1)只能在同一网段内实现广播;
2)不能指定目的主机,所有网段内的主机都将收到广播报文,存在带宽浪费。
组播也是点对多点的通信,完全克服了广播的两个缺点。组播协议的优势在于当需要将大量相同的数据传输到不同主机时:
1、能节省发送数据的主机的系统资源和带宽;
2、能够有选择地复制给又要求的主机;
3、可以穿越公网广泛传播,而广播则只能在局域网或专门的广播网内部传播;
4、节省网络主干的带宽。
因此组播技术被广泛应用于网络电视、在线直播、远程教育、视频会议等对带宽和数据交互实时性较高的信息服务。
假设亚当需要给夏娃10个野果,否则她会饿死。
连接建立
亚当对着夏娃大喊:爱妃,你听得到吗?(一次握手)
夏娃回应:孩他爹,我听得到!(两次握手)
亚当接着喊:那好,我扔果子给你吃,你接到果子就喊一声,一共十个。(三次握手)
运送货物于是亚当开始扔第一个,夏娃喊收到了一个。
亚当扔第二个,夏娃喊收到两个。
超时重传 ( timeout retransmit)
亚当扔第三个,可是夏娃迟迟没有回音,亚当意识到可能果子落到悬崖了,于是重新扔,夏娃喊收到第三个。
Advertised windowsize = 0
于是亚当连续扔了第四、五、六个,夏娃急了:孩他爹,慢点扔,臣妾忙不过来了…
Advertised windowsize > 0
于是亚当坐下休息,爱妃又开始叫了:继续扔吧。
亚当开始扔第七个,夏娃喊收到七个。
…
关闭连接终于亚当扔完了,亚当喊:爱妃,果子扔完了,寡人去忙别的了。
夏娃回复:好的,我也休息一下,再见!
亚当:再见!
以上的过程类似TCP连接的过程,是不是效率非常慢呢。
接下来再看看什么是UDP连接?
连接建立
亚当对着夏娃大喊:爱妃,你听得到吗?
夏娃回应:孩他爹,我听得到!
亚当接着喊:那好,我扔果子给你吃,你接一下啊。
运送货物
于是亚当开始扔果子
一个、两个、三个…
运送结束
十个扔完。
但最终扔到对方山头到底有几个,亚当没有底,也许有的果子落到悬崖了,但是这个效率高啊,可以连续扔,以前扔10个果子需要一分钟,现在只需要20秒。
大家是不是发现UDP模式下,亚当并不知道夏娃是否收到了果子,但是请不用担心,在局域网内组播的模式下,数据丢包率较小,且通过修改优化服务器参数,可最大限度地避免或减少丢包现象。
看完这个故事,我们再来梳理下TCP和UDP是如何工作的。
TCP是这样工作的:
建立连接阶段
(1)双方在传输用户数据之前,需要探测对方是否工作;
(2)探测工作主要通过三次握手(SYN/ACK)与确认;
(3)双方就将要传输数据原点的编号(ISN)交换意见;
(4)双方就各自的仓库大小(Window Size)交换意见;
数据传输阶段
(5)TCP每次发送包裹之前,都要观察对方仓库的剩余空间,连续发送包裹的数量不能大于对方仓库的剩余空间;
(6)每发送一个TCP报文,保留一份copy,需要为该TCP报文启动一个闹钟;
(7)接收方接收到TCP报文,需要确认ACK;
(8)如果TCP报文的闹钟响了,而却没有对方的确认,将留存的copy重新发送出去,直到被确认;
(9)如果一直没有收到确认,将一直重传,直到达到重传次数上限,而释放(Reset)连接;
(10)如果检测到有丢包的发生,会减小发送的速率;
断开连接阶段
(11)TCP的连接是双向的管道,当一方决定不再发送数据,并且自己发送的数据全部得到确认,可以选择主动关闭(FIN)去向的管道;
(12)接收方无论自己是否愿意,必须确认FIN;
(13)如果主动关闭方的FIN没有在闹钟响之前得到确认,将会重传,直到被确认为止;
(14)被动响应方如果有数据需要继续传输,可以继续在单向的管道里继续传输数据;
(15)如果数据也传输完毕,可以关闭(FIN)来向的管道;
(16)同样主动关闭方必须确认对方的关闭连接信号FIN;
(17)被动响应方进入closed状态,释放的端口号可以立即使用;
(18)主动关闭方,则进入time_wait状态,逗留时间为2MSL (Maximum Segment Life),一旦超时退出,则进入closed状态,端口号资源释放;
UDP连接则是这个样子的
发送方
将用户数据打包,填入收件人地址(目的IP)、收件人姓名(目的端口号)、发件人地址(源IP)、发件人姓名(源端口号),然后就扔到邮筒(Internet)里去了。
接收方
接收方UDP如同传达室的老同志,看看包裹上的姓名(目的端口号),打个电话或发个消息通知用户(应用程序)前来取走。
传达室老同志每次收到一件包裹,是否需要确认?不需要!
那UDP包裹的发送方难道就没有办法知道包裹是否到达?既然UDP这个层次不提供消息确认,那就让接收方用户来确认不就OK了吗?
接收方再发一个UDP包裹,包裹里写着:“亲爱的,粉红色包裹已收到,谢谢”。
所以,基于UDP组播技术收听行情可以更加高效、快速和公平。
智喆行情分发系统,安利给大家!新产品上线期间,智喆推出断崖价,此价仅是近期有,懂的速来撩。
参考资料:
《用亚当和夏娃的故事,来解释一下传输协议》,作者车小胖,原文链接http://daily.zhihu.com/story/9028124
《【分享吧】基于UDP组播技术的行情》,作者叶枫,原文链接
https://mp.weixin.qq.com/s?src=11×tamp=1553576936&ver=1507&signature=hcS*wJUO23iXgMsn462OXMRvPw60U31dPlPvm-WiMLtteIdyk7LTfuJHHSZ7AOGCZbl1kFZgh2RrLJRYll6MwkPTQRh2eKCh6tTgKEQknC7OAFrmZuUsrt8NAk*HKGRZ&new=1