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


前言

成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~。

八、网络层

1、网络层主要功能

数据路由。

2、IP 协议

1)、IP 协议拆解

虚拟互联网络

  • 1)、实际的计算机网络是错综复杂的。
  • 2)、物理设备通过使用 IP 协议,屏蔽了物理网络之间的差异。
  • 3)、当网络中v l 4 ? e g 1 6的主机使用 IP 协议连接时,则无需关注网络细节。

计算机 A 与 B 之间的数据通信可以认为是通过一个虚拟的互连网络进行传输的。

IP 协议的作用

  • 1)、O L &IP 协议 使得复杂的实际网络变为一个虚拟互连的网络
  • 2)、IP 协议 使得网络层可以屏蔽底层细节而专注网络层的数据转发
  • 3)、IP 协议 解决了在虚拟网络中数据报传输路径的N ` h m M t W G v问题

IP 地址

每一个唯一的网络设备都有一个唯一的 IP 地址。n X ` | O不同于 MAC 地址是不可改变的,IP 地址会根据当前设备所连接的网络环境的变化而发生变化

例如一个 IP 地址:192.M 2 F l D168.11.11 =&8 O G P [ D ` rgt; 11000000.10101000.00001011.00001011

特点

  • IP 地址U f / * n 4 {长度为 32位,常分为4个8位。
  • IP 地址常使用点分十进制来表示,即 0~255.0~255.0~255.0~255。
  • IP 地址最多有 2 ^ 32 = 4294961296 => 42 亿。

IP 数据报 = IP 首部 + IP 数据报的数据,IP 数据报的报文格式 如下所示:

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

版本

占4位,指的是 IP 协议的版本,通信双方的版本必须一致,当前主流版本是4,即 IPv4,也有 IPv6。

首部位长度

占4位,最大数值为15,表示的是 IP 首部长度,单位是 32位字(4个字节)。V m +所以 IP 首部的 最大长度为 15 * 4 = 60字节

服务类型(TOS)

表示当前的数据包是高优先级的,还是低优先级的。数据包是按照 TOS 被分配到0 2 g | & H S3个波段(band0、band1、band2)里面的。

总长度

占16位,最大数值为65535,表示的是 IP 数据报的总长度(IP 首部 + IP 数据)。

需要注意的是,数据在j ] F 7 g 2 % q x数据链路层中的传输受最大传输单元 MTU 的限制,而 MTU 一般为为 1500 个字节,如果 IP 数据报的长度高于 MTU 的话,数据链路层将会把 IP 数据报进行
分片,即拆分成多个数据帧进行传输

标识

协议内部自身使用,不需要关注。

标志

占3位,目前只有两位是有意义的,标识是否进行分 q 1 5 t

片偏移

占 13 位,如果发生了分片,这里将会记D F l v 6录当前的数据帧保存的是第几个偏移的 IP 数据

TTL

  • 占8位,表明 IP 数据报文在网络中的寿命,每经过一A 0 / j e r % *个设备,TTL 减1,当 TTL = 0时,网络设备必须丢L ! _ G弃该报文
  • 当 IP 报文在网络中找不到终点的时候,避免 IP 数据在网络中无限进行传输,消耗带宽

协议

占8位,表明 IP 数据所携带的具体数据是什么协议的。(例如:TCP、UPD 等等)

协议
ICMP 1
IGMS d B J yP 2
IP 4
TCP 6
UDP 17
OSPF 89

首部校验和

占16位,校验 IP 首部是否有错,接收方在接收2 / m L x c q了 IP 数据报文之后会进行头部的校验,如果出错会进行丢弃

源 IP 地/ K ( a _ S 1

发送 IP 数据报文的 IP 地址。

目的 IP 地址

数据报到达的 IP 的地址。

2)、j O @ E G l 7IP 协议的转发流程

逐跳(hop-by-hop)

数据是从目的设备传输到下一个网络1,又从下一个网络9 S w S y1传输到路由器,又从路由器跳到下一个网络2,所以是一跳一跳,即 hop-by-hop。

路由表

  • 1)、不同于 MAC 地址表是由一组一组A z a *的 MAC 地址与硬件接口组成的,路由表是由一组一组的 目的 IP 地址与 下一跳的 IP 地R / b o V址组成的
  • 2)、计算机或$ ? x | x W @ h d者路由器都拥有路由表

转发流程

深入探索 Android 网络优化(一、网络筑基篇)下
  • 1)、A 发出目的地为 C 的 IP 数据报,查询路由表发现下一跳为 E。
  • 2)、A 将 IP 数据报交给数据链路层,并告知目的 MAC 地址是 E。
  • 3)、数据链路层填充源 MAC 地址 A 和目的 MAC 地址 E。
  • 4)、数据链路层通过物理层将数据发送给 E。
  • 5)、E 的数据链路层接收到数据帧,把帧数据交给网络层。
  • 6)、E 查询路由表,发u * & ` h @ L T现下一跳为 F。
  • 7)、E 把数据报交给数据链路层,并告知J g D 6 ,目的 MAC 地址为 F。
  • 8)、E 的数据链路层封装数据帧并发送。
  • 9)、F 的数据链路层接收到数据帧,把帧数据交给网络层。
  • 10)、F 查询路由表,发现下一跳为 C。% g j } ? 0
  • 11)、F 把数据报交给数据链路层,并告知目的 MAC 地址为 C。
  • 12)、F 的数据链路层封装数据帧并发送。

MAC 地址与 IP 地址最大的区别

  • 1)、数据帧每一跳的 MAC 地址都在变化,而IP 数据报每一跳的| B u A n ! M IP 地址始终不变[ P R h _ Z ) @
  • 2)、IP 地址具有远程定位功能,而 MAC 地址更像是身份证号,它的唯一性是为了组网时可以不用担心不同的@ 4 Z i网卡在一个网络里会产生冲突,从硬件角度保证不同的网卡有不同的标识
  • 3)、相比于 IP 地址,MAC 地址的通信范围比较小,局限在一个子网里。例如:从b T x a 192.168.0.1/24 访问 192.168.0.9/24 是可以用 MAC 地址的

3)r E N w M O、IP 地址的子O H * H j o网划Y b 0 4 I c e

为什么要对 IP 地址进行划分?

因为规划和分配 IP 地址非常麻烦。

分类的 IP 地址c V P O F B

组成形式:网络号 + 主机号

通常有如下三种类型9 q 3 m U k 1 r的 IP 地址[ ) ~ t E[ 5 2 Q F M E r q

  • A 类:首位为0,网络* O ) d ^ x F号为 8 位,主机号为24位
  • B 类:首位为10,网络号为 16 位,主机号为16位
  • C 类:首位为110,网络号为 24 位,主机号为8位

展示图

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

特殊的网络号

  • A 类地址网络段全0(00000000)表示特殊网络
  • A 类地址网络段后7位全1(01111111:127)L L s ( j表示回环地址
  • B 类地址网络段(10000000.00000000:128.0)是不可使用的
  • C 类地址` P z网络段(192.0.0)是不可使用的

特殊u w m G 6 e s %的主机号

  • 主机号全0表示当前网– : `络段,不可分配为特定主机。例如:1.0.0.0
  • 主机号为全1表示广播地址E ( } ` 9 /,向当前网络段所有主机发消息。例如:0.1.1N j L j 2 p1.111

表格图

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

本地回环地址(Loopback A% = & G G H o Q {ddress):127.0.0.1,不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会废弃的接口。在 Windwos 操作2 # 3 0 { f [ ~系统中也有相$ a V J )似的定义,所以一般在安装网卡前就可以 ping 通这个本地回环地址。一般都会用来检查本地网络协议、基本数据接口等是否是正常的。代码如下所示:

quchao@quchaodeMacBook-Pro EMC-MBANK-ANDROID % ping 127.0.0.1
PING 12/ 4 F a o % c7.0.0.1 (127.0.0.1): 56c s z V x : M dataD 4 z bytes
64i / = % y m I b@ B e eytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.068 ms
64 bytes from 127.0.0.1v U @ % r: icmp_seI 1 . X % * ?q=1 ttl=64 time=0.103 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl@ ? & # A W g=64 time z ^  # w M ke=0.081 ms
64 byt4 d 6es from 12H L n 6 E C J y7.0.0.1: icmp_seq=3 ttl=64 time=0.081 ms

分类地址的补充

  • D 类地址:1110…..
  • E 类地址:1111…R n o 9 Q C P F ,..

它们都仅用作特殊用途。

划分子网

某公司拥有256名员工,每人配备一个计算机,请问该{ O u G [ & }公司应该申请哪种y q 3 f (网络段?

分配 B 类地址,但是一个 Bm X A S _ ; J * 类地址所能容纳的主z ; ^机数量为 2^16-2,这会造成极大的浪费。为了解决这个问题,需要划分子网。

例如:将} C 0 E ] % 193.10.10.0 这个 IP 划分为 193.10.10.0 ~Y | L 9 | j m ) z 193.10.10.127 与Z S x ` u t $ H 193.10.10.128 ~ 193.10.10. 255。

子网这么多,如何判断某个 IP 的网络号b { {

子网掩码

快速地判断某一个 IP 属于哪一个子网号,通过 IP & 子网掩u i K i u ;码 = 该 IP 对应的子网} e , b w C , i。子网掩码的组成特点如下所示:

  • 1)、与 IP 地址一样,都是32位
  • 2)、由连续的1和连续的0组成
  • 3)、某一个子网的子网掩码L & P J F % `具备网络号位数个连续的1

例如 A、B、C 类O r ] K 8 Q 4 v的子网掩码地址:A类:255.0.0.0,B类:255.255.0.0,C类:255.255.255.0

无分类编址 CIDR

  • 1)、CIDR 中没有 A、B、C 类网络号 和 子网划分的概念
  • 2)、CIDR 将 网络前缀 相同的 IP 地址称为一个 CIDR 地址块
  • 3)、网络前缀是任意位数的
  • 4)、相比原来子网划分更加灵活

CIDR 使用! S e J了斜线记法,例如:193.10.10.129/25 表示网络号为 25 位,主机号为 7位。一般家里都是使用 /24 的 CIDR,此时整个网络里面的第一个地址为 192.168.0.1,往往就是私网的出口地址。例如:家里面s 2 B ? N $的电脑连) t +接 WIFI,WIFI 路由器的地址就是 192.16B , 5 g s n l #8.0.1,而 192.168.0.255 就是广播地址。

loopback 是什么?

即环回接口,通常会被分配到 127.0.0.1 这个地址,它用于本机内部通Z z $ 4 X信,b j i f J d w d经过内核处理后直接返回,不会再任何. V q网络中出现

某公司总R 5 H B @ F ^ m共有 200 名, $ ` 2 & I f D L员工,M / H ! d需要拆分成两个部分,每个部分使用一个小型网络,如何使用 Cp X h wIDR 进行划分?

可以使用一个 /24 作为一个中型网络(在 CIDR 中被称为超网),旗下有两个 /25 作为一个小型网络(在 CIDR 中被称为子网)。

3、ARP 协议与 RARP 协议

在 IP 数据的转发过程中,A 将 IP 数据报交给数据链路层,并告知其目的 MAC 地址是 E。这里 A 是如何知道目的 MAC 地址是 E 的呢?

1)、ARP(Address Resolu` f J s . 7 { Jtion Protoco? V ] 8 U Q Z #l)地址解析协议

ARP 协议将网络层 IP 32位地址转换为数据链路层 MAC 48位地址

ARP 缓存池表

缓存了 IP 地址到硬件+ V X *地址之间的映射关系。有缓存时直接从缓存中取出即可,没有缓存时则会和 MAC 地址表获取地址时使用的广播@ , ` i } I Z形式类似,即

  • 1)、E 检查 MACs u = 地址表,发现没有 C 的信息
  • 2)、E 将广播 A 的数据包到除 A 以外的端口
  • 3)、E 将收到来自 B、C 的回应,并将地址记录

ARP 缓存是 ARP 协议和 RARP 协议运行的关键。此外,AR3 % [ F * u ?P 缓存表中的记录并不是永久有效的,有一定的期限

查看 ARP 缓存表

使用 arp -a 命令,如下所示:

quchao@quchaodeMacBook-Pro EMC-MBANK-ANDROID % arp -a
? (22.1.253.254) at 0:10:db:ff:10:0 on en0 ifscope [ethernet]
? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [eth8 Y & rernet]
? (239.255g 8 ` c c.255.250) at 1:0:5e:7f:ff:fa on en0 ifsc U e s I { O ope perman; 5 y z o ] yent [et! r N # P {hernet]

ARP 协议

ARP 协议被直接封装在了数据链路层中的数据帧里面T X N r v J ;

既然 ARP 协议是直接被封装在数据链路层中的数据帧里面的,那么为B G t & o d ;什么它是属于网络层的内容?

主要是因为 ARP 协议使用到了网络层的 IP 地址

ARP 协议内容

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

2Y u d 7 Y /)、RARP(Reverse Ade E W y ? G Wdress Resolutioni Protocof Z y b ; ? `l)逆地址解析协议

  • 1)、将数据链路层 MAC 48位地址转换为网络层 IP 32位地址
  • 2)、除了类型 8035 标识为 RARP 协议,其它内容与 ARP 协议类似

3)、小结

  • RARP 协议与 ARP 协议是 TCP/IP 协议栈里面的基础协议,它们的操作对程序员是透明的。
  • 理解它们有助于我们理解网络分层的细节。
  • 它们是协调数据链路层和网络层配合x s ) ~ V t z = w工作的重要协议

4、网I w u (络地址转换 NAT(Network Address] [ K 5 | 1 2 k TranslatiB : ` z q Jonn) 技术

不改变 IP 地址的网关,我们称为转发网关;改变 IP 地址的网关,我们称为 NAT 网关n i t ]

为什么要使用 NAT?

  • 1)、IPvX U w w4 最多只有40+亿个 IP 地址
  • 2)、早期 IP 地址的不合理规划导致 IP 号浪费

1)、内网地址

特点

  • 1)、内部机构使用。
  • 2)、避免与外网地址重复。

三类内网地址

  • A 类:10.0.0.0~10.255.255.255(支持千万数量级设备)
  • B 类:172.16@ P f ? n N 1.0.0~172.31.255.255(支持百万数据级设备)
  • C 类:192.168.0.0~19) 1 / 62.168.255.255(支持万数量级设备)

对于公司,它可以在外部使用全球唯一的外网 IP 地/ e n M ( $ P { c址,通常在内部使用一个 B 类内网地址即可。

同理,对于家庭可以在外部使用全球c T 1 ^ 6 D唯一的外网 IP 地址,通常在内部使用一个 C 类内网地址即可。

问题:内网的多个设备使用同一个外网 IP 请求外网服务,外部是怎么样才能知道是哪一个内网设备请% V T i求的呢?

使用 NAT ,它用于多个主机通过一个公有 IP 访问互联网的私有网络,并减缓了 IP 地址的消耗,但是增加了网络通信的复杂度

2)、外网地址

  • 全球范围使用。
  • 全球公网唯一。

3)、端口映射

例如如A ^ l ( q 4 8下两个 NAT 转换过程:发送数据时,A 设备内网地址和端口号 =&gW 6 7 0t; 外网地址与端口) + q ^ w c A )号:192.168.2.11:666e C O r : Y C w6 => 173.21.59.10:16666,B 设备内X z x 1 0 } 4 j M网地址和端口号 => 外网地址与端口号:192.168.2.10:7777 => 173.21.59.10:1777N K k Q d q W7。

由于同时转换了 Port ,即进行了7 @ ( 端口映射,NAT 也可称为 NA(P)T

5、ICMP(Internet Control Message Protocol)协议

1)、ICMP 协议拆解

功能

ICMP 协议主: c Q z X a s 2 d要是用于 辅助 IP 协议发送与接收数据的,x C | 3 # C它可以报告错误信息或异常情况

ICMP 报文结构

ICMP 协议被封装在 IP 数据报的数据之中,其也分为 报文首部与报文数据。如果需要使用 IE ~ { pCMP 协议,则需要在 IP 协议首部的8位协议中写入1,以表明 IP 数据所携带的具体数据是 ICMP 协议的

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

类型

1、差错报告报文

差错报告报文具体分为 x y k f种类型,而 大部i : `分的报文类型是由类型的值和具体代码组成的。具体如下图所示:

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

2、询问报文

询问报文具体分为 两类,它仅仅是由 类型的值 决定的。具体如下图所示:

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

常用的 ping 就是查询报文,是一种主动请求并且获得主动应b k L 4 o答的 ICMP 查询报文,~ h b + t如下:

  • ICMP Ep C M d A J , wCHO REQUESTZ对 ping 的主动请求进行网络抓包* – z F t b
  • ICMP ECHO REPLY主动请求的回复

所以,ping 发的包也是符合 ICMP 格式的,仅仅增加了一些自己的格式。如下所示:N U N

  • 1)、标识符:派出去两队侦察兵,一队是侦查战况的,一队是去查找水源的,要有个标识才能区分
  • 2)、序号:派出去的侦察兵,都要进行编号,便于知道前线的战况
  • 3)、发送请求时? d d / r ~ / M间值:存放在选项数据中,用来计算往返时间和路程的长短

ping 命令执行时,源主机会构建一个 Ii k ECMP 请求数据包,其中有两个最重要的字段,如下:

  • 1)、类型:对于请求数据包,此值为8
  • 2)、顺序号:区分连续 ping 时发出的多个请求数据包。每发出一个请求数据包,顺序号会自动加1

2)、ICMP 报文的应用

Ping 应用

例如] L W _ ping www.wanandorid.com 网站,如下所示:

quchao@quchaodeMacBook-Pro cmmp-cor( ? ^ , v { +e-client-android % ping www.wa# E h { 4nandroid.com
PING www.wanandroid.com (47.104.74.169): 56 data bytes
64 bytes from 47.104.74.169: iv _ x = 5 P 7 m Tcmp_seq=0 ttl=51 time=51.877 ms
64 b@ j X { , iytes from 47.104.74.169: icmp_seq=1 ttl=517 2 o : 4  8 time=52.41b Y L O6 m % _ * Z C s
64 bytes from 47.104.74.169: icmp_seq=2 ttl=51 time=48.942 ms
64 bytes from 47.104.74.169: icmp_seq=3 ttl=51 time=45.816 ms
64 bytes from 47.104.74.169: ic, v 6 D 2 X { k xmp_seq=4 ttl=51 time=48.336b X K z ms
64 bytes from 47.104.74.16G P L & j9: icmp_seq=5 ttl=51 time=42.358 ms
64 bytes from 47.104.74.169: icmp_seq=6 ttl=51 time=49.428 mi - h } + ~s
64 bytes from 47.104.74.169: icmp_seq=7 ttl=51 time=41.963 mv % F Os

使用 Ping 命令对网络故障进行排查

遇到网络不通的问题时,除了直接 pin/ ` i p 3 a .g 目标 IP 地址,头脑中年还应该有一个清晰的网络拓扑图,并且需要清楚地知道一个包从源地址传到目标地址要经过哪些设备,然后逐个 ping 中间的这些B – v 1 S – (设备或机器,通b A G 9 Y E常的排查步骤如下所示:

  • 1)、ping 回+ ? * t ~ K x 3环地址 127.0.0.1,` Y 5 w ( H V不通,说明计算机使用的协议栈有问J / a 4 e z题,需要重装系统或协议栈
  • 2)、Ping 网关地址(路由地址),内网 ping 192.168.0.1/ 192.168.1.1,通,说明本机到路由器的地址是I ? g ; 9 V .通的。不通,则说明 WIFI、网线是有问题的; 6 2 L b . &
  • 3)、Ping 远端地址 ping www.wa; X P K P Q Znandroid.com,不通,则说明家中到 ISP 的网络之间是有故障的。这个时候就要从电信、联通、移动等 ISP 来排查问题了

此外,除了 p7 r | P V )ing 之! L J N H I 5外,我们还可以通过 tcpdump -i eth0 icmp查看发出的包有没有到达某个点,以及回复的包到达了哪个点,以便更容易推断出错的位置

ping 不同一定就代表网– ^ 7 7 D j k N络不通吗?

不是,如果不在我们的控制范围内, E | [ 9很多中间设备都是禁止 ping 的,但是 ping 不通不x g # L g 1代表网络不通。这个时候就要使用 Telnet,通过其他协议来测试网络是否畅通。

Traceoute 应用

用于探测 IP 数据报在网络中走O 3 ` * U T ( / B过的路径

在 IP 数据报的首部中,有一个8位的生存时间 TTL,它表示了 IP 数据报文在网络中的寿命,每经过一个设备,TTL 减1,当 TTL = 0时,网络设备必须丢弃该报文,并会I 8 : * 7 5发送 ICMP 终点不可达差错报文

而 Traceoutev 2 X U 则巧妙地应用了 ICMP 终点不可达差错报文与 TTL 机制,为了探测 IP 数据报文走过的路径,它会发送一个 UDP 数据包。将 TTL 设置为1,一旦遇到一个路由器,它就会牺牲了。接着返^ Z k ) S 0回一个 ICMP 包,就是网络差错包,类型是时间超时,这样就能知道一个路由器有多远。具体机制如下所示:

  • 1)、首先,会封装一个 TTL 为1的数据报文,当到达第一个T C x J & : y ! a网络之后,TTL 会减为0,第一个网络会发现 Tp k %TL 减为0了,此时就会往源主机发送 ICMP 终点不可达的差错报文。这i Y s U 9个时候源主机就会把第一个网络的 IP 地址记录下来
  • 2)、然后,会封装一个 TTL 为2的数据报文,当到达第二个网络之后,TTL 会O D u Z s减为0,第二个网络会发现 TTL 减为0了,x E ~ $ | Y ,此时就会往源主机发送 IC7 ( vMP 终点不可达的差错报文。这个时候源主机就会把第二个网络的 IP 地址记录下来
  • 3)9 + V 7 n G| , M _ u面按 TTL + 1,到达的网% _ B y L x 8 P络次序 + 1的规律进行,直到到达目的主机,最后得到目的主机的 IP 地址

这样,源主机就s u X N d ^ M B Y接收到了所有的路径信息,就可以输出该数据报在网络中的路径了。tra/ 7 /ceroute 命令的使用示例如下所示:

tracert github.com (Windows 为 trace8 T L 0 _ n P F 0rt github.com)
quchao@q@ S 5uchaodeMacBook-Pro cmmp-core-client-android % traceroute github.com
traceroute to github.com (13.2w = S } I & n d k50.177.22T H ^ T t o P #3), 64 hops maxS / 6 B f u u, 52 byte packets
1  22.4.93.254 (22.4.93.254)  11.676 ms  7.331 ms  9.620 ms
2  59.G w 8 / Y40.180.129 (D , L a59.40.180.129)K l ? 3 _ 2 &  977.679 ms  44G y K ; 80.943 ms  10.672 ms
3  49.186.37.59Z 3 g f # ` d T C.broad.dg{ F @ _ P M i f !.gd.dynamic.163data.com.cn (59.37R f l N O.186.49)I ) ^ ) ; A - u  9.207 ms  12.436 ms  10.636 ms
4  125.176.37.59.broad.dg.gd.dynamic.163data.com.cn (59.37.176.125)  13.202 ms  10.292 ms  28.478 ms
5  183.56.65.6 (183.56.65.6)( h | & Y ; V  11+ c 9 p _ Q 4.763 ms  9.236 ms
18H s F = R @ E ; #3.56.65.18 (183.56.65.18)  11.392 ms
6  202.97] Q D &  _ r u.94.134 (202.97.94.134)  18.357 ms
202.97.94.150 (202.97.94.150)  18.175 ms
202.97.94.134 (202.K g 097.94.134)  36.600 ms
7  202.97.94.98 (202.97.94.98~ R {  J E)  245.161 ms
202.97.12.29 (202.97.12.29)  19.504 mb 2 o ] ?s
202.97.12.41 (202.97.12.41)  22.256 ms

为什么查找一个 X l / n h Q IP 地址时可能会看不到中间有些H i q V s . U . l路由器的信息?

因为有的路由器根r E ? [ 5本不会返回这个 ICMP 包J W C N P N

6、路由

1)、路由简介

路由表包括了 目的 IP 地址与下一跳 IP 地址的映射关系

自治系统(Autonomous System)

  • 一个自治系统 AS 是处于一个管理机构下的网络设备群。
  • AS 内部网络自行管理,并提供一个或多个出入口。Y t d [ S

从网络的分级层级来看,每一个主干 ISu x b eP 都可以认为是一个主干 AS,每一个地区 ISP 都可以认为是一个地区 AS,而每一个公司、校园、家庭都可以认为是一个小的 ASY C = J X B 5 8

2)、路由协议

  • e . I N l q * E治系统内部路由的协议:内部网关协议(RIP、OSP] ) [ @ } _
  • ] 9 s F . 7 ? #治系统外– z C N 3部路由的协议:外部网关协议^ . B(BGP)

例如家庭 AS1 与公司 AS2 它们直接使用的6 s [网关协议示L 2 L意图如下所示:

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

我们可以把网络拓扑图转换为图,其中

  • 每一个顶点表示一个网络、路由器或计算机
  • 每一条边表示一条网络路径

M _ F W ? } t I z由算法的本质即图论的算法,但由于复杂的网络环境,所以路由算法比图论算法要更加复杂

1 M p L &何设计一个好的路由算法?

d i v t N }

  • 1)、正确、完整:算法是正确与完整的。
  • 2)、计算简单:算法在计算上应该尽可能地简单。
  • 3)、适应变化:算法可以适应网络中的各种变化。
  • 4)、稳定、公平I | 2 9 a N ; e:算法是稳定与公布的。

1、内部网关路由协议之 RIP(Routinu 9 Yg Information Protocol) 协议

距离矢量(DV)算法
  • 1)、每一个节点使用两个向量 Di 和 Si
  • 2)、Di 描述的是当前节点到别的节点的距离
  • 3)、Si 描述的是当前节点到别的节点的下一节点
  • 4)、首先,每一个节点会与相邻的节点交换向量? + q i Di 和 Si 的信息
  • 5)、每一个节点根据交换的信息更新自己的节点信息Q Q r ^ H 0:首先运算,然后把当前计算的结果和距离矢量进行比较,如u R 6 o ; I % L l果距离更小的话,则更新自己的距离矢量
RIP 协议的特点
  • 1)b ( z G ) %RIP 协议是使用 DV 算法的一种路由协议
  • 2)、* @ g ] J o v v把网络条数(hop)作为 DV 算法的距离_ K N C 7 E
  • 3)、1 5 7 q 8 P & 8RIP 协议每隔30s交换一次路由信息
  • 4)、RIP 协4 ? /议认为跳数 > 15 的路由则为不可达路由
RIP 协议的过程
  • 1、路由器初始化路由信息(两个向量 D] k c 6 4i 和 Si)$ ~ v A %
  • 2、对相邻路W { A Q O = #由器 X 发过来的信息,对信息的内容进行修改

    • 1)、检索本地路由,将Z F j l ]信息中新的路由插入到路由* x ^ S L @表里面
    • 2)、检索本地路由,对于下一跳为 X 的,更新为修改后的信息5 t z n ; r k {
    • 3)、检索本地路由,对比相同目的的距离,如果新信息的距离更z G w | , i 3 3 S小,则更新路由表
  • 3、如果3分钟没有S U u b n z 8 ^收到相邻的路由信息,则把相邻路由设置为不可达(16跳)
RIP 协议的优势

实现简单? ~ . 5 A | _,开= g n R C销很小

RIP 协议的弊端

假设有一个 A-# 0 a % | AB-C 的链路,假如 A 路由节点出现问题无法使用,那么 B、C 就会互相询问,知道它们各自的跳数一直累加到超过 15 跳。

  • 1)、随便相信相D Q 5 # ) O b . @邻节点
  • 2)、1 7 u! F w f 1己不思w C v }考,视野局限,导致故障信息传递慢
  • 3)、限制了网络的规模,只能在较小的网络中使用,因为它把跳数大于15的认为不可达

2、内部网关路由协议之 OSPF 协议

链路状态(LS)协议

与 RIP 协议的不同:

  • 1)、向所有的路由器发送消息
  • 2)、C P # ! = Z +息描述该路由器与相邻路由器的链路状态
  • 3)、只有链路状态发送变化时,才发送更新消息

因此,可以看到 LS 协议解决了 RIP 协议 随便相信隔壁路由、视野不够的问题

Dijkstra 算法

特点:

  • 1)、Dijistra 算法是著名的图算法,它解决的是计~ / w算最短路径的问题
  • 2)、解决有权图从一个节点到其它节点的最短路径问题
  • 3)、以起始点为中心,向外层层扩展

过程:

  • 1、初始化两个集合(S,U)(S 为只有初始顶点点 A 的集合,U 为其它顶点集合)
  • 2、如果 U 不为空,o % i | 0 t a S u对 U 集合顶点进行距离的排序,并取出距1 V P r t R离 A 最近的一个顶点 D

    • 1)、将顶点 D 纳入 S 集合
    • 2)、更新通过顶点 D 到达 K : 2 f W U 集合所有点的距l 2 % Z离(如果距离更小则更新,否则不更新)
    • 3)、重复2步骤
  • 3、直到 U 集合为空,算法完成
OSPF(Open Shortest Paj 3 $ ] b 5 Y Bth First) 开放最短路径优先协议的过程

核心是 Dijkstra 算法。

  • 1)、向所有的路由器发送消息,因此每一个路由器都可以获得网络中的所有信息,并因此得到完整的网络拓扑(链路状态数据库)。而且,每一个路由器都可以使用 Dijik^ { x d [stra 算法找到自己到达某一个e J ] Q + y顶点的最短路径
  • 2)、消息描述该路由器与相邻路由器的链路状态(即距离、时延、带宽),因此 OSPF 协议比 RIP 协议更加客观与先进
  • 3)、, c B b #有链路状态发生变化时,才发送更新信息,这使得路由器减少了数据的交换,能够更快地收敛

然后,我们再来回顾一下 完整过程

  • 首先,路由器接入网络
  • 然后u ] { D ] q路由器向邻居发出问候信息V W : P k =,以此来确认可达性
  • 确认后,x 9 h $ v B M t l会与邻居交流链路状态数据库,并将链路状态数据库都同步为最新的
  • 最后,路由% p & l z k $ &器会广播和更新未知路由
五种消息类型
  • 1; } & D ] F j)、问候消息(Hello):测试自身与相邻路由器的可达性
  • 2)k } 4 H $ 8 l % _链路状态数据库描述| ~ Q , o o r g信息:用于向隔壁路由器发送自己的链路状态的一些简单的描述信息
  • 3)、链路状态请求信息:用于向隔壁路由器请求链路状态数据
  • 4)、链路状态更新信息:使用最频繁也是最重要的信息
  • 5)、链路状态确认信息:用于对链路更新的一个确认
RIP 协议 与 OSPF 协议的对比
RIP OSPF
从邻居看网络 整个网络的拓扑
在路由器之间累加距离 Dijkstra 算d % 3法计算最短路径
频繁F o 0 o 、周期更新,收敛很慢 状态变化更C j f l c A b % F新,收敛很快
路由间拷贝路由信息 路由间传递链路状态,自行计{ D 算路径
OSPF 的缺点

虽然 OSPF 协议解决了 RIP 协议的问题,对整个网络有了一定的全局观,但是 OSPF 协议本身较为复杂,实现开销较大

3)、外部网关路由协议之 BGP(Border Gateway protocol) 边际网关协议(很复杂、了解即可)

  • BGP 协议是运行在 AS(自治系统)之间的一种协议。
  • BGP 协议是因为计算机网络中人为因素的复杂性而提出的,在实际的网络环境中,数据的传输还受* + K H E .整治、安全等因素的影响。

为什么要在 AS 之间使用 BGP 协议呢?

  • 1)、互联网的规模很大,这使得J [ #在 AS 之间选择路由非常困难,如果我们在 AS 之间选择链路状态协议,每个路由器都需要存储很多链路状态的数据,并且如果使用 Diji{ $ e j Q S r } Gkstra 算法,运行会很慢,因此需要使用 BGP 协议
  • 2)、 j U aAS 内部使用不同的路由协议,例如在一个 AS 中使用了 RIP 协议,而另一个 AS 中则使用了 OSPF 协议。3 & 5对于使用不& 6 B ~ 2 ? : e同的协议的路由器,在它们之间是无法通信的,因此它们之间便需要借助 BGP 协议来进行协调
  • 3)、AS 之间需要考虑除网络特性之外的一些因素,例k , (如 政治、安全

由于各个 AS (国家、地区)之间政策、安全等原因,BGP 仅能够找到一个到底目的地的比较好的路由。而 AS 之间是通过 BN ` ] O g # /GP 发言人来进行路由信息的交换的

九、数据链路层

1、主要功t W C V 5 4 –

1)、封装成帧

什么是数据帧?

  • 帧是数据链路层数据的基本单位
  • 发送端在网络层的一段数据前后添加特定标记形成帧
  • } S K I接收端根据前后特定标记识别出帧

数据帧结构

  • 网络层将 IP 数据报 传送到 数据链路层时,在数据链路层会给 I3 L l # 8 ~ xP` – u ` 数据报 的前后添加 帧首部与帧尾部b @ F M d 8 u
  • 帧首部与尾部都是特定的控制字符,即一些特定的比特流,例如帧首部的 SOH:00000001,帧尾部的EOT:00000100

如果数据里面刚好有这些比特流怎么办?

2)、透明传输

透明传输是什么?

  • 1)、计算机领域中非常重要的一个术语。例如对于^ $ @ W ] E !数据链路层来说,物理层所做的工作就是透明的,物理层只需向外暴露接口即可
  • 2)、一种实际存在的事物但是看起来像不存在一样
  • 3)、即使控制字符在帧数据中,但是要当做不存在一样去处理

透明传输的应用

如果数据里面刚好有这些控制字符该怎么办?

在该控制字符前面加上一个 ESC 转义字符,如0 D q h F 2 k果数据中也包含有 ESC 转义字符时,则可以在前面再加一个 ESC 转义字符。而数据链路层的转义字符可以l H j z C X类比与编程语言中的转义字符。

3)、差错监测

为什么要进行差错监测?

因此物理层只管传输比特流,无法控制是否出错。所以数据链路层需要负责 差错监测 的工作G u X ` Y #

差错监测的方| q V c

1、奇偶校验码

在比特流的后面加上 奇偶校验码(1l ^ H Q I # K V/0).例如:00110100 => 所有位数和为3,是基数,在该比特流后面加1。(偶数加0)

它的局限性在于 当比特流中出错两位时,无法检测出错误

2、CRC(循环冗余校验码)
  • 1)、一种根e * 5 Q Z 9据传输或保存的数据而产生固定位数校验_ % 0 0码的方式
  • 2)、检测数据传输或保存后可能出现的错误
  • 3)、生成的数字计算出来并且附加到数据后面

CRC 使用~ N f模 2 除法,即:当最高位为0时,则认为余数不够除,取商为0

发送端增加校验码:

  • 1)、选定一个用于校验的多项式 G(x)(例如:CRC-7、CRC-8 就代表 G(x) 中p o C s ) F b D最高位为8),并在数据尾部添加 r 个0
  • 2)、将添加 r 个0后的数据,使用模 2 除法除以多项式` # [ 3 $ a 6 &的位串
  • 3)、将得到的余数填充在原数据 r 个0的位置得到可校验的位串

接收端验证校验码:

  • 接收数据除以 G(x) 的位串,如果余数为0,则校验成功

缺点

  • 1)、位串的阶数 r 越大,CRC 的错误检测能: ^ f P力越强。(阶数为1时,退f Z % K 2 `化为奇偶校验码)
  • 2)、数据链路层只进行数据的检测,不进行纠正,如果检测出错误数据会把该数据丢弃

2、最大传输单元 MTU(Maximum Transmission Unit 6 2 Y | ;t)

1)、MTU

为什么要设计出 MTU?

数据帧过大或过小都会影响传输的效率。例如会增加数据传输时的总时延。以太网 MTU 一般为 1500 字节。

2)、路径 MTU

由传输链路中所有 MTU 中的最小 MTU 决定。

3、以太网协议

1)、MA3 . rC 地址(物理地址、硬件地址)

特点

  • 每一个设备都拥有唯一的 MAC 地址。
  • MAC 地址共 48 位,使用十六进制表示。例如:30-B4-9E-ED-85-DA 。

d * *看计算机的 MAC 地址5 Z ! p K j , B

  • MAC:ifconfig
  • Windows:ipconfig /all

MAC 地址表

存有 MAC 地址和硬件接口的映射关系。其中每一个 MAC 地址都有与之对应的硬件接口

2)、协议内容

特点

  • 一种使用广为使用的局域网技术。
  • 一种m , m a y x应用于数据链路层的协议。
  • 借助其可以完成相邻设备间的数据帧传输。

数据格p W 0 v

单位为 字节

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

其中的帧数据具体是什么数据?

{ O }

  • c S x – |果是网络层的 IP 数据,则 类型为 0800,帧数据 = IP 数据报
  • 如果是 ARP 请求/应答,则 类型_ g t为 0806,帧数据 = ARP 请. } 9 q $ K Z求/应答j $ o(28字节) + PAD(18字节)
  • 如果是 RARP 请求/应答,则 类型为 8035,O E Q } H ^帧数据 = RARP 请U f T ; y = +求/应答(28字节) + PADz C o F ; Y . u +(18字节)

数据传输过程

  • 1)、设备 A 通过网卡发出数据帧
  • 2)、数据帧到达路由器,路@ q x { @ A由器取出前6字节,即目的设备 B 的q Q U $ MAC 地址
  • 3)、路由器匹配 MAC 地址表,找到目的设备 B 的网络接口
  • 4)、路由器往该网络接口发送数据帧

: J 9

如果 MAC 地址并不知道 B 的硬件接口,路由器如何处理?

  • 1)、E 检查 MAC 地址表,发现没有 C 的信息。
  • 2)、E 将广播 A 的I Z R * 数据包到除 A 以外的端口。
  • 3)、E 将收到来自 B、C 的回应,并将地址记录。

十、物理层

1、作用

  • 1)、连接不同的物理设备
  • 2)、传输比特流

什么是比特流?

由高低电频表e V R 8 } G Y 3 J示的数据流! ( L = G .,1 => 高电频,0 => 低电频,例如由比特流 100110101010 转化成的数字信号如下图所示:

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

2、常见的传输介质

1)、有线介f L S k

1、双绞线

无屏蔽双绞线

从外至内由 聚氯乙烯套层、绝缘层、铜线 组成。

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

不同于 无屏蔽双绞线,H , * 7 / C其在第二层 加了屏蔽层

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

2、同轴电缆

从外至内由 绝缘保护套层、外导体屏蔽层、绝缘层g O % 6、内导体 组成。

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

3、光纤} T c k *

光纤由 包层(低折射率的媒体)、纤芯(高折射率的媒体) 组成。

2)、无线介质

  • 1)、红外线
  • 2)、无线(例如 4G、WIFI)
  • 3)、激光

3、信道基I b ~ O ? 7 ,本概念

  • 信道是往一个方向Y e G b o 1 [ * j传送信息的媒体。
  • 一条通信电路包含一个接受信道和一个发送信道。

如何处理发送与接受出现冲突的情况?9 g $ F b = 8 [

. R L p #道的分类

  • 1)、单工信道:只能往一个方& _ 3 | k ,向通信,没有反方向反馈的信息。例如 有线电视、无线电收音机等等
  • 2)、半双工信道:双方都可以发送和接受信息。不能双方同时发送,也不能同时0 Z N j c [接受
  • 32 m $ y 1 7 7 Q)、全双工– A p D 4 D信道:双方都可以同时发送和接收信息。例如网线、网络等等

4、分用与复用

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

复用的分类

  • 1)、频分复用
  • 2)、时分Z p i复用
  • 3)、波分复用
  • 4)、码分复x n U C ^ /

十一、总结

计算机网络是一个需要我们持续深入探索的一门基础学科,在本篇中我们全面了解了计算机网络的核心基础知识,这为我们之后f [ 8 E q探讨移动网络优化相关的问题打下了一定的网络基础。网络优化之旅才刚刚开始~

关于计算机网络的高频问题可以 查看此处。

参考链接:


  • 1、慕课网之《编程必备基础 计算机组P } # d o H !成原理+操作系统+计算机网络》网络部分 9 – 13章
  • 2、《趣谈网络协议》1 – 5章
  • 3、《计算机网络 自顶向下方法》前 6 章
  • 4、(建议精读)HTTP灵魂之问,巩固你的 HTTP 知识q | R ,体系
  • 5、(建议收藏)TCP协议灵魂之问,巩固你的网路底层基础
  • 6、一位前端小姐姐的五万字面试宝典
  • 7、面试带你飞:这是一份全面e Z 4的 计算机网络基础 总结攻略
  • 8、JavaGuide – 网络
  • 9、interview – 网络
  • 10、总结了17年初到18年初百V B $ s ~场前端面试的面试经验(含答案)
  • 11、CS-Notes – 网络

Contanctx ! v x g u ( y I Me

● 微信:

欢迎关注我的微信:bcce5360

● 微信群:

由于微信群已超过 200 人,麻烦大家想进微信群的朋友们,加我微信拉你进群。

● QQ群:

2千人QQ群,Awesome-Android学习交流群,QQ群号:959936182, 欢迎大家加入~

AboV h U v } E V qut me

  • Email: chao.V c C # Aqu521@gmail.com

  • Blog: jsonchao.github.io/

  • 掘金 1 0 e m %: jueL } / :jin.im/user/5a3ba9…

很感谢您阅读这篇文章,希望您能将它分享给您的朋友或技术群,这对我意& . o 7 ` 8 ~义重大。

希望我们能I o 6 { L成为朋友,在 Github、掘金上一起分享知识。

发表评论

提供最优质的资源集合

立即查看 了解详情