用亚当和夏娃的故事来解释TCP和UDP行情传输模式的异同

智喆(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)。

单播解决了点对点通信的需求;

用亚当和夏娃的故事来解释TCP和UDP行情传输模式的异同_第1张图片

广播是点对多点的通信,其存在两个缺点:

1)只能在同一网段内实现广播;

2)不能指定目的主机,所有网段内的主机都将收到广播报文,存在带宽浪费。

用亚当和夏娃的故事来解释TCP和UDP行情传输模式的异同_第2张图片

组播也是点对多点的通信,完全克服了广播的两个缺点。组播协议的优势在于当需要将大量相同的数据传输到不同主机时:

1、能节省发送数据的主机的系统资源和带宽;

2、能够有选择地复制给又要求的主机;

3、可以穿越公网广泛传播,而广播则只能在局域网或专门的广播网内部传播;

4、节省网络主干的带宽。

因此组播技术被广泛应用于网络电视、在线直播、远程教育、视频会议等对带宽和数据交互实时性较高的信息服务。

假设亚当需要给夏娃10个野果,否则她会饿死。

连接建立

亚当对着夏娃大喊:爱妃,你听得到吗?(一次握手)

夏娃回应:孩他爹,我听得到!(两次握手)

亚当接着喊:那好,我扔果子给你吃,你接到果子就喊一声,一共十个。(三次握手)

运送货物于是亚当开始扔第一个,夏娃喊收到了一个。

亚当扔第二个,夏娃喊收到两个。

超时重传 ( timeout retransmit)

亚当扔第三个,可是夏娃迟迟没有回音,亚当意识到可能果子落到悬崖了,于是重新扔,夏娃喊收到第三个。

Advertised windowsize = 0

于是亚当连续扔了第四、五、六个,夏娃急了:孩他爹,慢点扔,臣妾忙不过来了…

Advertised windowsize > 0

于是亚当坐下休息,爱妃又开始叫了:继续扔吧。

亚当开始扔第七个,夏娃喊收到七个。

关闭连接终于亚当扔完了,亚当喊:爱妃,果子扔完了,寡人去忙别的了。

夏娃回复:好的,我也休息一下,再见!

亚当:再见!

以上的过程类似TCP连接的过程,是不是效率非常慢呢。

接下来再看看什么是UDP连接?

连接建立

亚当对着夏娃大喊:爱妃,你听得到吗?

夏娃回应:孩他爹,我听得到!

亚当接着喊:那好,我扔果子给你吃,你接一下啊。

运送货物

于是亚当开始扔果子

一个、两个、三个…

运送结束

十个扔完。

但最终扔到对方山头到底有几个,亚当没有底,也许有的果子落到悬崖了,但是这个效率高啊,可以连续扔,以前扔10个果子需要一分钟,现在只需要20秒。

用亚当和夏娃的故事来解释TCP和UDP行情传输模式的异同_第3张图片

大家是不是发现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

你可能感兴趣的:(用亚当和夏娃的故事来解释TCP和UDP行情传输模式的异同)