iOS网络层详解和优化

HTTP

HTTP方法

HTTP属于应用层。具有以下方法:

GET 最常见

HEAD 服务器只返回头部。比如可用于了解资源情况,看看某个对象是否存在,测试资源是否被修改了。

PUT 向服务器写入文档

POST 写服务器提交数据,通常是表单

TRACE 允许客户端在最终将请求发送给服务器时,看看请求变成了什么样。因为有可能被防火墙、代理、网关等修改

OPTIONS 请求服务器告知其支持的各种功能。比如服务器支持哪些方法;对某些特殊资源支持哪些方法等。

DELETE 请服务器上传请求URL所指定的资源

状态码

100-199 信息性状态码,。

200-299 成功状态码。200是最常见的

300-399 重定向。302、304比较常见。比如判断服务器图片是否修改了使用304

400-499 客户端错误。 客户端向服务器发送了一些无法处理的东西,比如错误的请求报文,请求一个不存在的URL404

400-599 服务器内部错误。

Api请求过程

当我们向服务器发送一个请求的时候,做了以下事情:

1.DNS Lookup

2.TCP Handshake

3.TLS或SSL Handshake

4.TCP/HTTP Request/Response

DNS Lookup

DNS(Domain Name System)域名解析系统,计算机之间的通信不认识域名,只能认识IP,所以DNS就是网络请求的第一步,通过域名获取IP

TCP Handshake

HTTP属于应用层协议,它不关心网络t通信的具体细节,全部交给TCP/IP。TCP(Transmission Control Protocol 传输控制协议)它完成第四层传输层所指定的功能。

TCP三次握手连接

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

第三次握手,主机A发送一次确认是为了防止:如果客户端迟迟没有收到服务器返回的确认报文,这时他会放弃连接,重新启动一条连接请求;但问题是:服务器不知客户端没收到,所以他会收到两个连接请求,白白浪费了一条连接开销。

SSL握手

SSL运行在TCP/IP层之上、应用层之下,为应用层提供加密数据通道

HTTPS比较消耗性能,主要体现在SSL握手消耗的时间。它消耗的时间是TCP握手的时间的3倍甚至更多。

"握手阶段"的所有通信都是明文的。整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。

HTTP和HTTPS时间消耗

HTTP耗时 = TCP握手

HTTPs耗时 = TCP握手 + SSL握手

keep-alive

客户端与服务器保持连接的状态,比如长连接

1HTTP/1.1 200 OK Connection: Keep-Alive Content-Encoding: gzip Content-Type: text/html; charset=utf-8 Date: Thu, 11 Aug 2016 15:23:13 GMT Keep-Alive: timeout=5, max=1000 Last-Modified: Mon, 25 Jul 2016 04:32:39 GMT Server: Apache

max:表示服务器还希望为多少个事物保持此连接的活跃状态

timeout:服务器能够保持多久活跃状态

网络优化

优化DNS解析和缓存

APP内置Server IP列表,该列表可以在App启动服务中下发更新。App启动后的首次网络服务会从Server IP列表中取一个IP地址进行TCP连接,同时DNS解析会并行进行,DNS成功后,会返回最适合用户网络的Server IP,那么这个Server IP会被加入到Server IP列表中被优先使用。

Server IP列表有权重机制的,DNS解析返回的IP很明显具有最高的权重,每次从Server IP列表中取IP会取权重最高的IP。列表中IP权重也是动态更新的,根据连接或者服务的成功失败来动态调整,这样即使DNS解析失败,用户在使用一段时间后也会选取到适合的Server IP。

网络质量检测(根据网络质量来改变策略)

根据用户是在2G/3G/4G/Wi-Fi的网络环境来设置不同的超时参数,以及网络服务的并发数量。比如在环境比较差的情况下:

1.将并发数设置为一个改成串行

2.动态设置超时时间

3.throttle 进行节流

AFNetworking中的throttle方法

1- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes                                   delay:(NSTimeInterval)delay;

4.管道化连接 如果服务器不支持管线化的话,那么响应就会乱序。所以服务器要支持。 AFNetworking中通过HTTPShouldUsePipelining属性来设置,默认为NO。

减少数据传输量

选择合适的数据格式进行传输,比如使用Protocol Buffer数等,使用WebP图片格式

提供网络服务重发机制

当第一次网络请求失败的时候,自动尝试再次重发

使用HTTP缓存

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容