1.3、iOS面试题之网络
1.HTTP和HTTPS区别?
https://www.jianshu.com/p/d7e60d5aaf06
1、https协议需要到ca申请证书,一般免费证书很少,需要交费。
2、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的。
5、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比http协议安全。
2.HTTPS的加密方式有哪几种?如何签名的?
1.浏览器将自己支持的一套加密规则发送给网站。
2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3.获得网站证书之后浏览器要做以下工作:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
4.网站接收浏览器发来的数据之后要做以下的操作:
a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
b) 使用密码加密一段握手消息,发送给浏览器。
5.浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
3.HTTP的缺点有哪些?
无法保证消息的保密性
无法保证消息的完整性和准确性
无法保证消息来源的可靠性
4.TCP和UDP区别?
https://www.cnblogs.com/williamjie/p/9390164.html
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
5.如何优化TCP连接?
6.APP中网络响应慢从哪几个方面优化?
http://www.apkbus.com/blog-903469-63640.html
访问网络之前,先检测网络是否可用
优化下载机制:预先获取需要的数据,尽可能把需要的数据绑定传输给APP端,重用网络连接
优化数据更新请求: 没有网络的时候,停止后台的更新请求。当电量低的时候,减少更新频率。用推送代替轮询,来查询服务器是否有新数据。
优化冗余的下载:缓存经常使用的数据,前提是必须保证这个数据是最新的。用增量升级代替全量升级。尽量做到API只传输需要的数据。最常见的例子就是,列表和详情,列表API应该仅仅包括当前显示要的数据,详情API应该是另外一个包含更多信息的。不合理的设计中,列表API会包含详情API。
根据网络连接类型来修改相应的下载策略: 在网络最好的情况下载最大的数据
使用网络缓存: 对服务端返回数据进行缓存,设定有效时间,有效时间之内不走网络请求,减少流量消耗
断点下载和上传
重构数据传输:可以通过把请求数据zip压缩的方式传输。使用Protocol Buffers or FlatBuffers 替代json, xml,因为前两者更加简洁,轻量级。
大文件上传,包括图片,视频等:避免整文件传输,采用分片传输;根据网络类型以及传输过程中的变化动态的修改分片大小;每个分片失败重传的机会。
7.socket属于哪个层?原理是什么?
socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
8.网络相关的:项目里面使用到什么网络库,用过ASIHTTP库吗
基于cfnetwork 停止更新 上传下载方便
9.断点续传怎么实现?需要设置什么?
https://www.cnblogs.com/tzh521241/p/6213248.html
断点续传主要依赖于HTTP头部定义的Range,应用可以通过HTTP请求曾经获取失败的资源的某一个返回或者部分来恢复下载该资源。当然并不是所有风服务器都支持Range,所以不支持Range的不在我们考虑之内。Range是以字节计算的,请求的时候不比给我结尾字节数,因为请求方并不一定知道资源的大小。
通过这个关键字可以告诉服务器返回哪些数据给我。
比如:
bytes=500-999 表示第500-第999字节
bytes=500- 表示从第500字节往后的所有字节
然后我们再根据服务器返回的数据,将得到的data数据拼接到文件后面,就可以实现断点续传了
10.在杭州HTTP请求服务器响应快,可能离服务器距离近,而在深圳访问就很慢很慢,会是什么原因?如果用户投诉,怎么分析这个问题?
11.HTTP请求的哪些方法用过?什么时候选择get、post、put?
12.TCP建立连接的过程,断开连接的过程,为什么是四次握手?
13.Ping是什么协议
使用的是ICMP协议,是“Internet Control Message Protocol”(Internet控制消息协议)的缩写,是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。
14.知道MTU吗
https://blog.csdn.net/passionkk/article/details/100538418
最大传输单元。 64-1500