设为首页 加入收藏

TOP

2016-08-03-信息系统实践手记8-两模块通讯的一些事(二)
2019-09-17 18:41:10 】 浏览:48
Tags:2016-08-03- 信息系统 实践 手记 模块 通讯 一些
序(CODEC)。

4. 针对TCP心跳的一些说明

TCP协议内容较多,有好几本大书,但核心内容,网上也转载很多,这里只提一些内容。
TCP如果不在初始化socket的时候给予超时timeout设定(看tcp类库支持哪些超时,一般如java io/NIO支持连接超时,传输超时等),那么默认就是2小时(120分钟),在120分钟内TCP协议内部自己有心跳维持socket连接通道,
超过120分钟,则按照状态机变化,两端都开始拆除TCP连接。当然,两端庄模块开发的如果不好,这就会导致对端有大量端口TIME_WAIT等等TCP状态机不能顺利,快速,高效的拆除并被复用,导致资源消耗,甚至耗光65535个port口。
除了TCP自身的超时,或者网络lib库能力范围内给予的连接超时,传输超时(闲置idle超时)外,桩模块可以人为的在逻辑层添加自己的超时和心跳机制。举例如下:
(1)收到PING,就发PONG,收到PONG,不响应;这是对等心跳探测包,有发起者探测对方是否活着alive;
(2)两边约定心跳间隔时间,比如每120秒发送心跳包(比如“HB”2个字符,或某种字节等),或者约定只有server发给client,不用反向;
特别说明:这是高层逻辑的心跳,应用层自己使用的,而且其实现根据前述3种使用方法而不同,比如你用TLV,那么也需要额外定义一个“心跳包”的协议;

5. 用哪些类库?

一般开发桩模块的时候,两端约定好传输协议,比如TLV,那么就各自开发。你用熟悉的语言比如java,而且会进一步使用现成的框架,比如netty(异步io框架),
这样你就不用赤裸的使用java的nio自己一步步处理,不用重复发明轮子。netty是一个非常好用的库,开发者同时也开发了mina,两个库有点类似,各有千秋和侧重。
详见我整理的[ITIS-资料集合贴]中的介绍和电子书;

6. 对接协议的的安全性问题

TCP是有连接,有状态,有序,丢包重传的,所以他有基础的正确性保证。但TCP完全会受到重传攻击,或侦听窃听,或篡改数据包等破坏方式。而且TCP保证的是网络层的字节流的按序正确到达,不保证上层逻辑(应用层)认为的数据是百分百正确的。所以,有如下建议:
(1)可以根据需求,对自己的数据进行编码,压缩,加密;
(2)可以参考一些开源的密钥,加密算法,认证,证书等协议的使用;
(3)曾经这样弄过,给payload转为base64,并且做了MD5摘要,传到对端MD5用来验证数据对不对,也可作为异步反馈的key值。

总结,总是TCP协议丰富多彩,如果熟悉一些框架和常用手段,再加上一些诸如MD5,加密压缩算法等,完全可以自己搭建和实现不同的传输协议,满足不同情况的要求,在两个对端桩模块之间实现数据的传递。

END

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Nginx+Tomcat高性能负载均衡集群.. 下一篇系统架构设计之工具简介

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目