前言
面试Android岗位的时候,网络相关是必不可少的,上到常用的网络请求框架、原理,下到底层的协议具体内容到过程,本篇依旧是对常见网络框架的高度概括和整理以及一些文章的索引、常见面试题,对于三方框架详细内容还是需要结合源码查看
资料参考
- 五层模型参考
- 三次握手和四次挥手
- 抓包工具: Fiddler、wireShark、TCPDump等等
- 小林coding的HTTP面试题
- https okhttp 应用自定义证书
- okhttp 实现https双向绑定
- 双向认证 SSL-pinning
TCP
- TCP/IP 协议簇 分层

-
握手和挥手流程见下

-
序列号:包序列号在TCP建立连接后,是累加的,从而包装通讯;三次握手中会确认双方的起始序列号
-
洪泛攻击:TCP第一次发送握手请求时,传递一个虚假的IP地址,服务端收到后因为这个IP是假的收不到第三次确认的请求,导致一直处于等待状态
-
特点
- 面向连接
- 可靠
- RTT(往返时延)、RTO(重传超时)
- 数据排列
- 流量控制
- 全双工
三次握手
- Client 发送
SYN = 1 , seq = x,进入SYN_SEND 状态 - Server 收到后,会像Client 发送
ACK = 1,ack = x + 1 , SYN = 1,seq = y,进入SYN_RECEIVE 状态 - Client收到并检查ACK = 1,ack 为 xxx +1 后,会进入 ESTABLISHED 状态,同时向Server发送
ACK = 1,ack = y + 1,Server收到后也进入 ESTABLISHED 状态,三次握手结束
四次挥手
以Client发起关闭请求为例
- Client 发送
FIN,seq = x,通知Server自己不再发送消息,进入 FIN_WAIT_1 状态 - Server 收到 请求,回复
ACK = 1,seq = x+1,Client收到后进入 FIN_WAIT_2 状态 - Server 确认无消息发送了,发送
FIN,seq = y,进入CLOSE 状态 ,Client 收到后发送ACK = 1,seq = y+1,进入TIME_WATING状态 - Server 收到最后的ACK消息后进入 CLOSED,结束流程,Client 再经过 2MSL 的等待后,确认服务端已经关闭(如果服务端没收到会重发,来回2MSL),进入CLOSED 状态,流程结束
三方框架
OKHTTP
- 概览
- OkHttpClient 、Request 对象都是使用构建者模式创建;核心请求是通过一个拦截器链获取(责任链陌生)
- 同步请求会直接阻塞执行,异步请求会根据队列加入线程池
- 请求执行完毕后会调用
Dispatcher#finished方法,此时会判断队列是否为空来调用idleCallback;如果是异步请求会调用Dispatcher#promoteCalls来调整队列,视情况把等待的请求加入
- 核心
- Dispatcher(维护三个队列以及线程池等,管理请求的状态)
- 拦截器链(责任链模式)
- 五个okhttp的拦截器以及作用
Dispatcher
- 三个队列
private

本文概述了TCP三次握手和四次挥手原理,探讨了OKHTTP连接池复用与回收机制,Retrofit框架工作原理,并解答了常见面试问题,涉及Post/Get请求、HTTP协议细节、HTTPS抓包与反抓包等知识点。
最低0.47元/天 解锁文章
693

被折叠的 条评论
为什么被折叠?



