好久没写博客,今天手痒痒,就把网络相关的东西总结总结吧;
http:关于http的使用这篇文章介绍的比较详细,我就不多说了
http://www.cnblogs.com/wendingding/p/3813466.html
一:HTTP和HTTPS
1.1: HTTP
HTTP的全称是Hypertext Transfer Protocol,超文本传输协议,被用于web浏览器和网站服务器之间传递信息。http协议工作是以明文方式发送内容,不提供任何形式的数据加密,这也是很容易被黑客利用的地方,如果黑客截取了web浏览器和网站服务器之间的传输信息,就可以直接读取其中的信息,因此http协议不适合传输一些重要的、敏感的信息,如信用卡密码及支付验证码等;
1.2: HTTPS
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer----安全套接字层http协议)就是为了解决http的安全性问题而生的,为了数据的安全,https在http的基础上加入ssl协议,ssl依靠证书来验证服务器的身份,为浏览器和服务器之间的通信进行加密;
1.3: 公开密钥加密(非对称加密,如RSA)
公开密钥加密也称非对称加密,该加密算法使用两个不同的密钥:加密密钥(公钥)和解密密钥(私钥)。这两个密钥是数学相关的,某用户用加密密钥加密后所得的信息只能用该用户的解密密钥才能解密。RSA算法(由发明者Rivest,Shmir和Adleman姓氏首字母缩写而来)是著名的公开密钥加密算法。
公钥加密的另一用途是身份验证:用私钥加密的信息,可以用公钥对其解密,接收者由此可知这条信息确实来自于拥有私钥的某人。私钥加密的过程即数字签名。
用公钥加密的数据只有私钥才能解密;相反的,用私钥加密的数据只有公钥才能解密,正是这种不对称性才使得公用密钥密码系统被广泛应用。
1.4: 对称加密(如AES、DES,或者RC6)
对称加密因为使用相同的密钥来进行加密、解密,所以运行速度较快
1.5: SSL:安全套接字层(Secure Socket Layer,位于TCP/IP协议和HTTP协议之间)
SSL 协议既用到了公钥加密技术(非对称加密),又用到了对称加密技术。
Step 1:用公开密钥加密技术(非对称加密,通常为RSA)验证彼此身份(有时服务器不需要验证客户端身份),并协商Step2中通讯时所用的对称加密密钥;
Step 2:用对称密钥加密技术(如AES、DES,或者RC6)加密服务器端和客户端通讯时的数据。
这样做的好处是:公开密钥加密(非对称加密)相对复杂,速度慢,可用来完成安全性要求较高的身份认证、密钥协商等事务;对称加密技术相对简单,速度快,可用来加密客户端与服务端之间传输的数据内容。
1.6: HTTPS 客户端与服务器交互过程
1、客户端发送请求,服务器返回公钥给客户端;
2、客户端生成对称加密秘钥,用公钥对其进行加密后,返回给服务器;
3、服务器收到后,利用私钥解开得到对称加密秘钥,保存;
4、之后的交互都使用对称加密后的数据进行交互。
1-3 : 主要是身份验证(非对称加密),被称为握手阶段,通过握手阶段,客户端和服务端主要交换了三个信息:
1. 数字证书:该信息是我们进行开发需要关注的!数字证书包含了公钥等信息,一般由服务器发给客户端,接收方通过验证这个证书是不是由信赖的CA签发(花钱),或者与本地的证书相对比(自建),来判断证书是否可信;假如需要双向验证,则服务器和客户端都需要发送数字证书给对方验证;
2. 3个随机数:3个随机数是用于生成对话密钥的;
3. 加密通信协议:客户端和服务器端通信需要采取同样的加密通信协议(哪种对称加密技术,AES、DES、RC6);
4 : 对交互的数据进行对称加密(AES、DES、RC6);
1.7: AFNetworking集成https
如果你们公司是到正规机构申请的证书,那么恭喜你,你什么都不用做,AFNetworking 内部帮我们封装了HTTPS的请求方式,你只需要把URL改成https:// 就好了
如果你们是自建的证书,那么也很简单
生成.cer证书:
openssl x509 -in <你的服务器证书>.pem -outform der -out server.cer
向项目中倒入.cer证书,然后设置securityPolicy;
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.securityPolicy.SSLPinningMode = AFSSLPinningModeCertificate;
// 2.设置证书模式
NSString * cerPath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"cer"];
NSData * cerData = [NSData dataWithContentsOfFile:cerPath];
manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:[[NSSet alloc] initWithObjects:cerData, nil]];
// 客户端是否信任非法证书
mgr.securityPolicy.allowInvalidCertificates = YES;
// 是否在证书域字段中验证域名
[mgr.securityPolicy setValidatesDomainName:NO];
http://www.jianshu.com/p/75d96b72bfb1
http://m.blog.csdn.net/article/details?id=53991422
1.8: http及https区别
1. 安全协议配置费用,https协议需要到ca申请证书,一般免费的很少,需要交费(当然,自建也可以)
2. http是超文本传输协议,信息是明文传输,链接是无状态的,https则是具有安全性的ssl加密传输协议,更安全;
3. http和https使用的是完全不同的连接方式,用的端口不一样,前者是80,后者是443;
二:TCP、UDP、IP、Socket
网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
IP 协议对应于网络层;
TCP、UDP协议对应于传输层;
HTTP协议对应于应用层;
socket则是对TCP/IP协议族的封装和应用;
可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据
2.1: socket
socket是对TCP/IP协议族的封装,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。从而形成了我们知道的一些最基本的函数接口,比如create、 listen、connect、accept、send、read和write等等
传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,
ios端关于socket的开发可以使用CocoaAsyncSocket来实现,因为本人项目中没实际应用过,所以就不多说了;
git:https://github.com/robbiehanson/CocoaAsyncSocket
网上的简例:
http://www.jianshu.com/p/3e4f3de18e3b
https://my.oschina.net/joanfen/blog/287238
2.1: TCP、UDP
2.21: TCP(Transmission Control Protocol 传输控制协议)
TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;
TCP连接的三次握手:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据
断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”
http连接与TCP连接的区别:
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
2.22: UDP(User Datagram Protocol 用户数据报协议)
而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议
也正由于上面的特点,使得UDP的开销更小数据传输速率更高,因为不需进行三次握手和对收发数据的确认,所以UDP的实时性更好;
网友评论