J_Knight_ iOS 高级面试题 网络题解答

网络题

App 网络层有哪些优化策略?
TCP为何要三次握手,四次挥手?
对称加密和非对称加密的区别?分别有哪些算法的实现?
HTTPS的握手流程?为何密钥的传递须要使用非对称加密?双向认证了解么?
HTTPS是如何实现验证身份和验证完整性的?
如何用Charles抓HTTPS的包?其中原理和流程是什么?
什么是中间人攻击?如何避免?
复制代码

App 网络层有哪些优化策略?html

首先咱们了解一下服务器发送一个请求的过程

* 1.DNS Lookup
2.TCP Handshake
3.TLS或SSL Handshake
4.TCP/HTTP Request/Response

网络优化

1.优化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。

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

根据用户是在2G/3G/4G/Wi-Fi的网络环境来设置不一样的超时参数,以及网络服务的并发数量。好比在环境比较差的状况下:
1.将并发数设置为一个改为串行
2.动态设置超时时间
3.throttle 进行节流
AFNetworking中的throttle方法
1- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes                                   delay:(NSTimeInterval)delay;

3.管道化链接

若是服务器不支持管线化的话,那么响应就会乱序。因此服务器要支持。 AFNetworking中经过HTTPShouldUsePipelining属性来设置,默认为NO。
减小数据传输量
选择合适的数据格式进行传输,好比使用Protocol Buffer数等,使用WebP图片格式
提供网络服务重发机制
当第一次网络请求失败的时候,自动尝试再次重发
使用HTTP缓存

4.针对连接创建环节的优化
使用缓存手段减小请求的发起次数
使用策略来减小请求的发起次数

更多优化请看下面这个内容

[百度App网络深度优化系列《二》链接优化](http://baijiahao.baidu.com/s?id=1625511944699576834)

[百度App网络深度优化系列《一》DNS优化](http://baijiahao.baidu.com/s?id=1621552582705610161)
1.https://chromium.googlesource.com/chromium/src/+/HEAD/docs/android_build_instructions.md
2.https://chromium.googlesource.com/chromium/src/+/HEAD/docs/ios/build_instructions.md
3.https://github.com/Tencent/mars
4.https://tools.ietf.org/html/rfc7858
5.https://tools.ietf.org/html/rfc6555
6.https://tools.ietf.org/html/rfc8305
复制代码

TCP为何要三次握手,四次挥手?android

TCP是主机对主机层的传输控制协议,提供可靠的链接服务,采用三次握手确认创建一个链接:
 
 SYN表示创建链接,
 
 FIN表示关闭链接,
 
 ACK表示响应

1, 第一次:首先A发送一个(SYN)到B,意思是A要和B创建链接进行通讯;

若是是只有一次握手的话,这样确定是不行的,A压根都不知道B是否是收到了这个请求。 

2, 第二次:B收到A要创建链接的请求以后,发送一个确认(SYN+ACK)给A,意思是收到A的消息了,B这里也是通的,表示能够创建链接;
若是只有两次通讯的话,这时候B不肯定A是否收到了确认消息,有可能这个确认消息因为某些缘由丢了。 

3, 第三次:A若是收到了B的确认消息以后,再发出一个确认(ACK)消息,意思是告诉B,这边是通的,而后A和B就能够创建链接相互通讯了;
必定要进行三次握手么,不能只进行两次或者四次??

其实这个问题的本质是因特网中信道不可靠, 可是要在这个不可靠的信道上可靠地传输数据,三次握手是最小的理论值。

  若是只进行两次握手,那么当客户端发送一个SYN分组后,会发生两种状况:
  状况一:服务器接收到了这个SYN并返回ACK,不管客户端是否接收到了ACK,服务器都认为已经与客户端创建链接了,因而就开始向客户端发送数据。可是若是客户段没有收到ACK,那么客户端会认为与服务器没有创建链接,就不会接收服务器发来的数据,也就是说直接丢弃服务器发来的数据,服务器发出的消息超时了,就重复发送数据,这就产生了死锁。
  状况二:客户端发出的第一个链接请求报文段并无丢失,而是在某个网络结点长时间的滞留了,以至延误到链接释放之后的某个时间才到达服务器。原本这是一个早已失效的报文段。但服务器收到此失效的链接请求报文段后,就误认为是客户端再次发出的一个新的链接请求。因而就向客户端发送ACK,可是此时客户端没有发出请求,因此并不会理睬这个ACK,而服务器又开始发数据给客户端了,这时候,客户端又把这些数据都丢弃了,而服务器发出的消息超时了,就重复发送数据,也产生了死锁。


TCP四次挥手
第一次分手:主机1(可使客户端,也能够是服务器端),设置Sequence Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;

第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“赞成”你的关闭请求;

第三次分手:主机2向主机1发送FIN报文段,请求关闭链接,同时主机2进入LAST_ACK状态;

第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,而后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段之后,就关闭链接;此时,主机1等待2MSL后依然没有收到回复,则证实Server端已正常关闭,那好,主机1也能够关闭链接了。

问题1:为何要四次分手?

TCP协议是一种面向链接的、可靠的、基于字节流的运输层通讯协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经所有发送完毕了;可是,这个时候主机1仍是能够接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,可是主机2仍是能够发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,以后彼此就会愉快的中断此次TCP链接。
复制代码

对称加密和非对称加密的区别?分别有哪些算法的实现?ios

什么是对称加密技术?
对称加密采用了对称密码编码技术,它的特色是文件加密和解密使用相同的密钥加密
也就是密钥也能够用做解密密钥,这种方法在密码学中叫作对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另外一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,并且对计算机功能要求也没有那么高
对称加密算法在电子商务交易过程当中存在几个问题:
  一、要求提供一条安全的渠道使通信双方在首次通信时协商一个共同的密钥。直接的面对面协商多是不现实并且难于实施的,因此双方可能须要借助于邮件和电话等其它相对不够安全的手段来进行协商;
  二、密钥的数目难于管理。由于对于每个合做者都须要使用不一样的密钥,很难适应开放社会中大量的信息交流;
  三、对称加密算法通常不能提供信息完整性的鉴别。它没法验证发送者和接受者的身份;
  四、对称密钥的管理和分发工做是一件具备潜在危险的和烦琐的过程。对称加密是基于共同保守秘密来实现的,采用对称加密技术的贸易双方必须保证采用的是相同的密钥,保证彼此密钥的交换是安全可靠的,同时还要设定防止密钥泄密和更改密钥的程序。
  假设两个用户须要使用对称加密方法加密而后交换数据,则用户最少须要2个密钥并交换使用,若是企业内用户有n个,则整个企业共须要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦。
常见的对称加密算法有DES、3DES、Blowfish、IDEA、RC四、RC五、RC6和AES 

什么是非对称加密技术?
与对称加密算法不一样,非对称加密算法须要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
公开密钥与私有密钥是一对,若是用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;若是用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。由于加密和解密使用的是两个不一样的密钥,因此这种算法叫做非对称加密算法。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把做为公用密钥向其它方公开;获得该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用本身保存的另外一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。
 非对称加密的典型应用是数字签名。
   常见的非对称加密算法有:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)
Hash算法(摘要算法)
Hash算法特别的地方在于它是一种单向算法,用户能够经过hash算法对目标信息生成一段特定长度的惟一hash值,却不能经过这个hash值从新得到目标信息。所以Hash算法经常使用在不可还原的密码存储、信息完整性校验等。
常见的Hash算法有MD二、MD四、MD五、HAVAL、SHA
复制代码

HTTPS的握手流程?为何密钥的传递须要使用非对称加密 HTTPS是如何实现验证身份和验证完整性的?git

https://blog.csdn.net/clh604/article/details/22179907 。 
https原理:证书传递、验证和数据加密、解密过程解析

https://blog.csdn.net/zhongzh86/article/details/69389967   深度解析HTTPS原理

http://liuduo.me/2018/05/14/https-detail/   HTTPS 原理详解

https://yq.aliyun.com/articles/625289 HTTPS原理和CA证书申请(满满的干货
复制代码

如何用Charles抓HTTPS的包?其中原理和流程是什么?github

https://www.jianshu.com/p/870451cb4eb0
复制代码

什么是中间人攻击?如何避免?算法

https://www.jianshu.com/p/210c296eb836
https://www.zhihu.com/question/20744215
https://www.cnblogs.com/LittleHann/p/3735602.html
http://netsecurity.51cto.com/art/201712/559836.htm
复制代码
相关文章
相关标签/搜索