网络通信相关知识详解(一)

       作为移动端开发,我们常常需要与后台进行网络数据的通信,在我们开发的过程中,常常只是通过一个url+参数,然后就等待网路返回各种类型的数据,那么我们有没有更加深入的了解过网络通信在底层的具体实现呢。

       下面我就帮大家梳理一下网络通信相关的知识点,里面有些不太重要的可能就一笔带过,个人认为比较重要的就会详细的解析相关知识点,由于内容比较多,我把内容分为三篇文章分享出来,希望大家喜欢。


相关知识点汇总:

一、手机与外界通信的手段

二、描述一次网络请求的流程

三、网络七层模型介绍

四、网络相关设备详解(路由器,交换机,网桥,网关)

五、TCP/IP协议族与相关知识(三次握手,四次挥手,流量控制,拥塞控制)

六、cookie,sessionId与token的区别

七、网络数据传输类型的处理(文字,图片,实时音频流,实时视频流,大文件下载)

八、数据指纹,数据签名,数字证书的概念

九、Base64、对称加密算法、非对称加密算法、数据摘要的概念

十、Http与Https知识点详解

十一、基于TCP的Socket与基于UDP的Socket通信

十二、常见网络攻击手段与防护(重放攻击,中间人攻击,流量劫持)

十三、HttpClient,HttpUriConnection与Okhttp的区别

十四、Http 1.0,Http 1.1,Http 2.0,SPDY,Http 3.0的区别

十五、网络请求框架对比:AndroidAsync-httpClient,Volley,Okhttp,Retrofit

十六、Bio,Nio,Aio的区别

十七、网络性能优化

十八、扩展阅读


一、手机与外界通信的手段

1、蓝牙

2、红外线

3、NFC

4、WIFI

5、移动网络(2g,3g,4g,5g)


蓝牙(Bluetooth):是由东芝、爱立信、IBM、Intel和诺基亚于1998年5月共同提出的近距离无线数据通讯技术标准。它能够在10 米的半径范围内实现单点对多点的无线数据和声音传输,其数据传输带宽可达1Mbps。通讯介质为频率在2.402GHz到2.480GHz之间的电磁波。

蓝牙通讯技术的特点:

1、蓝牙工作在全球开放的2.4GHz ISM(即工业、科学、医学)频段。

2、使用跳频频谱扩展技术,把频带分成若干个跳频信道(hop channel),在一次连接中,无线电收发器按一定的码序列不断地从一个信道“跳”到另一个信道。

3、一台蓝牙设备可同时与其它七台蓝牙设备建立连接。

4、数据传输速率可达1Mbit/s。

5、低功耗、通讯安全性好。

6、在有效范围内可越过障碍物进行连接,没有特别的通讯视角和方向要求。

7、支持语音传输。

8、组网简单方便。


红外:红外线IrDA,简称IR,是一种无线通讯方式,可以进行无线数据的传输。自1974年发明以来,得到很普遍的应用,如红外线鼠标,红外线打印机,红外线键盘等等。

       红外线的特征:红外传输是一种点对点的传输方式,无线,不能离的太远,要对准方向,且中间不能有障碍物也就是不能穿墙而过,几乎无法控制信息传输的进度;IrDA已经是一套标准,IR收/发的组件也是标准化产品。


NFC(Near Field Communication,近场通信):是一种数据传输技术。与Wi-Fi、蓝牙、红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4厘米。但是NFC传输速度要比红外快。目前NFC已经出现了一些应用,例如电子标签识别、刷手机、点对点付款、身份识别、信息记录等。

NFC,蓝牙和红外的区别:

Wi-Fi:是一种可以将个人电脑、手持设备(如pad、手机)等终端以无线方式互相连接的技术,事实上它是一个高频无线电信号。[1] 无线保真是一个无线网络通信技术的品牌,由Wi-Fi联盟所持有。目的是改善基于IEEE 802.11标准的无线网路产品之间的互通性。有人把使用IEEE 802.11系列协议的局域网就称为无线保真。


2G(数字网络):第二代移动通信技术区别于前代,使用了数字传输取代模拟,并提高了电话寻找网络的效率,基站的大量设立缩短了基站的间距,并使单个基站需要承担的覆盖面积缩小,有助于提供更高质量的信号覆盖。因此接收机不用像以前那样设计成大功率的,体积小巧的手机成为主流。这一时期短信功能首先在GSM平台应用,后来扩展到所有手机制式。铃声等付费内容成为新的利润增长点。

       GSM(全球移动通信系统):全世界最流行的移动通信标准制式。由于内部兼容,国际漫游变得更容易。全球2G网络中80%为GSM制式,覆盖212个国家/地区的30亿人口。

3G(高速IP数据网络):第三代移动通信技术的最大特点是在数据传输中使用分组交换(Packet Switching)取代了电路交换(Circult Switching)。几年前,用于在计算机上访问移动互联网的USB加密狗问世。

     电路交换使手机与手机之间进行语音等数据传输;分组交换则将语音等转换为数字格式,通过互联网进行包括语音、视频和其它多媒体内容在内的数据包传输。

4G(全IP数据网络):到4G时代,电路交换将完全消失。所有语音通话将通过数字转换,以VoIP形式进行。因此在4G网络进行通话,将可以依靠有线或无线网络而不一定需要移动信号覆盖。


二、描述一次网络请求的流程(浏览器输入百度网址)

三、网络七层模型介绍

七层模型功能简介:

应用层:

描述:向应用程序提供服务,这些服务按其向应用程序提供的特性分成组,并称为服务元素。

功能:文件传输,电子邮件,文件服务,虚拟终端。

协议:HTTP、TFTP、SNMP、FTP、SMTP、DNS、Telnet。

会话层:

描述:为异种机通信提供一种公共语言,以便能进行互操作。

功能:数据格式化,代码转换,数据加密。

表示层:

描述:提供的服务可使应用建立和维持会话,并能使会话获得同步。

功能:解除或建立与别的接点的联系。

传输层:

描述:接受上一层的数据,在必要的时候把数据进行分割,并将这些数据交给网络层,且保证这些数据段有效到达端。

功能:提供端对端的接口。

协议:TCP、UDP。

网络层:

描述:控制子网的运行,如逻辑编址,分组传输,路由选择。

功能:为数据包选择路由。

协议:IP、ICMP、RIP等。

数据链路层:

描述:物理寻址,同时将原始比特流转变为逻辑传输。

功能:传输有地址的帧以及错误检查功能。

协议:PPP、ARP、RARP、MTU等。

物理层:

描述:机械,电子,定时接口通信信道上的原始比特流传输。

功能:以二进制数据形式在物理媒体上传输数据。

协议:ISO2110,IEEE802等。


数据封装的过程:

网络七层模型中相关重要协议与概念:

1、TCP与UDP的区别

2、IP协议简述

3、TCP/IP协议簇

4、 RIP

5、 ARP与RARP

6、 MTU


TCP与UDP的区别:

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付,TCP通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

4.每一条TCP连接只能是点到点的,UDP支持一对一,一对多,多对一和多对多的交互通信。

5、TCP对系统资源要求较多,UDP对系统资源要求较少。


为什么UDP有时比TCP更有优势?

   UDP以其简单、传输快的优势,在越来越多场景下取代了TCP,如实时游戏。

一:网速的提升给UDP的稳定性提供可靠网络保障,丢包率很低,如果使用应用层重传,能够确保传输的可靠性。

二:TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,建立了繁琐的握手过程,由于TCP内置的系统协议栈中,极难对其进行改进,采用TCP,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大,基于UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响。


IP协议简述:

       IP协议是TCP/IP协议族的核心协议,其主要包含两个方面:

一:IP头部信息

       IP头部信息出现在每个IP数据报中,用于指定IP通信的源端IP地址、目的端IP地址,指导IP分片和重组,以及指定部分通信行为。

二:IP数据报的路由和转发

        IP数据报的路由和转发发生在除目标机器之外的所有主机和路由器上。它们决定数据报是否应该转发以及如何转发。

IP服务的特点:

       IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。

       无状态是指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输和接收都是相互独立、没有上下文关系的。这种服务最大的缺点就是无法处理乱序和重复的IP数据报。面向连接的协议,比如TCP协议,能够自己处理乱序的、重复的报文段,它递交给上层协议的内容绝对是有序的、正确的。

        无状态服务的优点也很明显:简单、高效。我们无需为保持通信的状态而分配一些内核资源,也无需每次传输数据时都携带状态信息。

        无连接是指IP通信双方都不长久地维持对方的任何信息。这样上层协议每次发送数据的时候,都必须明确指定对方的IP地址。

        不可靠是指IP协议不能保证IP数据报准确地到达接收端,它只是承诺尽最大努力。很多情况都可以导致IP数据报发送失败。比如,某个中转路由器发现IP数据报在网络上存活地时间太长,那么它将丢弃该报文,并返回一个ICMP错误消息给发送端。因此,使用IP服务地上层协议需要自己实现数据确认、超时重传等机制以达到可靠传输的目的。

IPv4头部结构:

       IPv4的头部结构如下所示,其长度通常为20个字节,除非含有可变长的选项部分。

备注:8位生存时间(TTL)是数据报到达目的地之前允许经过的路由器跳数。TTL值被发送端设置(常见值位64)。数据报在转发过程中每经过一个路由,该值就被路由器减1。当TTL值减为0时,路由器将丢弃数据报,并向源端发送一个ICMP差错报文。

        TTL值可以防止数据报陷入路由循环。

TCP/IP协议簇简述:

       TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。

       TCP/IP协议是Internet最基本的协议,其中应用层的主要协议有Telnet、FTP、SMTP等,是用来接收来自传输层的数据或者按不同应用要求与方式将数据传输至传输层;传输层的主要协议有UDP、TCP,是使用者使用平台和计算机信息网内部数据结合的通道,可以实现数据传输与数据共享;网络层的主要协议有ICMP、IP、IGMP,主要负责网络中数据包的传送等;而网络访问层,也叫网路接口层或数据链路层,主要协议有ARP、RARP,主要功能是提供链路管理错误检测、对不同通信媒介有关信息细节问题进行有效处理等。


RIP路由信息协议(Routing Information Protocol)

        RIP作为一个系统长驻进程(daemon)而存在于路由器中,负责从网络系统的其它路由器接收路由信息,从而对本地IP层路由表作动态的维护,保证IP层发送报文时选择正确的路由。同时负责广播本路由器的路由信息,通知相邻路由器作相应的修改。

        RIP协议处于UDP协议的上层,RIP所接收的路由信息都封装在UDP协议的数据报中。RIP在520号UDP端口上接收来自远程路由器的路由修改信息,并对本地的路由表做相应的修改,同时通知其它路由器。通过这种方式,达到全局路由的有效。


ARP与RARP简述:

ARP:地址解析协议

        对于以太网,数据链路层上是根据48bit的以太网地址来确定目的接口,设备驱动程序从不检查IP数据报中的目的IP地址。ARP协议为IP地址到对应的硬件地址之间提供动态映射。

RARP:逆地址解析协议

       将局域网中某个主机的物理地址转换为IP地址,比如局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。RARP协议广泛应用于无盘工作站引导时获取IP地址。


最大传输单元MTU:

       以太网和8 0 2 . 3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节。链路层的这个特性称作M T U,最大传输单元。不同类型的网络大多数都有一个上限。

        如果IP层有一个数据报要传,而且数据的长度比链路层的M T U还大,那么IP层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于M T U。

        点到点的链路层(如S L I P和PPP)的M T U并非指的是网络媒体的物理特性。相反,它是一个逻辑限制,目的是为交互使用提供足够快的响应时间。

数据进入协议栈时的封装过程:

四、网络相关设备详解(路由器,交换机,网桥,网关)

下面看看网络通信的基本通信图:

路由器(Router):负责第三层(网络层)的数据中继。它能理解数据中的IP地址,如果它接收到一个数据包,就检查其中的IP地址,如果目标地址是本地网络的就不理会,如果是其他网络的,就将数据包转发出本地网络。它的作用在于连接相同或不同类型网络,并且能找到网络中数据传输最合适的路径即路由选择。

交换机(Switch):是一种简化的网桥,互连相同类型的网络,工作在OSI/RM体系结构的第二层(数据链路层)。它采用独享带宽的工作方式。它比集线器智能,网络上的数据是MAC地址的集合,它能分辨出帧中的源MAC地址和目的MAC地址,因此可以在任意两个端口之间建立联系,但交换机并不懂得IP地址。

网关(Gateway):负责第三层(网络层)以上的数据中继,实现不同体系结构的网络协议转换,它通常采用软件的方法实现,并且与特定的应用服务一一对应。比如:OSI的文件传输服务FTAM和TCP/IP的文件传输服务FTP,尽管二者都是文件传输但是由于所执行的协议不同不能直接进行通信,而需要网关将两个文件传输系统互连,达到相互进行文件传输的目的。

网桥(Gate Bridge):负责第二层(数据链路层)的数据中继。互连两个独立的、仅在低两层实现上有差异的子网,将两个局域网(LAN)连起来,根据MAC地址(物理地址)来转发帧,可以看作一个“低层的路由器”(路由器工作在网络层,根据网络地址如IP地址进行转发)。它可以有效地联接两个LAN,使本地通信限制在本网段内,并转发相应的信号至另一网段,网桥通常用于联接数量不多的、同一类型的网段。


五、TCP/IP协议族与相关知识(三次握手,四次挥手,流量控制,拥塞控制)

TCP/IP通信报文类型:

1、SYN(synchronous建立联机)

2、ACK(acknowledgement 确认)

3、PSH(push传送)

4、FIN(finish结束)

5、RST(reset重置)

6、URG(urgent紧急)


三次握手图解:

四次挥手图解:

流量控制:(滑动窗口协议)

描述:为了完成流量控制,TCP使用滑动窗口协议,使用这种方法的时候,发送方和接收方向外通信各使用一个窗口。这个窗口覆盖了缓存的一部分,在缓存中的字节是从应用进程传送来的,在这个窗口中的字节就是可以发送而不必考虑确认的。这个想象的窗口有两个边沿:一个在左,一个在右。这个窗口叫做滑动窗口,因为左沿和右沿都可以滑动。

        窗口大小取决于下面两个数中的较小值:接收窗口(rwnd)和拥塞窗口(cwnd)。接收窗口是由对方发送的包含确认的报文段中所给出的值,这是另一端在缓存溢出和数据被丢失之前所能接受的字节数。拥塞窗口是由网络为避免拥塞而确定的值。

     右沿窗口向右移动表示展开窗口,说明允许从缓存中发送更多新的字节;

     左沿窗口向右移动表示合拢窗口,说明某些字节已经被确认了,发送端不必再担心它们。


拥塞控制:

拥塞:即对资源的需求超过了可用的资源。若网络中许多资源同时供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。

TCP拥塞控制4个核心算法:慢开始、拥塞避免、快速重传、快速回复,拥塞窗口,其大小取决于网络的拥塞程度,并且动态地在变化。

慢开始算法:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。

拥塞避免算法:让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送发的拥塞窗口cwnd加1,而不是加倍。

总结:无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞,就把慢开始门限设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口设置为1,执行慢开始算法。

快重传算法:算法规定,发送方只要一连收到3个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计数器时间到期,要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不要等到自己发送数据时捎带确认。

快速恢复算法:当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。请注意:接下去不执行慢开始算法。

       由于发送方现在认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

图解:

流量控制与拥塞控制的区别:

1、拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。

2、流量控制:指点对点通信量的控制,是端到端的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

拥塞控制代价:需要获得网络内部流量分布的信息。在实施拥塞控制之前,还需要在结点之间交换信息和各种命令,以便选择控制的策略和实施控制。这样就产生了额外的开销。拥塞控制还需要将一些资源分配给各个用户单独使用,使得网络资源不能更好地实现共享。


六、cookie,sessionId与token的区别

cookie:是保存在本地终端的数据。cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。


SessionId:服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。

保存session id的几种方式:

方式一:保存session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。

方式二:由于cookie可以被人为的禁止,必须有其它的机制以便在cookie被禁止时仍然能够把session id传递回服务器,经常采用的一种技术叫做URL重写,就是把session id附加在URL路径的后面,附加的方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面。网络在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。

方式三:另一种技术叫做表单隐藏字段,就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

使用场景:用户输入密码和帐号后,系统进行验证后,生成一个session,分配一个sessionid给使用者,后续服务使用者就无需每次都输入密码和验证密码了,只需把对应的帐户和sessionid带上即可,后端只需进行高效的sessionid的有效性校验即可。解决了关键接口或者敏感接口的多次调用,并且对sessionid的有效期等可以进行管理。


Token:意思是“令牌”,是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库。

出现的原因:

1、session的存储是需要空间的,session的传输一般都是通过cookie来传输,或url重写的方式。

2、token在服务器时可以不用存储用户信息的,token传递的方式也不限于cookie传递,token也可以保存起来。

使用场景:

1、用户授权中使用,用户输入支付密码后,代表用户已经授权了,这时候系统自动生成一个长度比较长的token串返回给服务使用者,后续进行扣款的时候,则进行验证该token串的合法性即可,注意该串需要保证一定的长度,一次性有效,并且较短的有效期等特点。

2、在开放平台中,对外部站点的授权服务,用户授权后,同样可以给外部站点发放一个token,后续访问服务的时候,带上该token即可,避免每次均需要进行授权。

3、引申出来的应用,在一个隔离的串行服务调用中,用户完成第一步需要进行一系列的接口调用,然后得出用户是否有权限或者资格进行参加某项服务,接下来,用户调用第二步,而第二步为了安全起见,仍然需要执行第一步的一系列接口调用,这种方式下,可以在第一步合格的用户系统颁发一个token,该token是一次性有效的,实现上,可以在第一次生成一条记录,以用户帐户和token一起为key,第二次进行update该记录来判断。这样的好处是防止两步的调用被隔离带来的风险。

4、比如我们系统随机抽奖后给用户出现一个提示,告诉他已经中奖了,这个时候用户需要领取才能拿到奖,则可以在第一次给颁发一个token,领奖的时候把token带上进行验证即可。


Session与Token的区别:

1、作为身份认证 token安全性比session好,因为每个请求都有签名还能防止监听以及重放攻击,而session就必须靠链路层来保障通讯安全了。如上所说,如果你需要实现有状态的会话,仍然可以增加session来在服务器端保存一些状态。

2、Session 是一种HTTP存储机制,目的是为无状态的HTTP提供的持久机制。所谓Session 认证只是简单的把User 信息存储到Session 里,因为SID 的不可预测性,暂且认为是安全的。这是一种认证手段。 而Token ,如果指的是OAuth Token 或类似的机制的话,提供的是认证和授权,认证是针对用户,授权是针对App 。其目的是让某App有权利访问某用户的信息。这里的 Token是唯一的。不可以转移到其它 App上,也不可以转到其它用户上。

3、当session过期后,客户端必须重新登录才能进行访问数据。

4.1、session翻译为会话,token翻译为令牌。

4.2、session是空间换时间,token是时间换空间。

4.3、session和sessionid:服务器会保存一份,可能保存到缓存/数据库/文件。

token:服务器不需要记录任何东西,每次都是一个无状态的请求,每次都是通过解密来验证是否合法。

4.4、sessionid:一般是随机字符串,要到服务器检索id的有效性。

共同点:都是保存了用户身份信息,都有过期时间。

        今天这篇文章就先说这么多,后续还有两篇文章在把剩余的内容给补充上。


十八:扩展阅读

1、https://www.cnblogs.com/guolingyun/p/6148462.html

(Android中XML的三种解析方式)

2、https://blog.csdn.net/langtop/article/details/77972855

(HttpClient、HttpURLConnection、OKHttp和Volley优缺点和性能对比,如何选择)

3、https://www.cnblogs.com/index-html/p/traffic-hijack.html(流量劫持是如何产生的)

4、https://server.zzidc.com/fwqcjwt/2557.html(如何防止中间人攻击)

5、https://blog.csdn.net/sd19871122/article/details/79399441(Android4种网络连接

方式HttpClient、HttpURLConnection、OKHttp和Volley优缺点和性能对比)

6、https://www.cnblogs.com/heluan/p/8620312.html(HTTP1.0、HTTP1.1和HTTP2.0的区别)

7、https://www.jianshu.com/p/bb3eeb36b479(QUIC协议浅析与HTTP/3.0)

8、https://www.cnblogs.com/chenjinxinlove/p/10104854.html(HTTP3.0(QUIC的实现机制))

9、https://www.jianshu.com/p/050c6db5af5a(Android开源:主流网络请求库对比(Android-Async-Http、Volley、OkHttp、Retrofit))

10、https://blog.csdn.net/u014756827/article/details/78870365(BIO与NIO、AIO的区别(这个容易理解))

11、https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode/blob/master/article/android/performance/05_network.md(网络性能优化那些事)

12、https://blog.csdn.net/qq_41727218/article/details/82461089(IP协议详解)

你可能感兴趣的:(网络通信相关知识详解(一))