Android网络

文章整理自内部网络模块同事一些课程的分享时所做的一些笔记

I. 无线网络的影响

1) 无线网络物理影响:

  • 丢包多
  • 带宽受限

2) 无线网络第三方影响:

  • 第三方运营商中间做手脚

II. 解决不稳定手段–TCP

TCP在移动网络中的缺陷

不是基于移动网络优化的

最优网络的关键点

  • 超时
  • 重试
  • 间隔设计

TCP自带可靠性保障

  • 序号 确认

  • 检验和(但不可靠)
    可以保证每个包是对的,10G左右的文件就会出现错误(检验和的错误(几种不通过的检验和达到一个对的/第三方运营商做手脚))

  • 超时重传(TCP中最重要与复杂的问题)
    发送每个报文都有计时器保障在计时器的时间里 是否有答复(无答复重发) (3s/6s/12s/24s/48s/96s 3*2^n)
    重发:无网络感知,网络断开会无限重发,所以需要做超时处理

ps: 网络有可能出现雪崩(网络资源供不应求(所以TCP是指数退避的机制BLG))

针对关键点策略

  • Connect超时
    (ios TCP: 6s前 重试: 每次间隔1s)

  • 首包超时
    发一个数据出去,服务器的答复时间,来确定是否网络有问题

    ps: 微信是 (数据长度/估计速度(根据网络类型估算) + 服务器处理时间(Wechat Server(10s))) 相关于 (并行处理的系数(竞争任务数*系数))

  • 分包超时
    解决网络偶断的问题
    wechat : GPRS: 10s、 Wifi: 8s

  • 读写超时
    (微信 64k回包)(2g 10k/s 6s服务器处理时间,要30s)
    通过首包超时分包超时减少 TCP重试间隔 来加快读写

    ps: 微信是 首包超时 + 接收数据长度/估算速度

  • 重试次数
    两次(因为第一次失败可能是偶然,第二次偶然失败概率很低(那就很有可能必然失败))

  • 重试间隔
    第一次重试快重试(间隔小),第二重试慢重试(间隔大)

  • 任务超时
    统一的返回时间,无论以上任何因素的表现如何,任务超时时间统一。

III. 处理带宽受限问题

解决问题关键字

  • 速度(发图)
  • 最低失败成本(断点续传)

两点场景

  1. 接收方处理能力不足
  2. 线路内部堵塞

TCP自带的解决方案

  • 滑动窗口协议
    发送窗口长度 计算: Min[rwnd(接收端窗口)(TCP中的一个字段从服务器带回来), cwnd(拥塞端口(通过探测获得))]

  • 慢开始和拥塞避免
    避免算法

  • 快重传

最高速因数

  • 减少send调用次数

  • 写满TCP发送buffer(填满发送窗口)

  • 控制好数据处理线程(提高处理能力来提高速度)(接收方策略)(接收方每次读一次数据,接收窗口就会变大,(Android写磁盘效率低,秒级))

  • 单socket vs 多 socket

IV. 长链接需要注意

DNS特点:

  • 不可靠

    运营商劫持、运营商控制超时控制(域名解析更新)、可用信息、批量解释的优化。

    ps: 微信是自建DNS服务器

长链接

为什么需要心跳:

  • 保证连接有效(防止中间与微信后台 资源回收)

  • TCP在链路层上需要发送数据的时候,才会得到信令

    ps: 微信心跳时间: 5min

信令风暴

心跳等导致频繁的请求信令。(目前在国内是移动渠道比较多)

资源回收情况:

  • 3/4G网络
    国内情况:移动之前是5min,目前10min。
    国外情况: google是10min/28min

  • 智能心跳
    自己探测处理

    移动在5min、10min、15min。
    联通与电信都在: 10min

V. 应用层协议设计

网络协议:

  1. HTTP、TCP、FTP….

内容组织 => 网络通道 => 服务器 => 回包

网络协议关键字

1. 语法(如何组织表达的内容)

  1. 文本:
    diyk-vxml(编解码慢)、json

  2. 二进制(需要自描述(类型、长度)):
    TLV(Tag-Length-Value)、Protobuf

  3. 其他

2. 语义(表达内容(格式的设计))

需要考虑的: 可扩展、兼容、并发、高效实时、省流量

协议内容:

  1. 业务数据

  2. 信令数据:
    分包(octet-stuffing、octet-counting、connect-blasting)、并发处理(序列号、命令号)、兼容性&拓展性(版本号,压缩算法、加密算法)、精简(严格按照packed所需大小)

3. 时序(先后顺序)



Android网络
https://blog.dreamtobe.cn/2015/03/28/Android网络学习笔记整理/
作者
Jacksgong
发布于
2015年3月28日
许可协议