如何实现数据在网络中的通讯
来源:互联网 发布:php json对象转数组 编辑:程序博客网 时间:2024/05/17 06:41
如何实现数据在网络中的通讯
Kagula
2011/9/7
介绍
数据在网络中通讯会面临两个问题[1]数据的完整性[2]数据的安全性
数据完整性,指的是发送出去是什么样(长度和比特)的数据,接收到的就是什么样的数据,即数据不会在传输途中失真。
数据安全性,指的是数据内容不会被第三方(人)理解(可读)。
针对这两个问题本文提出了一个解决思路,重点放在数据的完整性这个问题。
这里假设网络通讯是在TCP/IP协议之上进行的。
阅读前提:[1]TCP上面的数据通讯编程经验[2]了解基本加解密方面的知识
正文
对在线服务器上来说万分之一的数据通讯出错也可能造成灾难性的后果,所以我们先要保证数据的完整性。
Q1:如何保证数据的完整性
A1:如下图所示,把要传送的数据分成一个个等长的数据包(根据TCP协议的特点,数据包的长度被设为1024字节)再传送。
由于每个数据包内含有数据包特征码,所以可以有效检测数据的完整性。数据包特征码一般采用CRC64或MD5方式生成。若接收到的数据包不完整可以要求发送方重新传送。
图一 数据发送流程图
具体实现:
可以把1.1做为一个模块,1.2和1.3封装成数据通讯模块,1.1以异步方式调用数据通讯模块,完成数据发送任务后数据通讯模块以代理(或消息)的方式通知应用层数据发送情况。同理实现“接收方”的编码。
Q2:如何保证数据的安全性
A2:在数据完整的前提下,我们可能对消息进行消息加密,通常消息是一个数据结构体:
[1]不同的需求、不同的开发规范,都会导致消息结构的多样化
[2]虽然这样,但是为了保证数据的进一步安全,我们可以对消息进行加密。加密会生成密文、和密钥(有一个或两个)。密钥可以跟随密文一起发送或单独发送。下面列出几种简单的加密方式。
[a]对称密钥加密,[a-1]密钥作为消息的一部份,发送端和接收端用同一把钥匙解密。缺点是,若hacker清楚密钥在消息体中的位置,就可以解出明文。[a-2]密文和密钥分别传送。缺点是,若hacker知道每次传送的信息体是密文还是密钥,而且知道它们的对应关系,就可以解出明文。
[a-1]、[a-2]中的密钥每次数据传递只用一次,加密算法(采用某种加密方法的变种)只有数据发送方、接收方知道,且不定时更新,这样可以加大hacker的破解难度,一般没有这个必要。
[b]非对称密钥加密,[b-1]由数据发送方发出请求,请求接收方生成密钥和公钥,并返回私钥给数据发送方用于消息加密,数据发送方得到消息后,用私钥加密,然后加密文发送数据接收方,由数据接收方的应用层用公钥解密。
我倾向于使用[a-1]的方式,因为它的代码实现最简单,而且hacker也不会知道你采用什么样的加解密算法,在一般场合下使用足够了,实在有特殊需要,可以对“密钥”采取[b-1]的模式加密,进一步增加安全性。
参考资料
[1]《RSA算法》
http://baike.baidu.com/view/7520.htm
[2]《AES》
http://baike.baidu.com/view/133041.htm
- 如何实现数据在网络中的通讯
- 浮点数据在通讯报文中的处理
- 浮点数据在嵌入式串行通讯中的快速处理
- 在 AIX 上通过数据管道实现进程间通讯
- 在32位程序中如何实现进程间通讯
- 在32位程序中如何实现进程间通讯
- 在VS2010中如何添加MSCOMM控件,实现串口通讯
- 如何在网络中加载TabelView的数据(手动实现)?
- 网络部分在Linux中的实现
- 双网卡 -ip转发-不同网段通讯 -如何实现网络分段
- 【原创】c#如何实现RTU远程数据采集功能及RTU在水利工程中的运用
- VC6.0如何实现把excel中的数据读取后显示在listctrl列表上
- c#如何实现RTU远程数据采集功能及RTU在水利工程中的运用
- TCP/IP网络是如何通讯的
- TCP/IP网络是如何通讯的
- TCP/IP网络是如何通讯的
- C#中请问如何在串口通讯中接收输出HEX格式数据
- 在网络上进行摄像头视频通讯
- android开发中出现Only the original thread that created a view hierarchy can touch its views.错误的解决方法
- memcached之memcached的分布式算法
- 存储过程
- SVN服务器搭建--Subversio与TortoiseSVN的配置安装
- 学习的差距
- 如何实现数据在网络中的通讯
- tomcat 7.0 出现异常 Parameters: Invalid chunk ignored的解决办法
- Ubuntu系统目录结构
- 2011-09-08 java告一段落,开始学习Mysql.
- crm之搭建框架
- eclipse 快捷键
- Android入门之ProgressBar(纯java)
- EventArgs
- sql.server一些处理数据语句