【安卓面试】网络基础及Android网络框架学习笔记

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

前言

面试Android岗位的时候,网络相关是必不可少的,上到常用的网络请求框架、原理,下到底层的协议具体内容到过程,本篇依旧是对常见网络框架的高度概括和整理以及一些文章的索引、常见面试题,对于三方框架详细内容还是需要结合源码查看

资料参考

TCP

  • TCP/IP 协议簇 分层

在这里插入图片描述

  • 握手和挥手流程见下
    请添加图片描述

  • 序列号:包序列号在TCP建立连接后,是累加的,从而包装通讯;三次握手中会确认双方的起始序列号

  • 洪泛攻击:TCP第一次发送握手请求时,传递一个虚假的IP地址,服务端收到后因为这个IP是假的收不到第三次确认的请求,导致一直处于等待状态

  • 特点

  1. 面向连接
  2. 可靠
  3. RTT(往返时延)、RTO(重传超时)
  4. 数据排列
  5. 流量控制
  6. 全双工
三次握手
  1. Client 发送SYN = 1 , seq = x ,进入SYN_SEND 状态
  2. Server 收到后,会像Client 发送 ACK = 1,ack = x + 1 , SYN = 1,seq = y,进入SYN_RECEIVE 状态
  3. Client收到并检查ACK = 1,ack 为 xxx +1 后,会进入 ESTABLISHED 状态,同时向Server发送 ACK = 1,ack = y + 1,Server收到后也进入 ESTABLISHED 状态,三次握手结束
四次挥手

以Client发起关闭请求为例

  1. Client 发送 FIN,seq = x,通知Server自己不再发送消息,进入 FIN_WAIT_1 状态
  2. Server 收到 请求,回复ACK = 1,seq = x+1,Client收到后进入 FIN_WAIT_2 状态
  3. Server 确认无消息发送了,发送 FIN,seq = y,进入CLOSE 状态 ,Client 收到后发送ACK = 1,seq = y+1,进入 TIME_WATING 状态
  4. Server 收到最后的ACK消息后进入 CLOSED,结束流程,Client 再经过 2MSL 的等待后,确认服务端已经关闭(如果服务端没收到会重发,来回2MSL),进入CLOSED 状态,流程结束

三方框架

OKHTTP
  • 概览
  1. OkHttpClient 、Request 对象都是使用构建者模式创建;核心请求是通过一个拦截器链获取(责任链陌生)
  2. 同步请求会直接阻塞执行,异步请求会根据队列加入线程池
  3. 请求执行完毕后会调用Dispatcher#finished 方法,此时会判断队列是否为空来调用idleCallback;如果是异步请求会调用Dispatcher#promoteCalls来调整队列,视情况把等待的请求加入
  • 核心
  1. Dispatcher(维护三个队列以及线程池等,管理请求的状态)
  2. 拦截器链(责任链模式)
  3. 五个okhttp的拦截器以及作用
Dispatcher
  • 三个队列
  private 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值