如何实现数据在网络中的通讯
2011-09-08 19:03
375 查看
如何实现数据在网络中的通讯
Kagula2011/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
相关文章推荐
- 网络通讯合并数据发送的重要性和实现原理
- 如何在网络中加载TabelView的数据(手动实现)?
- 如何实现win9X进程间数据通讯技术
- IOS-50-微信朋友圈一片模糊,教你在Mac和window系统下如何实现网络数据抓包
- Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析
- Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析
- 双网卡 -ip转发-不同网段通讯 -如何实现网络分段
- iOS系统如何实现网络数据抓包
- python网络数据采集-如何实现文件上传
- 如何实现win9X进程间数据通讯技术
- socket通讯和.net remoting实现网络数据通信哪个好些
- 网络通讯合并数据发送的重要性和实现原理
- 如何实现进程间数据通讯技术
- Unity如何实现网络通讯(三):观察者模式以及在网络模块的应用
- 网络通讯合并数据发送的重要性和实现原理
- 如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据
- Android网络开发中如何使用JSON进行网络通信---Android_JSON数据通讯方法解析
- 如何实现360手机卫士自动连接数据网络的功能
- Unity如何实现网络通讯(一):HTTP
- 如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据