android 网络协议简述

一:http协议

    http协议(Hypertext transfer protocol)超文本传输协议。

    通常来说http请求包含四部分:请求行,请求报头,空行,请求数据(消息主体)。

    请求行由请求方法,url,版本号组成

    http的请求方法有多种,我们常用就是get和post方法。其余还有put,delete,head,trace,connect,options。

 

    get和post的区别:

        1:get的把参数加在请求行(url)中,而post (请求头+请求体)request body中。

        2:get的请求有大小限制(1024字节) ,理论上post没有限制。

        3:安全性考虑post的安全性更高,

        4:get是向服务器发索取数据的请求,post是提交数据,当然不能简单地理解为一个取,一个发。因为post也同样索取数据。

    请求行简单的举个例子:

        get  http://www.baidu.com  http1.1 

   

 

二:tcp/ip协议

            

       tcp/ip模型:应用层,传输层,网际层,网络接口层,硬件层。

        iso模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。

        tcp协议(传输层)/ ip协议(网络层/网际层)

        tcp三次握手:

            1:建立连接后,客户端发送a包到服务端,等待确认。

            2:服务端接收,并发送b包到客户端,(a+b)。

            3:客户端接收,发送确认包,连接成功。

        tcp/udp区别:

            tcp协议是面向连接,安全的,传输可靠(保证传输顺序,完整),传输大量数据,传输慢。

            udp协议面向非连接,不安全,用于传输少量数据,传输速度快。

三:长连接和短连接            

http1.0的时候是不支持长连接的,http1.1开始,支持长连接,默认请求就是长连接,connection是keep-alive。

多个http请求公用一个tcp连接。

http协议说到底是应用层协议,而tcp是传输层协议

我们平时的网络请求用到的就是长连接,当然connection设置keep-alive,需要客户端和服务端同时设置才行。

长连接并不是永久连接。我们可以设置连接超时时间来控制断掉请求。

 

四:http/2

http/2底层使用二进制传输,帧是最小的传输数据单位。

特性:

多路复用:多个HTTP请求可以放在同一个连接中进行,自有数据流能并行传输。

head压缩:HTTP1中每次HTTP请求,都是必须要带上HTTP头的.而HTTP/2则在建立连接后,把头字段作为键值对,在两边维护一份字典,相同的就不用再传了,如有新增或变更,则再在传输时带上。

五:WebSocket和Socket

WebSocket:在单个tcp连接上的全双工协议。使得客户端和服务端数据交互变得更简单,支持服务端向客户端发送数据。

 

最开始的即时通信通常使用轮询技术,也就是客户端不间断的,定时向服务端请求数据,缺点就是浪费资源,会有大量不需要的请求。WebSocket在经过浏览器、服务器建立TCP连接,三次握手后就会建立持久化的连接,并且进行双向数据传输。属于应用层协议。

Socket:便于使用Tcp/Udp的接口规范(封装)。(传输层接口

 

 

 

六:https

https是基于安全套接字的http协议。

具体的加密过程是怎样的呢?

1:客户端请求服务端->服务端返回ca证书

2:客户端校验ca证书,客户端生成随机字符串发给服务端,服务端私钥加密返回给客户端,客户端公钥解密,判断跟原字符串是否相等,ok是服务端。

3:客户端生成对称加密算法和密钥,用公钥加密,服务端拿到用私钥解密,以后通信使用对称算法加密通信。

上述第二步会有问题:如果黑客模拟发送一串有规律的字符串,服务端加密后返回,就有可能被推算出私钥,所以后端这里并不是直接用私钥加密的原字符串,而是先计算原字符串的hash值,然后对hash进行加密,从而降低被破解的机率。

 

 

 

        

        

 

        

你可能感兴趣的:(android 网络协议简述)