iOS 面试全方位剖析 -- 网络篇


这节涉及到的内容

  • HTTP 协议
  • HTTPS 与网络安全
  • TCP / UDP
  • DNS 解析
  • Session / Cookie

HTTP 协议

对 HTTP 的理解?
超文本传输协议,要讲的内容

  • 请求/响应报文
  • 连接建立流程
  • HTTP的特点

请求/响应报文

一般在回答面试官什么是 HTTP 的时候,第一点要回答的就是 请求/响应报文的组成结构

  • 请求报文的格式

三个部分 , 请求行
请求头,都是以 key-value形式组成
实体主体 , GET 请求一般不带有实体主体

  • 响应报文的格式


三个部分 , 响应行
请求头,都是以 key-value形式组成
实体主体

GET 和 POST 方式的区别

比较初级的回答方式是下面这样

  • GET 请求参数以 ? 分割拼接到 URL 后面 ,POST请求参数在 Body里面
  • GET 参数长度限制 2048 个字符 , POST一般没有该限制
  • GET 请求不安全 , POST请求比较安全

比较高逼格的回答是这样的
从语义的角度来回答
GET 获取资源 ,安全的 , 幂等的 , 可缓存的
POST 处理资源 ,非安全的 ,非幂等的 , 非可缓存的

  • 安全性 : 不应该引起 Server 端的任何状态变化
  • 幂等行 : 同一个请求方法执行多次和执行一次的效果完全相同
  • 请求是否可以被缓存

状态码

都有哪些状态码,他们的含义是什么?
2xx : 比如 200 ,响应成功
3xx : 比如301,302 一些网络的重定向
4xx : 比如 401, 404 客户端的请求本身存在某些问题
5xx : 比如501 ,502 Server 端本身存在异常

连接建立流程

比较经典的三次握手,四次挥手

HTTP 的特点

无连接, 每次请求有一个建立连接和释放连接的过程

我们可以通过 HTTP的持久连接方案来进行 HTTP 无连接的一个补偿


  • 非持久连接,在 Client 和 Server 的交互中,打开一个 TCP 连接,进行网络数据的传输,然后关闭这条 TCP 连接. 之后发送第二个请求的时候可能需要重新打开一个 TCP 的连接 。 也就是说每次请求接口都需要重新建立一个 TCP 连接,经历 三次握手 四次挥手.

  • 持久连接 , 打开一条 TCP 通道,之后可能在一定时间内, 多个 HTTP 请求可能会在同一条链路上进行请求和响应的传递

持久连接涉及到 HTTP 的哪些头部字段呢?

  • Connection : keep-alive 客户端期许采用持久连接
  • time : 20 多长时间有效
  • max : 10 最多可以发生多少个 HTTP 请求和响应对

怎样判断一个请求是否结束?

在同一条 TCP上产生了多次 HTTP 请求,怎样判断前一个请求的结束

  • Content-length : 1024 , 发送一个请求的时候,Server 端会携带响应数据的大小,通过 Content-length 来标识,客户端可以根据所接受数据的字节数是否到达 Content-length 的值,到达了就说明全部接受完毕,既 HTTP 请求结束
  • 还有一种情况, 当使用 POST 端进行请求的时候 , 往往 Server 端需要多次响应来返回给客户端数据, 我们可以通过 HTTP 响应报文当中的头部字段叫 chunked 来判断请求是否结束,当有多个块通过 HTTP 的 TCP连接传输给客户端的时候,每一个报文都会带有chunked 这个字段, 最后一个块会带有一个空 chunked,这样就可以判断前一个网络请求是否结束了.

无状态

对 HTTP 协议无状态特点的补偿. Cookie / Session

cookie

主要用来记录用户状态,区分用户, 状态保存在客户端。

客户端发送的 Cookie 在 http 请求报文的 Coolie首部字段中
服务器端设置 http 响应报文的 Set-Cookie 首部字段

如何保证 Cookie的安全

  • 对 Cookie 进行加密处理
  • 只在https 上携带 Cookie
  • 设置 Cookie 为httpOnly,防止跨站脚本攻击
Session

主要用来记录用户状态,区分用户, 状态保存在服务器端。
Session 需要依赖于Cookie 机制

看一下 Session 的工作流程图



HTTPS 与网络安全

HTTPS = HTTP + SSL/TLS

HTTPS 连接的建立流程是怎样的?

我们看一幅时序图


会话秘钥 = random S + random C + 预主秘钥

HTTPS都使用了哪些加密手段?为什么?

  • 连接建立过程中使用非对称加密,很耗时
  • 后续通信过程中使用对称加密

非对称加密

对称加密


TCP/UDP

传输层协议

  • TCP, 传输控制协议
  • UDP,用户数据报协议 无连接,尽最大努力交付

TCP特点

面向连接,可靠传输,面向字节流,流量控制,拥塞控制

面向连接

数据传输开始之前,需要建立连接(三次握手)。 数据传输结束之后,需要释放连接(四次挥手)

可靠传输

TCP如何保证可靠传输呢?

  • 无差错
  • 不丢失
  • 不重复

面向字节流

不管发送方一次性提交给 TCP 的缓冲是多大的数据,对于TCP本身来说它会根据实际的情况来进行划分,比如发送方发送10字节,TCP 并不是一次性传递10字节数据,它可能是拆分成3个字节和7个字节分俩次发送给接收方

流量控制

基于滑动窗口协议实现.
什么是滑动窗口协议? (新浪微博三面面试真题)


对照上图,现在假如发送窗口是客户端,接收窗口是服务端。当我们现在要继续发送数据的时候,可能由于接收方的接收窗口没有那么大,而发送方的发送窗口非常大,就会以更快的速率往后发,需要由接收窗口通过向TCP的报文首部字段中去更改窗口值去调整发送方的发送窗口大小。

拥塞控制

  • 慢开始,拥塞避免
  • 快恢复,快重传

横轴代表 APP 交互或者轮循次数,纵轴代表窗口值的大小

上图中,一开始我们可以先发送一个报文,如果没有发生网络拥塞,就继续发送 2 个报文,依然没有发生网络拥塞,就继续翻倍,直到 16 个报文,这就是慢开始算法

当到达 16 报文数的时候,会采用拥塞避免的策略来进行发送报文的一个数量的线性增长。

当报文数到 24 的时候,就会发生网络拥塞,采用拥塞避免的乘法减小到值发送 1 一个报文,来减少对网络层面带来的压力,然后再重新开始 慢开始算法增长,同时限定一个新的门限值.


DNS 解析

DNS 解析是怎么的一个过程? (大厂常问的一个问题)
域名到IP地址的映射,DNS解析请求采用UDP数据报,且明文

客户端通过 DNS 协议向 DNS 服务器去请求相应域名的解析,然后 DNS 服务器把解析结果的IP 地址返回给客户端,再由客户端向 IPServer进行相应的网络请求

DNS 解析查询方式

  • 递归查询
  • 迭代查询

DNS 解析存在哪些常见的问题 (重点)

  • DNS 劫持问题
  • DNS 解析转发问题

DNS 劫持

由于 DNS 解析过程采用 UDP 数据报明文传输,就会涉及到一个窃听的问题。 假如现在有一个钓鱼 DNS 服务器,就会劫持到对应的一个 DNS 解析的请求, 然后钓鱼服务器返回给我们一个错误的IP地址,此时拿这个错误的IP地址去访问的时候就是一个错误的网站

DNS 劫持与 HTTP的关系是怎样的?

这里给出明确的回答, 俩者是没有关系的 ,完全是俩回事

DNS 解析发生在 HTTP 建立连接之前
DNS 解析请求使用 UDP 数据报,端口号 53

怎样解决 DNS 劫持


网络篇面试总结

  • HTTP 中的GET和POST方式有什么区别 ?
  • HTTPS 连接建立流程是怎样的 ?
  • TCP 和 UDP 有什么区别 ?
  • 简述 TCP 的慢开始过程 ?
  • 客户端怎样避免 DNS 劫持 ?

转载请标明出处

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

推荐阅读更多精彩内容