美文网首页Android开发探索
Android基础(18)网络

Android基础(18)网络

作者: perry_Fan | 来源:发表于2019-02-23 22:27 被阅读26次

    1)描述一次网络请求的流程
    2)HttpUrlConnection 和 okHttp 关系 (4.4 以后 HttpUrlConnection内部采用 okHttp)
    3)Android代码中实现WAP方式联网
    https://blog.csdn.net/asce1885/article/details/7844159

    4)服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达? LinkedHashMap?
    5)网络框架对比和源码分析。
    6)Https请求慢的解决办法
    现在下载速度很慢,试从网络协议的角度分析原因,并优化(提示:网络的5层都可以涉及)。
    7)自己去设计网络请求框架,怎么做?
    8)okHttp源码。网络请求缓存处理,okHttp如何处理网络缓存的。CacheInterceptor

    一. 一次网络请求的过程

    我们来表述一个浏览器发出HTTP请求的过程:
    首先,我们在浏览器输入了URL(例 :www.baidu.com),按下回车,开始我们的HTTP请求

    1. 通过URL找IP

    首先我们的浏览器是不认识baidu.com这个域名的,(注意:是baidu.com,不是www.baidu.com。 因为www是服务器的名字,而baidu.com是域名,相当于这个服务器的地址,com是公司的意义,baidu是公司名,www是公司的一个服务器名称),要将这个服务器的IP地址找到。

    如何去找IP地址呢,首先先是本地的缓存,一般是以Hosts文件的形式存在,维持着一个带域名的服务器地址对IP的对应关系,路由器缓存(也算是DNS服务器缓存)

    如果没有结果,则会向上层DNS服务器询问,上层DNS服务器的本地缓存中如果没有该记录,则再向上层询问,一直到DNS根服务器。

    在根域名服务器中虽然没有每个域名的具体信息,但储存了负责每个域(如COM、NET、ORG等)的解析的域名服务器的地址信息。根域名服务器会将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器,这样你的域名查询请求会进入到相应的顶级域名服务器。顶级域名服务器收到请求后查看区域文件记录,若找到则将其管辖范围内主域名(不带任何前缀的域名,如 baidu.com)服务器的IP地址告诉本地DNS服务器。如果还是没有找到,则进入到下一级域名服务器进行查找。如此重复,直到找到正确的结果为止,返回 IP地址结果给本地DNS服务器。

    本地DNS服务器缓存结果,设置(Time-To-Live)即一条域名解析记录在DNS服务器上缓存时间,关于TTL如果IP经常改变,那么TTL设的短一点长一点都没有太大的 影响,而如果IP经常不变,可以把TTL时间拉长,这样有利于提高命中率。

    2.对IP结果建立TCP连接

    自己主机IP端口的对目标IP的端口(例:http://www.baidu.com http协议所占用的TCP端口为80端口)三次握手建立TCP连接。

    3.向服务器发送数据

    浏览器将网络请求封装成HTTP报文,把HTTP报文通过TCP的分包,分成一个个TCP数据包。
    IP层把上层传输层数据包打包成IP层数据包,并把该数据包发送到更低层数据链路层,相反,IP层也把从低层接收来的数据包传送到更高层TCP或UDP层。(补:IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是否按顺序发送的或者有没有被破坏,IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址))

    通过这套封装包过程,发送到服务器端,服务器端则是一个拆包的过程,IP层是不可靠的,所以没有确认的机制,而在上层的TCP层则会对数据包的可靠性进行验证,丢失则会重传数据。保证传输的可靠性。服务器最终解包会拼接成一个完整的HTTP报文,完成整个数据的发送。

    4.服务器解析,并返回

    对HTTP报文进行解析,根据HTTP报文决定它请求了什么。将处理的结果组装成响应报文(如www.baidu.com , 请求报文为GET,要获取的是缺省值默认的index.html这个主页,则返回网页的源码,将网页源码添加到响应报文正文中),其中比较关键的是状态码(200OK表示成功没毛病),然后将响应报文,通过之前的过程返还给咱们的主机IP。

    五. 网络框架对比
    六. Https请求慢的解决办法

    DNS,携带数据,直接访问IP

    七. Https 和http的区别?

    https 用的是443端口,http用的是80端口
    https 需要用到ca申请证书,需要付费
    http信息的明文传输,https是具有安全性的ssl加密传输协议
    http和https使用的是完全不同的连接方式,用的端口也不一样
    http的连接很简单,是无状态的。https协议是由SSL+HTTP协议构件的可进行加密传输、身份认证的网络协议,比http协议安全。
    SSL使用40位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。

    2)SSL协议提供的服务主要有哪些?
    认证用户和服务器,确保数据发送到正确的客户机和服务器。
    加密数据以防止数据中途被窃取。
    维护数据的完整性,确保数据在传输过程中不被改变。
    3)信任主机的问题
    该证书只用于对应的服务器的时候,客户端才信任此主机。
    客户通过信任该证书,从而信任了该主机
    4)证书种类
    CFCA 、GlobalSign、VeriSign 、 Geotrust、Thawte
    OVSSL 企业型 DVSSL域名型 EVSSL 增强型

    相关文章

      网友评论

        本文标题:Android基础(18)网络

        本文链接:https://www.haomeiwen.com/subject/tgsmeqtx.html