网络基础知识
网络七层
网络层:http、https协议
传输层:TCP、UDP
Socket:套接字,是应用层 与 TCP/IP 协议族通信的中间软件抽象层,表现为一个封装了 TCP / IP协议族的编程接口(API) Socket不是一种协议,而是一个编程调用接口(API),属于传输层。
socket建立连接后,如果CS两端都没有关闭,socket通道就会一直保持连接,当时为了减少服务器资源消耗,服务器一段时间收不到客户端的消息后就会断开连接。如果客户端想一直连接,那可以没间隔一段时间给服务器发送一个消息,让服务器重新更新断开连接时间。这个就是心跳包机制。所以socket既可以是短连接,也可以是长连接,取决于客户端是否会间隔发送消息。
高效保活长连接
需要考虑一下几个方面
进程保活:进程被杀了,连接也就断开了
心跳机制:
断开重连:由于网络断开或者网络差等原因断开了,需要重连。
网络请求响应结构
请求
请求行:包括协议、协议版本等
请求头:请求的一些参数配置,例如保活时间、语言等
请求行:请求的内容
响应
响应行:包括协议、协议版本、请求码等
响应头:请求的一些参数配置,例如cookie、语言等
响应行:响应的内容
Tcp三次握手、四次挥手
三次握手:
客户端携带req号给服务器发送消息
服务器携带ack号回给客户端(确认服务度能收到客户端消息)
客户端携带req号给服务端发送消息(确认客户端能受到服务度消息)
四次挥手
客户端给服务端发送消息表示要断开了
服务端给客户端发送消息,表示知道了,等我发送剩余消息
服务端给客发送完剩余消息,表示要关闭了
客户端给服务端发送消息,表示受到了马上关闭
然后服务端、客户端都断开了连接
https的ssl协商
ssl协商:发送方将对称加密的密钥通过非对称加密的公钥进行加密,接收方使用私钥进行解密得到对称加密的密钥,再通过对称加密交换数据。
三方框架
OkHttp3:
采用责任链模式,设置拦截器对请求跟响应做统一处理,自带了五个拦截器,实现了重连接、设置请求头、是否缓存等功能,也可以自定义拦截器。
线程池定义在分发器dispather中,没有核心线程、线程可以无限多,线程存活时间60秒。 OkHttp3的最底层是Socket
优点 支持HTTP2/SPDY(SPDY是Google开发的基于TCP的传输层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。) socket自动选择最好路线,并支持自动重连,拥有自动维护的socket连接池,减少握手次数,减少了请求延迟,共享Socket,减少对服务器的请求次数。 基于Headers的缓存策略减少重复的网络请求。 拥有Interceptors轻松处理请求与响应(自动处理GZip压缩)。
Retrofit:基于Okhttp再封装
本质过程:App应用程序通过Retrofit请求网络,实质上是使用Retrofit接口层封装请求参数、Header、Url等信息,之后由okhttp来完成后续的请求工作。在服务端返回数据后,okhttp将原始数据交给Retrofit,Retrofit根据用户需求解析。