前言

成为一名优异的Android开发,需求一份完备的常识体系,在这儿,让咱们一起生长为自己所想的那样~。

网络优化一向被以为是移动优化水最深的领域之一,因而要想对网络进行g I ^深化优化,咱们就必须先打下比较厚实的网络u o C 1根底,在本文中,咱们将再次重温核算机网络中的要点常识,以此在脑海中树立一个较为全面的网络根底常识体系。

大纲

深入探索 Android 网络优化(一、网络筑基篇)上

一、重识核J S H ~ g x r 6算机网络

1、核算机网络是什么?

  • 1)、首要由 通用、可编程的硬件互连 而成。
  • 2)、经过这些硬件,能够 传送不同类型的数据
  • 3)、O % y E g k X | )核算机网U C J L 9 { 1 o E络不只包含 软件概念,还包含 硬件设备
  • 4)、核算机网络不只仅是 信息通讯,还能够 支持广泛和日益增加的运用

2、核算机网络的分类

1)、按效果规模

广域网(WAN)

几十 KM ~ 几千 KM,跨省、跨国。

城域网(MAN)

5 KM ~ 50 KM,城市间、城市G / T & ; n p内。

局域网(LAN)

1 KM 内,区域内、家庭间、公司内。

2)、f d F n ~ u = q按网络运用者

公用网络

一切能够经过付费办法就能够参加的网络。

专用网络

某些? $ = I T g X i部队、安排或许某些人 为了满意特别事务需求而树立起来的特别的网络,例如军队、铁路、银行都有自己的专x / T : } 4用网络。

二、网络历史演进

1、国际互联网发展历史演进

1)、单个网络

ARPANET,1969年美国国防部创u ) 7K b J ! u r的一个网络,能够衔接周围的核算机。

核算机直接经过沟通机就能够进行信息沟通。

深入探索 Android 网络优化(一、网络筑基篇)上

2)、三级结构

现代互联l R ? C网的雏形,也称为 互联网络,能够把美国 5 + c 7 ix 8 F切的大学、研究所@ Y w N I H、试验室都衔接起来。

从上至下,由 骨干网、区域网、校园网 组成。

深入探索 Android 网络优化(一、网络筑基篇)上

3)、多层次 ISP

ISP(Internet Service Provider):网络服务供给商,例如我国电信、我国移动、我国联通等。从上之下,由骨干 ISP、区域 ISP 组成

骨干 ISP

我国的骨干 ISP 包含 我国电信、我国移动、我国联通,它们能够衔接美国和其它国家的骨干 ISP。

区域 I[ U ~ F (SP

例如移动网络,在北F 1 L & $ # g h C京叫 北京移动,在上海叫 上海移动,这些就属于区域 ISP。区域 ISP 能够衔接公司、校园、家庭的网络

深入探索 Android 网络优化(一、网络筑基篇)上

4)、了解现代国际互联网的首要线路

咱们能够经过0 f s ? A + ) in+ = = 1frapedia 网站了解国际互联网的首要线路。

深入探索 Android 网络优化(一、网络筑基篇)上

上图刻画了 全球的1 M h O c j P一切骨干网络的线路,能够看到,我国的骨干网络出口根本都是坐落广东、福建等沿海区域,它们经过各自的海底电缆与位处于国际各地的骨干网络彼此衔接,终究构成了互联网

2、我国互联网发展历史

1)、1980 年

我国铁道部开始互联网试验。

2)、1989 年E T U

树立并运转第一个公共网络。

3)、1994 年

T Q 8入国际互联网。

4)、至今

当今我国最大的五个公用的核算机网络

  • 我国电信互联网(CHINANET)
  • 我国联通互联网(UE k r 2 R 2 q ; 9NINET)
  • 我国移动互联网(CMNET)
  • 我国教育与科研核算机网(CERNETQ * – `)
  • 我国科学技能网(CSTNET)

3、我国的互联网企业

  • 1996年,张朝阳创立搜狐。
  • 1997年,丁h m 7 # E B R h a磊创立网易。
  • 1998年,王志东创立新浪,马化腾、张志东创立腾讯。
  • 1999年,马云创立阿里巴巴。
  • 2000年,李彦宏创立百度。

3 u 5 !、重识网络层次结构

网络为什么要分层?

由于杂乱的程序都要分层。这是一h v /个架构规划的通用问题,不只仅是网络协议的问题,只需涉及杂乱的逻辑或软件需求需求常常变动的状况一般都会经过分层来处理

思考:规划一个核算机网络 % J 1 U o % ] 需求处理哪些问题?

  • 1)、传输数据时需求保证数据通路顺利。
  • 2)、r w需求辨认意图核算机。
  • 3)、需求了解意图核算机的状况。
  • 4)、数据是否过错。

总之,核算机网络需求处理的问题是繁复而杂乱的,所以咱们需求 选用分层的规划分别去处理不d f u % Q a F x 2同的问题,完成不同的功用

1、层级结构规划的根本准则

1)、彼此独立

每一层只是完成一个相对W t # 4 x 5 O l M独立的功用,而且需求保证层与层之间的耦合度是非常低的。

2)、灵活性

每一层的规划需求具备很好的灵活性、扩展性,以习惯未U N L t % C m Y 2来的网络改变。

3)、耦合度

各层之间是彻底解耦的,层与层之间的改变互不影响。

2、OSI 七层模型

OSI 功用
运用层 为核算机用户供给接口和服务。
表明层 数据处理:编解码、加解密等等。
会话层 办理(树立、维护、重连)通讯会话。
传输层 办理端到端的通讯衔接。
网络层 数据路由:决议数据在网络中的途径。
数据链路层 办理相邻节点之间的数据通讯。
物理层 数据通讯的g n 光电物理特性。
深入探索 Android 网络优化(一、网络筑基篇)上

1)、OSI 悲催的故事

  • 15 j D 4 b /)、一开始,OSI 欲称为全球核算机都恪守的规范。
  • 2)、可是,OSI 在市场化的进L h S ]程中困难重重,由于 TCP/IP 现已在% f B V } e j 9 h全球T ; S X Q Q X M n规模成功运转。
  • 3)、终究,OSI 并没有称为广为运用的规范模型。

2j @ K Z V 0 d c U)、OSI 七层模型失败的原因

  • 1)、OSI 的专家没有充分将理论与实践进行结合。
  • 2)、OSI 规范的拟定周期过长,按 OSI 规范生产的设备无法及时进入市场。
  • 3)、OSI 模型的规划不合理,某些功用在多层重复呈现。

3、TCP/IP 四层模型

深入探索 Android 网络优化(一、网络筑基篇)上

咱们需求理解数据通讯进程中不同设备之间协议的转换。从下图能够看到 p J s z h c – L L由器仅包含网络层与网络接口层

深入探索 Android 网络优化(一、网络筑基篇)上

; 5 u . – 4 #协议的数量来看,TCP/IP 四层模型构成了中心窄,两头大的⏳沙漏形M Z N R % * (状。如下图所示:

深入探索 Android 网络优化(一、网络筑基篇)上

四、初识现代网络拓扑

1、为什么要了解网络拓扑?

由于它 有助于咱们在脑海里边构成一个形象的核算机网络

2、网络拓扑分类

1)、边际部分

家庭

终端机器、路由器、网关、区域 ISP 组成。

深入探索 Android 网络优化(一、网络筑基篇)上

企业

不同于家庭的网络拓扑,其 网关细分为内部网关与统一网关

深入探索 Android 网络优化(一、网络筑基篇)上

2)、中心部分

区域 ISP、骨干 ISP、路由器、海底电缆或跨区域电缆 组成。其中的 通讯设备(一般w F L o是华为)首要是由移动、联通所铺设的

深入探索 Android 网络优化(一、网络筑基篇)上

现代互联网的G F / l ) $网络拓扑构成了一个 树状结构5 N # d . ] i `

深入探索 Android 网络优化(一、网络筑基篇)上

3)、C/S 形u D i

由 客户端/服务端 形式组成,并能够彼此进行通讯。

深入探索 Android 网络优化(一、网络筑基篇)上

4)、P2P 形式

不分为服务端和客户端,它们都是 对等地进行衔接的,优势在于能够使 下载速度更快Z 2 i h $ b,如迅雷下载器中就运用了这种形式。

深入探索 Android 网络优化(一、网络筑基篇)上

五、网络性能指标

1、速率

即 bps <==> bit/s

网络数据传输的各种单位与之对应的常见设备

深入探索 Android 网络优化(一、网络筑基篇)上

为什么O w n 4 T a电信拉的 100M 光纤,测试峰值速度只需 12M 每秒?

网络常用单位为(Mbps),因而这儿的 100M 指的是 100Mbps。

100 M/S = 100 Mbps = 100 Mbit/s
100 Mbit/s = (100/8)MB/s = 12.5 MB/v b Q A Q ! X Fs

2、时延

1)、发送时延r I ]

发送时延 = 数据长度(bit)/ 发送速率(bit. d v G k 3 $ */s)

数据长度是由用户决议的,d ` ( y而发送速率是由核算机网卡所决议的。

2)、传输时延

传达时延 = 传输途径间隔 /( _ a  $ J ! N 传达速率(bit/s)

传输途径间隔是由用i S v ^ : = e z户决议的,而传达速率则受限于传输介质。

3)E E ^ j、排队时延

数据包在网络设备中等候被处理的时刻,例如路由器需求一个一个处理完前面的数据包才能处理后边的。

4)、处Z 8 M ` kf W F _ a `时延

数据包抵达设备( N ( f或许意图机器被处理所需的时刻。

总时延 = 发送时延 + 排队时延 + 传达时延 + 处理时延

3、往返时刻 RTT(Route-Trip Time)

  • 评估网络质量的一项重要指标。
  • 表明数据报文在端到端通讯中来回一次的时= q W G b刻。

一般运用 ping 命令查看 RTT

1)、ping 查看当时城市中的 IP

q0 w [ $ Muchao@quchaodeMat 5 S x McBook-Pro ~ % ping 1 t 5 119.29.148.149
PING 119.29.148.149 (119.29.148.149): 56 data bytes
64 bytes from 119.29.148.149: icmp_seq=0 ttl=116 time=13.210 ms
64 bytes from 119.29.148.149: icmp_seq=1 ttl=116 time=19.118 ms
64 bytes frl M / 9 @om 119.29.148.149: icmp_seq=2 ttl=116 time=34.384 ms

2)、ping 美国的 IP

quchao@quchaodeMacBook-Pro ~ % ping 191.101.238.160
PING 191.101.238.160 (191.101.238.160): 56 data bytes
64 bytes from 191.101.238.160: icmp_seq=0 ttl=52 time=191.791 ms
64 bytes from 191.101D : } Q f.238.160: icmp_seq=1 ttl=52 time=180.278 mt E : v Q _s
64 bytes fr# A l C Nom 191.101.23a ] G n  B i 3 b8.160: icmp_seq=2 ttl=52 time=186.399 ms

六、运用层

传输层与p H N C D x { &之下的层现已供给了完好的通讯服务。而运用层是面向用u y ) # I s ? P o户的一层。它首要是用来 定义运用间通讯的规矩,例如运用进程的报文类型(恳求报文、应对报文)、报文的语法、格局、运用进程发送数据的机遇、规矩等等。

1、DNS(Domain Name System) 域名体系服务

域即A d _ z z对应的网络K p 3 a ! z号,名即对应的主机名字。

1)、功用

经过把没有规矩的点分十进制 I$ I a k ; =P 地址转换为能够理解的f H ; 5 % &一些域名t y 5 c O u T Q

2)、域名

  • 运用域名能够帮助回忆。
  • 域名经过 DNS 服务能够被转换成 IP 地址。
  • 域名是由点、字母和数字组成的。
  • 点切割不同q ~ k [ H的域。
  • 域名能够分为尖端域、二级域、三级域..% – $ C.,例如:www.tn k d & 5 E D xaobao.com =&g& l : o m : | wt; – 三级域.二级m : ( f Y [域.尖端域

尖端域常见c ( P 1 q分类

  • 国家

    • cn
    • us
    • uk
    • ca
  • . ` ~ J } q N L s

    • com
    • net
    • gov
    • org

二级域

例如:q Z r R Bqq、ali} L y nyun、taobao、google、facebook 等等。

尖端域、二级域、三级域组成了一个树状结构。且在尖端域名服务器上面还有一个根域名服务器* S P – E P c 6 T

3)、域名d _ `服务器

只需有X O Y O一个外网的服务器就能够树立一个域名的服务e t ? Q m # 0 U q器。

2、DHCP(Dynamic Host Cons 8 ( t O Z ` = Zfiguratin P~ . Q : / ^ g U |rotocol) 动态主Q V W R G B机设置协议

1)、& + j H z M 是什么?

网络办理员只需装备一段 u q同享的 IP 地址,每一台新接入的机器都能够经过 DHCP 来M _ I O c , ( ho n T U ; u D U s个同享的 IP 地址里边恳求 IP 地址,就能够自动装备。等用完还回去其它机器也能运用。它的特色如下所示:

  • 1、, m rDHCP 是一个局域网协议
  • 2、Dp W CHCP 是运用 UDP 协议的运用层协议

2)、功用

  • 即插即用联网
  • 在 IP 装备界面选中 自动取得 IP 地址、自动取得 DNS* h # z 4 # | l , 服务器地址. / ~即可启用 DHCP 协议去获取一个暂时 IP(一般是一个内网地址)
  • 有一个租期,在租期过半时能够续租

3)、j L t l , X 0 KDHCP 的进程

  • 1)、DHCP 服务器监听默许端口:67
  • 2)、主机运用 UDP# f 2 协议广播 DHCP 发现报文
  • 3)、DHCP 服务器6 k $ @ S P # k宣布 DHCP 供给报文
  • 4)、主机向 DHCP 服务器g W G r C % v X宣布 DHCP 恳求报文
  • 5)、DHCP 服务器回应并供给 IP 地址

4)、向V x / DHCP 租借的 IPy S R 地址是有租期的,IP 地址怎么完成续租呢?

客户端会在租期过去50%的时分,直接向为其供给 IP 地址的 DHCP 服务器发送 DHCP request 音讯报。客户端接纳到服务器回应的 DHCP ACK 音讯包后,会依据音讯报中供给的新的租期以及其他现已更新的 TCP/IP 参数更新自己的装备。

3、HTTP(HyperText Tran5 w Q # . q 5 W Ufsfer Protocol) 超文本传输协议

1)、是什么?

  • HyperText 即超文本、超链接,Http 是指在电脑中~ y i h 3 0 l # l显示的、含有能够指向其他文本的链Y g 4 3 [ N u接文: d R z 2 B M @
  • 关于这些内容都有一个统一的途径,a l | b _例如: http(s)://<} ( ? S主机>:v u & Y & X I I |&` D 3 # a $ i elt;端口>/<途径>
  • HTTP 协议底层是 TCP 协议,因而它是牢靠的数据传输协议

2)、Web 服务器

分为硬件部分(核算机或云上的虚拟设备l F T $)和软件部分(Nginx、3 A 7 A C T &Apache)。

进程

  • 1)、R E ? X ; x ^接受客户端衔接
  • 2)、接受恳求c r s b s报文
  • 3)、处理恳求
  • 4)、拜访 WeT b ; vb 资源
  • 5)、构造应对
  • 6)、发送应对

3)、HTTP 恳求办法

hea+ k j wder 1 header 2
GET 获取指定的服务端资源。
POST 提交数据到服务端。
DELETE 删去指定的服务端资源。(很少用)
UPDATE 更新指定的服务端z t g ? v资源。
PUT 修正数据。
OPTIONS 列出可对资源实行的恳求办法,用f ( `来跨域恳求。| } x o s k
CONNECT 树立衔接隧道,用于署G f 6 m M A | / O理服务器
HEAD 获取资q ] 2 @ Y V源的元信息
TRACE 追踪恳求-呼应的传输途径

GET 和 POS` _ f { OT 的差异

  • 1、get参数经过url传递,post放在request body中
  • 2、get恳求在url中传递的参数是有长度约束的,而post没有
  • 3A y ^ C M 6 . 8 0geto M J U | Q C比post更不安h t ) . S q } L全,由于参数直接暴露在url中,所以不能用来传递敏感信息@ = * ]
  • 4、get恳求只能进行url编码,而w t _ E ! rpo+ f M H @ Hst支持多种编码办法
  • 5、get恳求会阅读器自动cache,而post支y = 5 8持多G ; G e g i 9种编码办法
  • 6、get恳求参数会被完好保存在阅读历史记录里,而post中的参数不会被保存
  • 7、GET和POST实质上便是TCP链接,并无不同。可是由于HTTP的规矩和阅读h s O X q } ( , J器/服务器的约束,导致他们在运用进程中体现出一些不同

4)、HTTP 指定资源

1)、在地址中指定

https://www/ | p | X 5 m.wanandroQ 3 V : o % s b 7id.com/repo/100.html

repo/100.html 是指定的恳求资源。

https://wI K $ ^ww.wanandroid.com/?sort=0&9 s $ ; R *unlearn=0&page=2

? 后边^ + G = r b r ;用来指定恳求参数。

2)、在恳求数据中指定

5)、HTTP 恳求报文

HTTD ? P M d qP 的恳求报文与呼应报文都满意如下结构:g H ;

起始行 + 头部 + 空行 + 实体

其中的 空行是用来区分开头部和实体的

HTTP 恳求报文的格局如下所示:

深入探索 Android 网络优化(一、网络筑基篇)上

例如:

POJ J 7 9 oST https://www.wanandro@ l % Uid.com HTTP/1.$ ; ) Y1
Aca / j E #cept-Encoding:gzip
Accept-Language:zh-CN
...
{ 恳求的 jsonString 内容}

6)、HTTP 应对报文

深入探索 Android 网络优化(一、网络筑基篇)上

7)、HTTP 应对状况码

header 1 header 2
100~199 v y W 4 m u x X议处理的中心状况,还需求后续操作
200~299 成功
300~399 重定向
400~499 客户端过错
500~599 服务端过错

100~199

  • 101:Switching Protocols,服务器赞同a 7 P 0将 HTTP 晋级为 WebSoc6 ( Cket$ 3 6 n – S _ B 0 时发送。

2G i # } k ! c V00~299

  • 200:在呼应体中放有数据。
  • 204:No Con5 4 W ` G g #tent,呼q l ] ^ 4 a =应头后没有 body 数据。
  • 206:Partial Content,一k k f ? N u ; !般用于 HTTP 分块下载和断点续传,一起带上相应的呼应头字段 Content-Ra| Q : G v d Wnge。

300~399

  • 301:Moved= / Q T n , a n j Permanentlyn 3 ^ L T,永久重定向。
  • 302:Found,暂时重定向。
  • 304:Not Mod6 X $ –ified,协商缓存射中时回来。

400~499

  • 400:B; 4 U h 7 k E J `ad RequeS L 1 7 +st,恳求犯错。
  • 403:Forbidden,服务器禁止拜访,原因有法律禁止d J m .、信息敏感等。
  • 404:Not Found,资源未找J n I ~ ) r o B到。
  • 405:Method Not Allowed,恳求办法Q t ^ O不被答应。I 3 P
  • 406:Not Acceptable,资源无法满意条件。& . g 4 g U 9 Z
  • 4x _ ; 1 ! H a 8 *08:Request Timeout,恳求超时。
  • 409:Conflict,多个恳求发生了抵触。
  • 413:Request Entity Too Large,恳求b ] G + c p ,体的数据过大。
  • 414:Requ? – L w 0 } Pest-URI Too Long,恳求行里的 URI 太大。
  • 429:Too Many Request,客户端发送的恳求过多。
  • 431:Request Header Fields Too Large,恳求头的字段内容太大。

500~599

  • 500:Internal Server Error,e t } & p 8 I服务内部犯错。
  • 501:Not Impl$ R m ] i d remented: 恳求的功用不支持。
  • 502:Bad Gateway: 服务器自身是正常的,只是数据* [ a { ! / c w g通道有问题。
  • 503:Service Unavailable: 服务器很忙,无法呼应服务。

8)、HTTP 工作结构

Web 缓存

一般遵从 二八准则:一个网站的内容一般N Q X , y分为20%的抢手内容,80%的冷门内容。因而能够优先缓存抢手内容k G L v I

存储器层次结K 0 M o k G

缓存(CPU 高速缓存)/主存(内存)/辅存(磁盘)

Web 署理

  • 经过 We$ R / } z xb 署理能够屏蔽服务器的部署结构。
  • 能够在 Web 署理里边设置规矩,如防火墙来保证_ k ~ ~ e d k安全。
Web 署理的分类
  • 1)、正向署理:署理客户端去拜访 Server。
  • 2)、反向署理:署理 Server 把数据回来给客户端。例如 Nginx、HAProxy 便是一些著名的署理软件。

CDN(Content Delivery Network)内容分发网络

  • 用于将一些大的内容在临近的服务器留一个备份
  • 运用 CDN 能够进行多媒体内容的加快

CDN的根本原理是 广泛选用各种缓存服务器,将这些缓存服务器分布到用户拜访相对集中的区域或网络中,在用户拜访网站时,运用大局负载技能将用户的拜访指向间隔最近的工作正常的缓存服务器上,由缓存服务器直接呼应

爬虫

o U % X V B 8于在互联网上采集信息, 例如百度、Google的实质便是一个爬虫,它们经过把整个网络的数据给取下来,而且做一个索引,然后把这些内容供给给咱们,在进行查找时就会匹配这些内容并回来。

欠好的. , 3 % &爬虫的缺陷:
  • 添加网络拥塞。
  • 损耗服务器资源。{ & % Y [ t

4、HTTPS(Secure) 安全的 HTTP 协议

https://<主机>:<443>/<途径>

HTTP 是明文传输的,可是咱们需求在网络中传输 账号密码、个人信息、账号金额、u b s ; I h ` p交易信息、敏感信息,这会导致中心人不合法截取信息,导致信息泄露。

1)、加密模型

  • 对称加密:加密与解密都运用同一个秘钥
  • 非对称加密:公钥加密,私钥解密,而且公钥与私钥是拥有必定数学关系的一组秘钥

    • 私钥:自己运用,不对外揭露
    • 公钥:给咱们运用,对外揭露

2)、数字证书 签名校验

数字证书是可信任安排颁发给特定目标的认证。而可信任安排即客户端与服务端都以为安全的安排

数字证书格局

  • 证书l # o b b a Q N n格局、版本号
  • 证书序列号
  • 签名算法
  • 有效期
  • 目标称号h . o i M : c
  • 目标揭露秘钥

3)、SSL(Secure Sockets Layer)安全套接层

SSL 坐落传输层与运用层之间,它是r h 2一个子层,效果首要有两点

  • 1)、数据安全(保证数据不会被走漏)与数据完好(保证数据不会被篡改)
  • 2)、对数据进行加密后传输

HTTPS 的通讯进程

  • 1)、443 端口的 TCP 衔接
  • 2)、SSL 安全参数握手
  • 3)、客户端发送数据
  • 4)、服务端发送数据

SSL(Secure Sockets Layer) 安全套接层Z i i q :握手进程

1)、生成随机数 1、2、3 的进程
深入探索 Android 网络优化(一、网络筑基篇)上
2)、双端依据随机数 1、2、3 与相同的算法生成对称秘钥进行加密通讯
深入探索 Android 网络优化(一、网络筑基篇)上

HTTPS 归纳地运用m ` D O了对称加密b F ^ n X B A #与非对称加密,在进行随机数校验的阶段是运用了非对称加密来进. ] A j T q i ) I行通讯的,然后等双方都承认了三个随机数之后,就能够运用相同的算法来生成对称秘钥进行o K 7 I加密通讯了。HTTPS 的优势在于双端分别t v c b z Z生成了秘@ ] q钥,没有经过传输,削减了秘钥走漏的或许性

5、Http2

它的特色如下所示o s u & 8 0 :

  • 1)、头部紧缩
  • 2)、多路复用:多路复用答应一起经过单一的HTTP/2衔接发送多重恳求-呼应信息。改善了:在# ) 3 a s , } Ghttp1.1中,阅读器客户端在同一时刻,针对同一域名下的恳求有必定数量约束(衔接数量),超越约束会被堵塞
  • 3)I y w G j s x提高拜访速度:比较 http1.1 恳求资源所需时刻更少,拜访速度更快
  • 4)、二进制分帧:HTTP2.0 会将一切的传输信息切割为更小的信息或许帧,并对他们进行二进制编码
  • 5)、设置恳求优先级
  • 6)、服务端推送

6、cookie

HTTP 是一个无状况协议,因而 Cookie 的最大的效果便是存储 sessionId 用来仅有标识用户。而且,Cookie 实质上便是阅读器里边存储的一个很小的文本文件,内部以键值对的办法来存储

生存周期

经过 Expires 和 Max-Age 两个特点来设置:

  • Expires:过期时刻。
  • Max-Age:表明一段时刻间隔,单位是秒,从阅读器收到报文开始核算。

效果域

咱们能够运用 Do1 W Nmaint ? s ! 1 M i 6 和 path 特点给 Cookie 绑定域名和途径。如果在发送恳求之前,发现域名或许途径和这两个特点不匹配,那么就不会带上 Cookie。需求留意的是,途径中含有 / 表明域名下P 5 –的任意途径都答应运用 Cookie。

安全

  • 带上 Secure:阐明只能经过 HTTPS{ Q m @ 6 d N w 传输 cookiz x ae
  • 带上 HttpOnly:阐明只能经过 HTTP 协议传输
  • 带上 SameSite:防备 CK ~ Y e ? {SRF 攻击

缺陷

  • 1)、安全缺陷:Cookie 很简略被不合法用户截获,然后进行一系列的篡改,最终在 Cookie 的有效期内从1 P F j头发送给服务器
  • 2)、容量缺陷:体积上限只需4KB,只能用来存储少数的信息
  • 3)、性能缺陷:Cookie 紧跟域名,因而域名下的恳求都会携带上完好的 Cookie,这样跟着恳求数的增多,将会构成巨大的性能I | % 4 . 2糟蹋,由于恳求携带了很多不必要的内容。这儿能够经` ) a w b k过 Domain 和 Path 指定效果域去处理

7、HTTP 传输中的常见问题

  • 1)、跨域问题
  • 2)、数据传输
  • 3)、队头堵塞

七、传输层

现在,当设备 A 与 设备 B 彼此通讯时,咱们能够以为它/ A ] ,们便是经过一个虚拟的互连网络} y / O Q 1 e o `进行衔接的。在虚拟的互连网络里边现已处理了网络拓扑、数据路由的走向等问题。在传输层要点处理的是两个设备它们直接是怎么进行通讯的

1、传输层的首要功用

1)、进程与_ ) 8进程的通讯

不同于在单个操作体系内运用的进程U 9 M X q 3 V R间通讯(Unix 域套接字、同享内存),网络通讯能够跨设备、跨网络进行通讯。

2)、端口的概念

  • 运用端口来符号不同的网络进程
  • 端口运用16比特位表明(0~65535)

常见的协议端口有:

协议 端口
FTP 21
HTTP 80
HTTPS 443
DNS 53
TELNET 23

2、UDP(i D = Y r V 4 cUser Datagra: a Q x | rm Protocol)用户数据报协议

深入探索 Android 网络优化(一、网络筑基篇)上

1)、功w b d

UDP 协议 不会对数据报进行任何的处理,即不兼并,也不拆分数据

2)、特色

1)、无衔接

通讯时并/ C 3 z y 5 .不需求提前树立衔接。

2)、不保证牢靠的数据交给

想发就发,无法保证数据在网络传输进程中是否丢掉。

3)、面向报文传输

不对数据做任何处理,而是直接将运用层数据塞进报文里边。

4)、没有拥% Y E塞操控

不论网络是否拥塞,它都会把数据给交给出去。

5)、首部开支很小

首部只是占用8个字节。

3)、报文结构

深入探索 Android 网络优化(一、网络筑基篇)上
  • UDP 长度~ _ S |最小值为 8, 即仅包含 UDP 首部
  • 校验和是用来检测 UDP 的数据报在传输进程中是否犯错. _ { ( L . L

4)、根据 UD r g 0 D dP 定制化的 5 个例子

1、来自网9 x h S ( L 8 S页或许 App 的拜访

现在,HTTP 往往采取多个数据通道同享K b 5 d M H O 6一个衔接的战略,这样做原本是为了加快传输速度,可是 TCP 严厉的次序战G # M o略使得哪怕同享通道,前一个包不来,后一个包即便与前一个包不要紧,也要等着,这样就会使时延加大。

而 QUIC(Quick UDP Intern~ : x 1 t 9 et Connection,快速 UDPQ 3 x ` 互联网衔接)协议是 Google 提出的一种根据 UDP 改善的通讯协议,其意图是下降网络通讯的推迟,供给更好的用户互动体验。

QUIC 会在运用层上自己快速树立衔9 ~ ^ S } q接、削减重传时延、自习惯拥塞操控,是运用层定制化的代表。

2、流媒体协议

直播一般都运用 RTMP(Real Time Messaging Protocol,实时音讯传输协议P U M V),根据 TCP。但关于直播来说实时性比较重要,宁可丢包,也不要卡顿。

关于视频播映来说,有的} F 1 ! J ~ o *包能够丢,有的包不能,由于在视频的接连帧李,有的帧重要,有的不重要,如果必定要丢包,隔几个丢一个,其实看视频的人不会感知,可是如果是接连丢帧,就能感知到D ! w W了,因而在网络欠好) E z ! e z 1 q的状况下,运用一般会挑选性地丢帧。

当网络欠好的时分,TCP 会自动下降发送速度,这对原本当时就卡的视频来讲无疑是雪上加霜。TCP 应该让运用层马C F ! k . e Q $ {上重传,而不是自动让步。因而,很多直播运用N ` y J j D都根据 U6 = . d w I G w QDn / 3 % Y G }P 完成了自己的视频g { H w @ v传输协议。

3、实时游戏

维护 TCP 衔接需求在内核维护一些数据结构,可是一台机器能够支撑的 TCP 衔接数目是有限的。由于 UDP– ( B 是没有衔接C W H的,所以在异步 I/O 机制引进之前,UDP 常常是应对海量客户端衔接的战略。

在游戏对实时要求比i l s D y ) 8 g s较严厉的状况下,能够选用自定义的牢靠 UDP 来传输数据包,经过运用自定义重传战略,能够包丢包产生的c } : b t推迟降到最低,尽量削减网络问题对游戏构成的影响。

4、物联网

Google 旗下的 Nest 树立了 Thread Group,推出了物联网通讯协议 Thread,该协议便是根据 UDP 的。

5、移动通讯领域

在 4G 网络里,经过移动通讯传输数据面对的协议 GTP-U 便是根据 UDP 的。关于移动网络的相关常识咱们将在下一篇进行讲解。

3、TCP(Transmission Control Protocol) 传输操控协议初识

1、TCP 报文详解

深入探索 Android 网络优化(一、网络筑基篇)上

1)、{ ~ i A 7 1 e P *特色

  • 1)、面向衔接:面向9 l } ( / / * W衔接就像是打电话时需求先拨通电话u # U 9 J e T J s
  • 2)、点对点通N W 4 @ v m
  • 3)、牢靠的传输服r n z ( f 4 n Q
  • 4)、全双工通讯:两个设备在衔接时,它们都能够一起地发送数据与接纳数据
  • 5)、面向字节省的协议:TCP 处理的是一个一个的字节,所以TCP 很或许会取出数据中的某一段进行传输,而剩余的数据会把它放m , 3 z s ] $ p ;到第二个及之后的 TCP 报文中进行传输。因而 TCO b x m : i r 0 NP 协议或许会对用户的数据进行兼并或分拆

TCP 的缺陷在于 传输功率慢,由于它需求树立衔接、发送承认包等等

2)、报O G d K m ;文首部字段

深入探索 Android 网络优化(一、网络筑基篇)上
序号
  • 表明规模为 0 ~ 2^o 2 , t32 - 1
  • 由于 TCP 是面向字节省的f v – ,,所以每一个字节都有一个与之对应的序号
  • TCP 数据报的序号便是数据报中第一个字节的序号
承认号
  • 表明规模为 0 ~ 2^3Y + m2 - 1
  • 表明期望收到数据的首字节] T ? 1 K ~ + Z序号,如果承认号为 S,则表明 S – 1 序号的数据都现已收到了
数据偏移
  • 占4位:J U j $ F 1 $ k 70 ~ 15,单位为:32位字。=> 首部规模为20~60字节– w :
  • TCP 数据偏移首部的间隔,由于 TCP 选项的巨细是不承认的,所以需求此数据项
TCP 符号

占6位,每位都有不同的含义。

符号 含义
URG(Urgent) 紧迫位,URG = 1,表明紧迫数据。
ACK(Acknowledgement 承认位,ACK = 1,承认号才生效。
PSH(Push) 推送Y | ( x % D @ I位,PSH = 1,表明需求尽快地把数据交给给运用层。
RST(Reset) 重置位,c q ? )RST = 1,从头树立衔接。
SYN(Synchronization) 同步位,SYN = 1表明衔接恳求报文。
FIN(Finish) 终止位,FIN = 1表明释放衔接。
窗口
  • 占16位:0 ~ 2 ^ 16 - 1
  • 窗口指明答应对方发送的数据量。例如:承认号为201; d p e,窗口为300,; Q 1 n l那么能够. _ 7 ! 9 I E ( R接纳序号的规模为 201 ~ 5l d ; x Q00
校验和

与 UDP 类似,用来检测 TCP 的数据在传输进程中是否S . N } f U O犯错o F , J g E ^ l (

紧迫指针
  • 紧迫数据(URG = 1)
  • 指定紧迫数据在报文中的位置
TCP 选项
  • 最多40字节
  • 支持未来的扩展s % t k O ,

4、牢靠传输的根本原理

1)、中止等候协议

当发送方发送一个音讯时,接纳方接纳到了并将承认信息发给发n @送方,这个进程中 发送方需求中止等候接纳方的承认信息3 7 / ` – A t w

超时重传

当音讯发送出去后,发送方并没有在超时时刻内接纳到接纳方的承认音讯或许超时了之后音讯才收到,此时会向发送方从头发送该音讯。超时重传1 7 l E般都会处理三种异常状况,如下所示:

  • 1)、发送的音讯在路上丢掉了
  • 2)、承认的音讯在路上丢掉了
  • 3)、承认的音讯超时了才到? / s ` p b % y

超时@ # h N A N K T m定时器(超时重传定时器)

  • 1)、每发送一个音讯,都需求设置一个超时定时器
  • 2)、首要4 [ U – g ~ ) #运用p b L 4 N V o 7在 TCP 的牢靠传输协议里边,它是为了操控或许发生丢掉的报文而规划的定时器,当 TCP 协议发送端发送一个报文时,就会为该报文设置一个超时定时器
  • 3)、如果超时定时器在完毕之前收到了来自接纳端对该报文段的承认,则吊销这个定时器
  • 4)、如果在超时定时器完毕之前仍然没有6 ; r收到来自接纳端对该报文段的承认(超时),则f ) m以为这个报文或许现已丢弃,发送端会从头发送该报文,并设置一个超时定时器
  • 5)、需求留意的是,发送端在超时定时器吊销之P % [ M ` a前,必须持续缓存已发送未承认的报文,直到发送端收到了来自接纳端的承认

特色

  • 1: j + n } ;中止等候协议是最简略的牢靠传输协议
  • 2、对信道的运用b j f = X z ^ n H功率不高

已然单个发送和承认功率低,那么咱们能够批量发送和承认吗?

2)、接连 ARQ(Auy X L X c 2tomatic Repeat Request) 自动重传恳求3 5 R L协议

ARQ 是对中f e v = z u T U #止等候协议的改善,能够 大幅提高信道运用率 的一个协议。

b D d % V 0动窗口

  • 1)、窗口中的数据都能够发J 7 4 L ~
  • 2)、经过移动窗口的办法来标识没有接纳到承认的音讯
  • 3)、选用了累积承认的办法,并不需求对每一个x E 音讯都进行承认

累积承认

只需我收到第5个音讯的承认了,就表明第 1 ~ 5 个音讯接纳方都收到了。

5、TCP 协议的牢靠传输

TCP 的牢靠传输根据$ $ c o 3 $ + K接连 ARQ 协议。

  • 1)、滑动窗口
  • 2)、累积承认
  • 3)、挑选重传

挑选重传

  • 1)、挑选重传需求拟定需求重传的字节
  • 2)p I r h A @ w{ i V [ Z [ s M一个字节l x ^ _ w 7 . Y *都有仅有的32位序号= F U(4字节)
  • 3)、要重传的数据是存储在 TCP 选项 中,其中最多只能存储10个序号,即 5 个规模段的信息
  • 4)、挑选重传的是一个H C + 信息边界,即一段字节省,n E ~ N !例如:传送 1000 ~ 1200, 2000 ~ 3000 这个规模内的信息

6、TCP 协议的流量操控

流量操控指的是 让发送方发送速率不要太快。TCP 运用了滑动窗口来完成流量操控

1)、滑动窗口

  • rwnd = 300 ,表明窗口巨细为300。
  • 占16位:0 ~ 2 ^ 16 – 1。
  • 窗口指明答应对方发送的数据@ 1 t !量。例如:承认号为201,窗口为300,那么能够接纳序号的规模为 201 ~ 500。
  • 接纳方能够调整滑动窗口的巨细来操控发7 @ S T }送方发送! ~ a B z x数据的功率
  • 当接纳方将 rwnd 从0调整为1000并将这个信息发送给发送方时t A & ( 1 V _ r,音讯丢掉了,这就会导致发送方和接纳方都会等候,构成一个死锁局势

怎么处理这X s K r 1 Z 3种死锁局势呢?

2)、坚持定时器

坚持定时器是运用滑动窗口进行流量操控的时分设置的。

  • 1)、当接纳到窗口: o : O O _为0的音讯,则# c 4 A发动坚持定时器
  • 2)、坚持定时器每隔一段时刻发送一个窗口探测报文

7、TCP 协议的拥塞操控

问题

  • 一条数据链路经过非常多的设备。
  • 数据链路中各个部分都有或许成为U s G m – . V M网络传输的瓶颈。

流量操控与拥塞操控的差异

不同于流量操控考虑的是点对点的通讯量的操控,拥塞操控考虑的是整个网络,是一个大局性的考虑

怎么判别是否发生了拥塞?

简略地以为4 s c 1 Z Z a h报文超时就发生了拥塞

TCP 的拥塞操控

1)、慢发动算法
  • 由小到大逐步添加发送数据量(呈指数增加,例如:1、2、4、8、16)
  • 每收到一个报文承认,就加一
  • 超越慢发动阈值(ssthresh) 则不再增加
2)、拥塞防止算法
  • 维护一个拥塞窗口的变量N E $ s J f :
  • 只需网络不拥塞,就试探着将拥塞窗口调大

TCP 的拥塞Z = f S操控在前期运用了 慢发动 算法对窗口巨细进行指数增加,直到超越慢发动阈值(ssthresh)则f V T =不再增加,后续则发动拥塞防止算法对窗口进行线性增加

8、TCP 链接[ r k X m * 1 h的树立 – 三次握手

深入探索 Android 网络优化(一、网络筑基篇)上

为什么发送方要宣布第三个承认报文呢?

  • 1)、现已失效的衔接恳求报文传送到对方Q X n *,引起过错:假设两V E ^ R 次握手就能够,失效的链接恳求报文就会被接纳并树立/ a ^ F了重复的衔接。当运用三次握手时,比较慢抵达接纳方的报文也会发送一个承认给发送方,可是发送方现已进行了第三次握手了,因而发送方会疏忽掉z a 0 H第2次的承认,不会进行任何的操作
  • 2)、4 k . { S f S于信道不牢靠,而 TCP 想在不牢靠信道上树立牢靠地传输,那么三次通讯是理论上的最小值。(而= : T + UDP 则不需树立牢靠0 e w传输,因而( A 3 , 2 z w G UDP 不& u X L f 2需求三次握手)
  • 3)X v 9 9 F , @由于双方都需求承认对方收到了自己发送的序列号,e / %承认进程最少要进行三次通讯

9、TCP 链接的释放 – 四次挥手

深入探索 Android 网络优化(一、网络筑基篇)上

1)、等候计时器

  • 会等候 2MSL 时刻 => 4分钟。
  • 时刻等候定时器是由是在四次挥手时由自动封闭 TCP 衔接的一方设置的,它首要是为了 保证自动封闭方在对最终一个 FIN 报文(第三次挥手)发送承认的报文能够抵达接纳方
  • MSL(M` ( f O B Max Segment Lifetime): 最长报文段寿命。MSL 主张设置为2分钟。

2)、为什么需求等候 2MSL?

  • 1)、由于最终一个报文没p / l – _ N / e i有承认,咱们需求保证发送方的 ACK 能够抵达接纳方,如果 2MSL 时刻内没有收到,则接纳方会重发
  • 2)、2MSL 时刻能够保证当发送方没有收到承认时Y & u b s –,接纳方能够再次发送 FIN 报文,而且接纳方能够再次收到并从头发送承认,所以 2MSL 的时刻能够保证衔接正常完毕@ R } @ U M
  • 3)、保证当时衔接的一切报文都现已过期了

10、TCP 与UDP 的差异

  • 1)、UDP 一般用于多媒体信息分发,即视频、语音、实时信息 等等。而 TCP 一般用于牢靠信息的传输,运用场景包含金融交l a k =易、牢靠通讯、MQ 等等
  • 2)、TC; ? $ _ H IP 面向衔接,UDP 是无衔接的
  • 3)、TCP 供给牢靠的服务^ ! F c I ! H {,也便是说,经p @ +过 TCP 衔接传送的数据,无差错,不丢掉,不重复,且按序抵达;UDP 尽最大努力交给,即不保证牢靠交给
  • 4)、TCP 的逻辑通~ ? = )讯信道是全双工的牢靠信道;UDP 则是不牢靠信道k A l J $
  • 5G H % q U)、每一条 TCP 衔接只能是点到点的;UDP 支持一对一,一对多,多对一和多对多的交互通讯
  • 6)、TCP 面向字节省(或许呈现黏包问题),实践上是 TCP 把数据当作一连串无结构的字节省;UDP 是面向报9 1 |文的(不会呈现黏包问题)
  • 7)、UDP 没有拥塞操控,因而网络呈现拥塞不会使源主机的发送速率下| m o y S x %降(对实时运用很有用,如 IP 电话,实时视频会6 . w 6 ! 5 | #议等)
  • 8)、TCP 首部开支20字节;UDP 的首部开支小,只需 8 个字节

11、套接字(Socket)

咱们能够运用端口(Port)来符号不Q M 1 T w U同的网络进程,而端口运用了16比特位表明(0~65535)。

1)、Socket 概念

  • 套接字是一个笼统的概念,表明 TCP 衔接的一端。
  • 经过套接字能够进行数据的发送或接纳。
  • TCP = { Socket1:Socket2} = {{IP:Port}{IP:Port}},能够看到,TCP 由两个套接字组成。

2)、Socket 编程

服务端编程

  • 1)、创立 Socket
  • 2)、绑定 Socket
  • 3)、监听 Socket
  • 4)、接纳 & 处理信息

其代码如下所示:

import socket


def sek * $ 0 { e V $rver():
    # 1、创立 Socket
    s = socket.socket()
    hosp i  ~ J + O ct = "127.0.0.1"
    port = 5678

    # 2、绑定 Sockeo I 3 B jt
    s.bind(host, port)

    # 3、监听
    s.listen()

    # 4、发送数据
    while True:
        c, addr = s.accept()
        print("connect addr"5 : J R x j 0, addr)
        c.send(b'Sj x | Tock@ A  { c a p zet Study.')
        c.close()

客户端编程

  • 1)、创立 Socket
  • 2)、衔接 Socket
  • 3)、发送音讯

其代码如下所示:

impory ! = p St socket


def client(i):
    # 1、创立 Socket
    sC # 1 z P H = socket.socket()

    # 2、衔接 Socket
    s.connect(('127.0.0.1', 5678))

    # 3、接纳音讯
    print("Received message:%s, client Id:%dR M # = 5 # z" % (s.recv(1024), i)H n #)
    s.close()


if _c i [ + ? Q / x e_name_^ ] : ^ R z p Z_ == '__main__':
    for i in range(10):
        client(i)

单机通讯更引荐运用域 Socket,比较网_ X t x P * F H M络通讯数据需求在整个协议栈走一轮,域u = y ~ Socket 它的处理流程愈加简略,体系消耗愈加小。此外,如果对 Soy H l i Xcket IO 完成机制有兴趣的同学能够N n T 点击此处.

12、TCP^ g 9 i 协议细节之 TCP 协议的四个定时器

  • 1)、超时定时器
  • 2)、坚持定时器
  • 3)、时刻等候定时器
  • 4)、保活定时器:服务端一般都会设置一个保活定时器,它是为了保活 TCP 衔接而规划的,能够防止 TCP 衔接的两头呈现长时刻的空闲,当一方呈现改变或毛病时,另一方没有察觉的状况。
    当服务端每次收到对方的数据则重置这个定时器,如果定时器超时,则l ! ^会发送弹出报文段,以此探测客户端是否在线,如果没有收到呼应的话,那么则以为客( Z P z J g & f户端现已断开衔接了,因而服务端也会终止这个链接。现如今,很多的分布式体系都会运用保活定时器来检测其它节点是否在线仍是现已毛病,或许其它节点也会每隔一段时刻向主节点上报心跳信息以证明在线。

13、TCP 在三次握手的时分,IP 层和 MAC(Medium AcV v C = ; 3 ecess Control) 层在做什么呢?

其实 TCP 每发送一个音讯,都会带着 IP 层和 MAC 层。由于 TCP 每发送一个音讯,IP 层和 MAC 层的W s K I 4 6一切机制都要运转一遍。

需求留意的g p ) Z y是,只需是在网络上跑的包,都是完好的。能够有基层没上l ; ] ] S i g R 0层,绝– o 6 0对不或许有上层没基层。所以,对 TCP 来说,无论是三次握手仍是重试,只需想包网络包发送出_ v T u去,就要有 IP 层和 MAC 层,不然是发不出去的

深化探索 Android 网络优化(一、网络筑基篇)下

参阅链接:


  • 1、慕课网之《编程必备根底 核算机组成原理+x 5 g m u [ s k a操作体系+核算机网络》网络部分 9 – 13章
  • 2、《趣谈网络协议》1 – 5章
  • 3、《核算机网络N + . m , J 自顶向下办法》前 6 章
  • 4、(主张精读)HTTP灵魂之问,稳固你的 HTTP 常识体系
  • 5、(主张收藏)TCP协议灵魂之问,稳固你的网路a U A 5底层根底
  • 6、一位前端小姐姐的五万字面试宝典
  • 7、面试带你飞:这是; ! t ` : j h一份全面的 核算机网络根底 总结攻略
  • 8、JavaGuide – 网络
  • 9、intervi8 c G p K : # [ew – 网络
  • 10、总结了17年初到18年初百场前端面试的面试经验(含答案)
  • 11、CS-Notes – 网络

Con8 * b e 6 e stanct Me

● 微信:

欢迎重视我的微信:bcce5360

● 微信群:

由于微信群已超越 200 人,费事咱们想进微信群的朋友们,加我微信拉你进群。

● QQ群:

2千人QQ群,AweA + fsome-Android学习沟通群,QQ群号:959936182, 欢迎咱们参加~

Abouto r = C % C Q me

  • Email: chao.qu521@gmail+ i H z & t } g.com

  • Blog: jsonchao.github.io/

  • 掘金: juejin.im/user/5a3ba} F F9…

很感谢您阅读这篇文章,期望您能将它共享给您的朋友或技能群,这对我含义重大。

期望咱们能成为朋友N c – O W h,在 Github、掘金上一起共享常识。