您好!欢迎光临这里是您的网站名称,我们竭诚为您服务!
定制咨询热线032-44487303
您的位置:主页 > 工程案例 > 案例展示二 >
联系我们

ror体育岗亭有限公司

邮 箱:admin@sh-mf.com
手 机:17034881984
电 话:032-44487303
地 址:福建省南平市镇巴县事蒂大楼534号

安卓:想进大厂把基础打牢了再说!网络知识十二问你都答得出来吗

发布时间:2021-11-20 12:39:01人气:
本文摘要:前言过年倒计时~今天扥想的是网络相关知识,网络知识也是面试常考内容,所以必须要把基础打牢。网络十二问,送给大家。这些问题,你能答上来吗我总结了下网络方面会涉及到的一些问题,大家看看,如果都能答上来,那这篇文章就可以略过了。 网络通信的历程,以及中间用了什么协议?TCP毗连历程,三次握手和四次挥手,为什么?常用的状态码。

ror体育

前言过年倒计时~今天扥想的是网络相关知识,网络知识也是面试常考内容,所以必须要把基础打牢。网络十二问,送给大家。这些问题,你能答上来吗我总结了下网络方面会涉及到的一些问题,大家看看,如果都能答上来,那这篇文章就可以略过了。

网络通信的历程,以及中间用了什么协议?TCP毗连历程,三次握手和四次挥手,为什么?常用的状态码。讲一下TCP协议和UDP协议的区别和场景socket和WebSocketHttps的链接建设历程解说一下数字签名,为什么真实可靠证书链宁静机制建设历程耗时,那么怎么优化呢?讲一下Http和Https的区别Http传输图片有哪些方式怎么实现分块传输,断点续传?1.网络通信的历程,以及中间用了什么协议简朴总结下:客户端:1、在浏览器输入网址2、浏览器剖析网址,并生成http请求消息3、浏览器挪用系统剖析器,发送消息到DNS服务器查询域名对应的ip4、拿到ip后,和请求消息一起交给操作系统协议栈的TCP模块5、将数据分成一个个数据包,并加上TCP报头形成TCP数据包6、TCP报头包罗发送方端口号、吸收方端口号、数据包的序号、ACK号。7、然后将TCP消息交给IP模块。

8、IP模块会添加IP头部和MAC头部。9、IP头部包罗IP地址,为IP模块使用,MAC头部包罗MAC地址,为数据链路层使用。

10、IP模块会把整个消息包交给网络硬件,也就是数据链路层,好比以太网,WIFI等11、然后网卡会将这些包转换成电信号或者在光信号,通过网线或者光纤发送出去,再由路由器等转发设备送达吸收方。服务器端:1、数据包到达服务器的数据链路层,好比以太网,然后会将其转换为数据包(数字信号)交给IP模块。2、IP模块会将MAC头部和IP头部后面的内容,也就是TCP数据包发送给TCP模块。

3、TCP模块会剖析TCP头信息,然后和客户端相同表现收到这个数据包了。4、TCP模块在收到消息的所有数据包之后,就会封装好消息,生成相应报文发给应用层,也就是HTTP层。

5、HTTP层收到消息,好比是HTML数据,就会剖析这个HTML数据,最终绘制到浏览器页面上。2.TCP毗连历程,三次握手和四次挥手,为什么?毗连阶段(三次握手):建立套接字Socket,服务器会在启动的时候就建立好,客户端是在需要会见服务器的时候建立套接字然后提倡毗连操作,其实就是Socket的connect方法这时候客户端会生成一个TCP数据包。这个数据包的TCP头部有三个重要信息:SYN、SEQ、ACK。

SYN,同步序列编号,是TCP/IP建设毗连时使用的握手信号,如果这个值为1就代表是毗连消息。SEQ,数据包序号,是发送数据的一个顺序编号。ACK,确认号,是吸收数据的一个顺序编号。所以客户端就生成了这样一个数据包,其中头部信息的SYN设置为1,代表毗连。

SEQ设置一个随机数,代表初始序号,好比100。ACK没有设置,因为是第一次发送数据,不需要ACK。然后服务器端收到这个消息,知道了客户端是要来毗连的(SYN=1),知道了传输数据的初始序号(SEQ=100)。服务器端也要生成一个数据包发送给客户端,这个数据包的TCP头部会包罗三个值:表现我也要毗连你的SYN(SYN=1),我已经收到了你的上个数据包简直认号ACK(ACK=SEQ+1=101),以及服务器端随机生成的一个序号SEQ(好比SEQ=200)。

最后客户端收到这个消息后,表现客户端到服务器的毗连是无误了,然后再发送一个数据包表现也确认收到了服务器发来的数据包,这个数据包的头部就主要就是一个ACK值(ACK=SEQ+1=201)。至此,毗连乐成,三次握手竣事,后面数据就会正常传输,而且每次都要带上TCP头部中的SEQ和ACK值。

这里有个问题是关于为什么需要三次握手?最主要的原因就是需要通信双方都确认自己的消息被准确转达已往了。A发送消息给B,B回一条消息表现我收到了,这个历程就保证了A的通信能力。B发送消息给A,A回一条消息表现我收到了,这个历程就保证了B的通信能力。也就是四条消息能保证双方的消息发送都是正常的,其中B回消息和B发消息,可以融合为一次消息,所以就有了三次握手。

数据传输阶段:数据传输阶段有个改变就是ACK确认号不再是SEQ+1了,而是SEQ+数据长度。例如:A发送给B的数据包(SEQ=100,长度=1000字节)B回给A的数据包(ACK=100+1000=1100)这就是一次数据传输的头部信息,ACK代表下个数据包应该从哪个字节开始所以即是上个数据包的SEQ+长度,SEQ就即是上个数据包的ACK。固然,TCP通信是双向的,所以实际数据每个消息都市有SEQ和ACK:A发送给B的数据包(ACK=200,SEQ=100,长度=1000字节)B回给A的数据包(ACK=100+1000=1100,SEQ=上一个数据包的ACK=200,长度=500字节)A发送给B数据包(SEQ=1100,ACK=200+500=700)断开阶段(四次挥手):和毗连阶段一样,TCP头部也有一个专门用作关闭毗连的值叫做FIN。客户端准备关闭毗连,会发送一个TCP数据包,头部信息中包罗(FIN=1代表要断开毗连)。

服务器端收到消息,回复一个数据包给客户端,头部信息中包罗ACK确认号。可是此时服务器端的正常业务可能没有完成,还要处置惩罚下数据,收个尾。客户端收到消息。服务器继续处置惩罚数据。

服务器处置惩罚数据完毕,准备关闭毗连,会发送一个TCP数据包给客户端,头部信息中包罗(FIN=1代表要断开毗连)客户端端收到消息,回复一个数据包给服务器端,头部信息中包罗ACK确认号。服务器收到消息,到此服务器端完成毗连关闭事情。客户端经由一段时间(2MSL),自动进入关闭状态,到此客户端完成毗连关闭事情。

MSL 是 Maximum Segment Lifetime,报文最大生存时间,它是任何报文在网络上存在的最长时间,凌驾这个时间报文将被抛弃。这里有个问题是关于为什么需要四次挥手?A发送断开消息给B,B回一条消息表现我收到了,这个历程就保证了A断开乐成。B发送断开消息给A,A回一条消息表现我收到了,这个历程就保证了B断开乐成。

其实和毗连阶段的区别就在于,这里的B简直认消息和断开消息不能融合。因为A要断开的时候,B可能另有数据要处置惩罚要发送,所以要等正常业务处置惩罚完,在发送断开消息。

3.常用的状态码1XX - 暂时消息。服务器收到请求,需要请求者继续操作。

2XX - 请求乐成。请求乐成收到,明白并处置惩罚。3XX - 重定向。

需要进一步的操作以完成请求。4XX - 客户端错误。

请求包罗语法错误或无法完成请求。5XX - 服务器错误。服务器在处置惩罚请求的历程中发生了错误。

常见状态码:200 OK - 客户端请求乐成301 - 资源(网页等)被永久转移到其它URL302 - 暂时跳转400 Bad Request - 客户端请求有语法错误,不能被服务器所明白404 - 请求资源不存在,错误的URL。500 - 服务器内部发生了不行预期的错误。503 Server Unavailable - 服务器当前不能处置惩罚客户端的请求,一段时间后可能恢复正常。

4.讲一下TCP协议和UDP协议的区别和场景我先说两个场景,大家可能就比力能明白了。1) 第一个场景,浏览网页。(TCP场景)我们会见网页,网页肯定要把所有数据都正确的显示出来吧,如果这个历程中丢包了,那么肯定也会重新传包,不行能只显示一部门网页(保证数据正确性)同样,网页中的内容肯定也需要是顺序的。

好比我一个抽奖,不行能还没抽就把奖给你了。(保证数据的顺序)再来,在这个对数据要求严格的历程中,我们肯定需要两方建设起一个可靠的毗连,也就是我们上述说到的要经由三次握手才开始传输数据,而且每次发数据包都需要回执(面向毗连的)而这种毗连中传输数据就是用的字节省,也就是有根管道,你想怎么传数据都行,想怎么接受数据也都可以,只要在这一根管道内里。所以这种需要数据准确、顺序不能错、要求稳定可靠的场景就需要用到TCP。2)第二个场景,打游戏。

(UDP场景)打游戏最最重要的就是即时,否则我这个技术发出去了你那里还没被打中,这就玩不了了。所以UDP是需要保证数据的即时性,而不保证每个数据包都正确吸收到,纵然丢包了,也不会去找丢的谁人是什么包,因为要显示当前时间的当前数据包。(不保证数据正确性和数据顺序,可能会丢包)同样,为了数据的即时性,UDP也就不会去建设毗连了,不需要什么三次握手,每次你还要确认收没收到。

ror体育

管你收没收到,我只要快速把每个数据包丢给你就行了。(面向无毗连的)因为是无毗连的,所以就不需要用到字节省,直接每次丢一个数据报给你,吸收方也只能接受一个数据报(不能和其他发送方的数据报混淆)。(基于数据报的)如果你还是有点晕,可以看看这篇文章(亚当和夏娃),很形象的比喻:https://www.zhihu.com/question/51388497?sort=created5.socket和WebSocket虽然这两个货名字类似,但其实不是一个层级的观点。

socket,套接字。上文说过了,在TCP建设毗连的历程中,是挪用了Socket的相关API,建设了这个毗连通道。所以它只是一个接口,一个类。

WebSocket,是和HTTP同品级,属于应用层协议。它是为相识决长时间通信的问题,由HTML5规范引出,是一种建设在TCP协议基础上的全双工通信的协议,同样下层也需要TCP建设毗连,所以也需要socket。

科普:WebSocket在TCP毗连建设后,还要通过Http举行一次握手,也就是通过Http发送一条GET请求消息给服务器,告诉服务器我要建设WebSocket毗连了,你准备好哦,详细做法就是在头部信息中添加相关参数。然后服务器响应我知道了,而且将毗连协议改成WebSocket,开始建设长毗连。

如果硬要说这两者有关系,那就是WebSocket协议也用到了TCP毗连,而TCP毗连用到了Socket的API。6.Https的毗连建设历程说完了HTTP和TCP/IP,再说说HTTPS。其中主要就是用到了数字证书。

现在完整看看Https毗连建设(也叫TLS握手流程):1、客户端发送 Client Hello 数据包消息。这个消息内容包罗一个随机数(randomC),加密族(密钥交流算法也就是非对称加密算法、对称加密算法、哈希算法),Session ID(用作恢复回话)。

客户端要建设通信,在TCP握手之后,会发送第一个消息,也叫Client Hello消息。这个消息主要发了以上的一些内容,其中密文族就是把客户端这边支持的一些算法发给服务器,然后服务器拿来和服务器支持的算法一比力,就能得出双方都支持的最优算法了。2、服务器回复三个数据包消息:Server Hello,Certificate,Server Hello Done。

Server Hello消息内容包罗一个随机数(randomS),比力后得出的加密族,Session ID(用作恢复回话)。到现在,双方已经有两个随机数了,待会再看看这两个随机数是干嘛的。然后加密算法适才说过了,服务器协商出了三种算法并发回给客户端。

Certificate消息就是发送数字证书了。这里就不细说了。

Server Hello Done消息就是个竣事标志,表现已经把该发的消息都发给你了。3、对称密钥生成历程1)首先,客户端会对发来的证书举行验证,好比数字签名、证书链、证书有效期、证书状态。2)证书校验完毕后,然后客户端会用证书里的服务器公钥加密发送一个随机数 pre—master secret ,服务器收到之后用自己的私钥解密。

3)到此,客户端和服务器就都有三个随机数了:randomC、randomS、pre—master secret。4)然后客户端和服务器端划分根据牢固的算法,用三个随机数生成对称密钥。

4、生成Session ID这一步和开始两个hello消息中的Session ID对应起来了。会生成会话的id,如果后续会话断开了,那么通过这个Session ID就可以恢复对话,不需要重新举行发送证书、生成密钥历程了。5、用对称密钥传输数据拿到对称密钥后,双方就可以使用对称密钥加密解密数据,举行正常通信了。扩展:为什么要使用非对称加密算法协商出对称加密这种方法?首先,网络传输数据对传输的速度要求比力高,在保证宁静的前提下,所以接纳了对称加密的方法,而不用耗时较多的非对称加密算法。

其次,在确定对称加密传输数据的前提下,如果传输对称加密的密钥是个涉及到宁静的问题,所以就接纳了宁静性更高的非对称加密算法,加上证书链机制,保证了传输对称密钥相关数据的宁静性。7.请给我解说一下数字签名,为什么真实可靠数字签名,也就是上文中说的电子签名,再简朴回首下:数字签名,其实也是一种非对称加密的用法。它的使用方法是:A使用私钥对数据的哈希值举行加密,这个加密后的密文就叫做签名,然后将这个密文和数据自己传输给B。

B拿到后,签名用公钥解密出来,然后和传过来数据的哈希值做比力,如果一样,就说明这个签名确实是A签的,而且只有A才可以签,因为只有A有私钥。反映实际情况就是:服务器端将数据,也就是我们要传的数据(公钥),用另外的私钥签名数据的哈希值,然后和数据(公钥)一起传已往。然后客户端用另外的公钥对签名解密,如果解密数据和数据(公钥)的哈希值一致,就能证明泉源正确,不是被伪造的。

泉源可靠。数字签名只能拥有私钥的一刚刚能签名,所以它的存在就保证了这个数据的泉源是正确的数据可靠。hash值是牢固的,如果签名解密的数据和自己的数据哈希值一致,说明数据是未被修改的。

8.证书链宁静机制证书发表机构(CA, Certificate Authority)即发表数字证书的机构。是卖力发放和治理数字证书的权威机构,并作为电子商务生意业务中受信任的第三方,负担公钥体系中公钥的正当性磨练的责任。实际情况中,服务器会拿自己的公钥以及服务器的一些信息传给CA,然后CA会返回给服务器一个数字证书,这个证书内里包罗:服务器的公钥签名算法服务器的信息,包罗主机名等。

CA自己的私钥对这个证书的签名然后服务器将这个证书在毗连阶段传给客户端,客户端怎么验证呢?细心的小同伴肯定知道,每个客户端,不管是电脑、手机都有自带的系统根证书,其中就会包罗服务器数字证书的签发机构。所以系统的根证书会用他们的公钥帮我们对数字证书的签名举行解密,然后和证书内里的数据哈希值举行对比,如果一样,则代表泉源是正确的,数据是没有被修改的。固然中间人也是可以通过CA申请证书的,可是证书中会有服务器的主机名,这个主机名(域名、IP)就可以验证你的泉源是泉源自哪个主机。扩展一下:其实在服务器证书和根证书中间另有一层结构:叫中级证书,我们可以任意点开一个网页,点击左上角的按钮就可以看到证书详情:可以看到一般完整的SSL/TLS证书有三层结构:第一层:根证书。

也就是客户端自带的那些,根证书都是自签名,即用自己的公钥和私钥完成了签名的制作和验证。第二层:中级证书。一般根证书是不会直接发表服务器证书的,因为这种行为比力危险,如果发现错误发表就很贫苦,需要涉及到跟证书的修改。

所以一般会引用中间证书,根证书对中间证书举行签名,然后中间证书再对服务器证书举行签名,一层套一层。第三层:服务器证书。也就是跟我们服务器相关的这个证书了。

9.建设历程耗时,那么怎么优化呢?1、升级HTTP2.0HTTP 2.0在2013年8月举行首次互助共事性测试。在开放互联网上HTTP 2.0将只用于https://网址,而 http://网址将继续使用HTTP/1,目的是在开放互联网上增加使用加密技术,以提供强有力的掩护去停止主动攻击HTTP2主要有以下特性:二进制分帧。数据使用二进制传输,相比于文本传输,更利于剖析和优化。

多路复用。同域名下所有通信都在单个毗连上完成,单个毗连也可以承载任意数量的双向数据流。

头部优化。HTTP/2对消息头接纳HPACK(专为http/2头部设计的压缩花样)举行压缩传输,能够节约消息头占用的网络的流量。

2、使用SessionID这一点适才已经说过了,为了在断开重连后,重复毗连历程,所以使用SessionID记载会话id,然后就可以重新复用定位到哪个会话了。从而减去了重复发送证书、生成密钥历程。3、TLS False Start这是Google提出来的优化方案,详细做法是:在TLS握手协商的第二个阶段,也就是客户端在验证证书,发送了pre—master secret之后,就直接把应用数据带上,好比请求网页数据。

然后服务器端收到pre—master secret后,生成对称密钥,然后直接用对称密钥解密这个应用数据,并响应消息给客户端。其实就是把两个步骤混淆为一个步骤了,客户端不需要等候服务器确认,再发送应用数据,而是直接在第二阶段就和pre—master secret一起发送给服务器端,淘汰了握手历程,从而淘汰了耗时。4、OCSP StaplingOCSP是一种验证检查证书吊销状态(正当性)的在线查询服务。验证证书的历程中有一步是验证证书的正当性,我们可以让服务器先通过OCSP查询证书是否正当,然后把这个效果和证书一起发送给客户端,客户端就不需要单独验证证书的正当性了,从而提高了TLS握手效率。

这个功效就叫做OCSP Stapling。扩展:如果不思量建设历程,从整个Https传输历程思量,又有哪些优化的点呢?可以看看这篇文章先容:https://www.cnblogs.com/evan-blog/p/9898046.html10.讲一下HTTP和HTTPS的区别经由上面大篇幅的解说,对于两者的区别应该很明晰了:HTTP是超文本传输协议,信息是明文传输,HTTPS则是在HTTP层下加了一层具有宁静性的SSL/TLS加密传输协议,要用到CA证书。

HTTP是没有身份认证的,客户端无法知道对方的真实身份。HTTPS加入了CA证书,可以确认对方信息。

HTTP默认端口为80,HTTPS为443。HTTP因为明文传输,容易被攻击或者流量挟制。11.怎么实现分块传输,断点续传?分块传输正常情况下,一次数据发完之后,服务器就会断开链接。

ror体育

所以一般要在请求头中设置Connection字段的值为:keep-alive,表现维持毗连不要断开,一直到某个数据包的Connection字段的值为close。另外另有一种措施可以维持TCP毗连,就是将请求数据举行分块传输。

分块传输指的是服务器发给客户端的数据可以分成多个部门传输。使用方法:消息头部设置Transfer-Encoding: chunked每一块会讲明长度由一个标明长度为0的chunk标示竣事目的:让客户端快速响应,淘汰等候时间。维持长毗连。

可是、可是、这个分块传输只在HTTP1.1才有。HTTP2.0支持了多路复用,单个毗连可以承载任意数量的双向数据流,也就是可以任意在一个毗连在举行双向传输,不需要分块传输这个功效了。断点续传指的是客户端想从文件上次中断的地方开始下载或者上传,这样就算遇到网络问题导致下载或上传中断也没事了,保证好的用户体验。

使用方法:客户端请求报文头部信息中加上Range字段,表现要从哪个字节开始下载,到哪个字节竣事(Range: bytes=0-499)服务器端响应报文头部信息中加上Content-Range,表现当前发送的数据的规模,以及文件总巨细(Content-Range: bytes 0-499/22400)。ETag字段表现文件的唯一性。实际使用流程:第一次客户端请求下载,服务器端会返回文件内容,和Etag标示,状态码为200。

第二次客户端请求断点续传,会发送两个头部信息(Range:bytes=200-499,If-Range:Etag)。然后服务器会判断Etag是否匹配,如果匹配则返回这一部门数据(Content-Range: bytes 200-499/22400),状态码为206,表现这是你请求的部门数据。否则会返回文件全部数据,状态码为200。

12.Http传输图片有哪些方式其实这种问题问的是对于Content-Type的认识,一共三种方法:multipart/form-data表单类型传输文件请求。通过设置content-type为multipart/form-data,来发送二进制花样文件。支持多个文件上传,还可以带上文本参数。

这种是最常见的做法。image/png,image/jpeg这种方法就是直接将图片转为二进制流传输,服务器端也是直接读取流中的数据转成图片即可。

可是这种方法有个缺点就是一次只能传一张图片。application/x-www-form-urlencoded,text/plain另有个措施就是将图片转成Base64花样字符串,然后举行传输,和普通的文本参数一样,设置application/x-www-form-urlencoded或者text/plain等Content-Type即可。面试温习门路多余的话就不讲了,接下来将分享面试的一个温习门路,如果你也在准备面试可是不知道怎么高效温习,可以参考一下我的温习门路,有任何问题也接待一起相互交流,加油吧!这里给大家提供一个偏向,举行体系化的学习:1、看视频举行系统学习前几年的Crud履历,让我明确自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比力零星,也不够深入不够系统,所以重新举行学习是很有须要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。

关于视频学习,小我私家可以推荐去B站举行学习,B站上有许多学习视频,唯一的缺点就是免费的容易过时。另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。2、举行系统梳理知识,提升储蓄客户端开发的知识点就那么多,面试问来问去还是那么点工具。

所以面试没有其他的诀窍,只看你对这些知识点准备的充实水平。so,出去面试时先看看自己温习到了哪个阶段就好。

系统学习偏向:架构师筑基必备技术:深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态署理+高效IOAndroid高级UI与FrameWork源码:高级UI提升+Framework内核剖析+Android组件内核+数据持久化360°全方面性能调优:设计思想与代码质量优化+法式性能优化+开发效率优化解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络会见框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件JetpackNDK模块开发:NDK基础知识体系+底层图片处置惩罚+音视频开发微信小法式:小法式先容+UI开发+API操作+微信对接Hybrid 开发与Flutter:Html5项目实战+Flutter进阶知识梳理完之后,就需要举行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和条记,这些条记将各个知识点举行了完美的总结。3、读源码,看实战条记,学习大神思路“编程语言是法式员的表达的方式,而架构是法式员对世界的认知”。

所以,法式员要想快速认知并学习架构,读源码是必不行少的。阅读源码,是解决问题 + 明白事物,更重要的:看到源码背后的想法;法式员说:读万行源码,行万种实践。主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。4、面试前夕,刷题冲刺面试的前一周时间内,就可以开始刷题冲刺了。

请记着,刷题的时候,技术的优先,算法的看些基本的,好比排序等即可,而智力题,除非是校招,否则一般不怎么会问。关于面试刷题,我小我私家也准备了一套系统的面试题,资助你闻一知十:总结改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不停反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是法式员应该负担的使命。耗时一年多整理的一系列Android学习资源:Android源码剖析、Android第三方库源码条记、Android进阶架构师七大专题学习、历年BAT面试题剖析包、Android大佬学习条记等等,这些内容均免费分享给大家,需要完整版的朋侪,直接转发+点赞+私信回复【资料】一键领取!!!。


本文关键词:安卓,ror体育,想进,大厂,把,基础,打牢,了,再说,前言

本文来源:ror体育-www.sh-mf.com

032-44487303