Bonky
Neither beliver nor reject anything, because any other person has rejected of believed it. Heaven has given you a mind for judging truth and error, Use it.
By Thomas Jefferson

计算机网络 – 网络层

网络层

虚拟互连网络

虚电路 采用了电话通讯的思想。进行通信时,先建立连接,以预留双方通信所需的一切网络资源。然后双方就沿着已建立的虚电路发送分组。这样的分组的首部不需要填写完整的目的主机地址,而只需要填写这条虚电路的编号(一个不大的整数),因而减少了分组的开销。在通信结束后要释放建立的虚电路。(虚电路还是存储转发,还需要算发送时延,只不过首部很小可以忽略不计)

注意:虚电路表示这只是一条逻辑上的连接,而并不是正建立了一条物理连接,而电路交换是先建立了一条真正的连接。只有在数据传输的时候,才占用这条虚电路,当没有传输时,这些资源可被其他用户使用。而电路交换是需要一直占用,即便两者都没有说话。

IP

  • 地址解析协议 ARP (Address Resolution Protocol)
  • 网际控制报文协议 ICMP (Internet Control Message Protocol)
  • 网际组管理协议 IGMP (Internet Group Management Protocol)

IP地址

整个的互联网就是一个单一的、抽象的网络.IP地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的 32 位的标识符.IP地址的结构使我们可以在互联网上很方便地进行寻址.IP地址现在由互联网名字和数字分配机构ICANN ( Internet Corporation for Assigned Names and Numbers)进行分配。一个IP地址在整个互联网范围内是唯一的。

一般来说 ip地址 定义为 {<网络号>, <主机号>}

  • A类地址,ip地址第一字节从0到127。A类地址分配给具有大量主机的网络
  • B类地址,ip地址第一字节从128到191。B类地址分配给中型网络
  • C类地址,ip地址第一字节从192到223。C类地址一般给局域网较大的网络,如校园网和公司网
  • D类地址,ip第一位从224到239,用于多播(一对多通信)
  • E类地址,保留为以后用。

常用的三类IP地址

推荐阅读:https://www.zhihu.com/question/37927675

A类地址的网络号字段占1个字节,只有7位可供使用(该字段的第一位已固定为0),但可指派的网络号是126个(即127-2),减2的原因是:

  1. IP地址中的全0表示“这个(this)”,网络号字段为全0的IP地址是个保留地址,意思是“本网络”:
  2. 网络号为127 保留作为本地软件环回测试(loopback test)本主机的进程之间的通信之用。若主机发送一个目的地址为环回地址(例如127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送到任何网络。目的地址为环回地址的IP数据报永远不会出现在任何网络上,因为网络号为127的地址根本不是一个网络地址。

其中全0的主机号字段表示该IP地址是“本主机”所连接到的单个网络地址(例如,一主机的IP地址为5.6.7.8,则该主机所在的网络地址就是5.0.0.0),而全1表示“所有的(all)”,因此全1的主机号字段表示该网络上的所有主机。

B类网络地址128.0.x.x是不指派的,而可以指派的B类最小网络地址是128.1.0.0 [COME06] (教材的说法),因为net全0表示本网络,所以当时设计的时候去掉了128.0.x.x = 10000000.00000000.x.x,但实际上由于ipv4 地址紧缺,128.0.x.x已经在使用了。

C类地址有3个字节的网络号字段,最前面的3位是(110),还有21位可以进行分配.C类网络地址192.0.0.x也是不指派的,可以指派的C类最小网络地址是192.0.1.0 [COME06]。因为 192.0.0.x 由于ip 实际还是很少(也才256个),所以和B类地址不一样,现在还是保留了下来。

对于局域网有

A类地址10.x.x.x
B类地址172.16.x.x172.31.x.x
C类地址192.168.x.x192.168.x.x

另外还有一些特殊的地址

IP地址的特点

  • IP地址分成网络号和主机号两个等级的好处是:
    • 第一, IP地址管理机构在分配IP地址时只分配网络号(第一级),而剩下的主机号(第二级)则由得到该网络号的单位自行分配。这样就方便了IP地址的管理;
    • 第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间以及查找路由表的时间。
  • 实际上IP地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号必须是不同的。这种主机称为多归属主机(也称多穴或者多宿主机,multihomed host)。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的IP地址。这好比一个建筑正好处在北京路和上海路的交叉口上,那么这个建筑就可以拥有两个门牌号码。例如,北京路4号和上海路37号。
  • 按照互联网的观点,一个网络是指具有相同网络号net-id的主机的集合,因此,用转发器或网桥连接起来的若干个局域网仍为一个网络,因为这些局域网都具有同样的网络号。具有不同网络号的局域网必须使用路由器进行互连。(或者说,同一路由器下,网络号相同,可以理解为一个域)

IP地址与硬件地址

因为一个路由器至少要连接两个不同网段的网络,所以它至少具备两个以上端口,而且这两个端口都必须具备自己的MAC地址,才能分别与两边的机器进行通讯。

对外,它需要一个地址让通信商能找到它,从而建立有效的通信路径,保障数据的有效传递。

对内,它需要将外网隔离,控制整个内网的出口,管理内网内部的链接,要于内网每台设备通信,从而也需要一个地址。

所以两个物理地址,让内外网同时工作,这样路由能保证数据传输的时效,保障网络通信速度。

在转发过程中,在首部中的源地址和目的地址始分别是IP,和IP2,而 MAC Frame 每次传输需要丢弃原来的首部和尾部。

ARP协议

ARP的作用是,根据机器 IP 地址,找到其相应的硬件地址。

明明用MAC地址就可以标识电脑,为什么还要发明IP地址
所以如果只有链路层而没有网络层,那么整个通讯就是一张没有路由的大网,一个人找一台主机就要广播给全网主机,这显然是不可能的。网络层就能将链路层的广播域划分开,通过路由表决定数据走向。
ip网络事实上是硬件无关的寻址方式,而mac地址仅仅针对特定硬件类型的网络。ip地址等于国家+城市+分区+门牌号码。有点类似于邮政编码。mac相当于身份证号码。就比如上面送邮件的例子,地址还是广州的地址,但是没有交给邮局送,而是交给了快递,那么经过的中转站和快递的内部站点通信方式和邮局可能完全不一样,但是信件还是被送到了广州的地址。

IP数据报

  1. 版本: 占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。
  2. 首部长度: 占4位,因为IP首部的固定长度是20字节,因此首部长度字段的最小值是5 ,长度1=32位字长,而当首部长度为最大1111时,就表明首部长度达到最大值15个32位字长,即60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。最常用的首部长度是20字节,这时不使用任何选项。
  3. 区分服务: 占8位,用来获得更好的服务。只有在使用区分服务时,这个字段才起作用,在一般的情况下都不使用个字段.
  4. 总长度: 总长度指首部和数据之和的长度,单位为字节 B。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。然而实际上传送这样长的数据报在现实中是极少遇到的。
  5. 标识(identification): 占16位. IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报(并不是序号的功能)。
  6. 标志(flag): 占3位,但目前只有两位有意义
    • 标志字段中的最低位记为MF (More Fragment), MF= 1即表示后面“还有分片”的数据报.MF=0表示这已是若干数据报片中的最后一个标志字段
    • 中间的一位记为DF (Don“t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
  7. 片偏移: 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。

分片实际上是对整个数据部分进行分配。假设一个很长的数据报的头部长为20,MTU为1500,那么实际上我们每1480取一个数据报片,然后分好的数据报片发出去。分片可以发生在源主机和路由器 (因为不同网络的MTU是不同的), 重组只能发生在目的主机.

  1. 生存时间: 占8位,生存时间字段常用的英文缩写是TTL (Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是数据报无限制地在互联网中兜圈子(例如从路由器R→R2→R3→R),因而白白消耗网络资源。最初的设计是以秒作为TTL值的单位。每经过一个路由器时,就把TTL减去数据报在路由器所消耗掉的一段时间。然而随着技术的进步,路由器处理数据报所需的时间都远远小于秒,后来就把TTL字段的功能改为“跳数限制” (但名称不变),路由器在每次转发数据扑之前就把TTL值减1,若TTL值减小到零,就丢弃这个数据报,不再转发。若把TTL的初始信设置为1,就表示这个数据报只能在本局域网中传送。因为这个数据报一传送到局域网上的某个路由器,在被转发之前TTL值就减小到零,因而就会被这个路由器丢弃。
  2. 协议: 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个协议进行处理。

  1. 首部检验和 占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化),不检验数据部分可减少计算的工作量。
  2. 源地址,目的地址: 各占32位
  3. IP 数据报首部的可变部分: IP 数据包可变部分增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。很多路由器都不考虑 IP 首部的选项字段,因此新的 IP 版本 IPv6 就把 IP 数据报的首部长度做成固定的。

IP转发分组

在路由表中,对每一条路由最主要的是以下两个信息:(目的网络地址,下一跳地址),同时,为了减少路由表大小,很多路由器还有默认路由。如果路由表没有就默认转发到目标路由上。

根据以上所述,可归纳出分组转发算法如下:

  1. 从数据报的首部提取目的主机的 IP 地址 D,得出目的网络地址为 N。
  2. 若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付目的主机(这里包括把目的主机地址 D 转换为具体的硬件地址,把数据报封装为 MAC 帧,再发送此帧);否则就是间接交付,执行3。
  3. 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行4。
  4. 若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行5
  5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器:否则,执行6
  6. 报告转发分组出错。

子网和超网

划分子网

划分子网的方法是从网络的主机号借用若干位作为子网号(subnet-id),当然主机号也就相应减少了同样的位数。于是两级 IP 地址在本单位内部就变为三级 IP 地址:网络号、子网号和主机号。也可以用以下记法来表示:

划分子网的作用是什么呢? 划分子网可以将同一个网络划分为多个逻辑不同的子网络, 增加网络的利用率. 打个比方: 假如一班和二班的班长需要教室用来进行开会, 在教室充足的情况下, 我可以给每个班长一个教室. 但不过, 如果我们的教室并不充足, 那么我们可以给两个班长一共一个教室. 但我们需要对每个班的同学要有逻辑上的划分(子网号), 比如一班坐前四拍, 二班坐后四排….

子网掩码

作用是,通过子网掩码,与 IP 地址进行相与运算,得到网络地址。如果为1,相与后还为原样,为0,相与后全部置为0

在表中,子网数是根据子网号subnet-id 计算出来的。若 subnet-id 有 n 位,则共有 2n种可能的排列。除去全 0 和全 1 这两种情况,就得出表中的子网数。

注意,表中的“子网号的位数”中没有 0,1,15 和 16 这四种情况,因为这没有意义。(为0就是没有子网,为1时,有两个子网,分别是0和1,但是子网号不能为全0,1。为16时,没有主机号了。为15时,主机号占1位,为0或者1,同样主机号为全0,1没有意义。)

虽然根据已成为互联网标准协议的 RFC950 文档,子网号不能为全 1 或全 0, 但随着无分类域间路由选择 CIDR 的广泛使用(在 4.3.3 节讨论),现在全 1 和全 0 的子网号也可以使用了,但一定要谨慎使用,要弄清你的路由器所用的路由选择软件是否支持全 0 或全 1 的子网号这种较新的用法。

我们可以看出,若使用较少位数的子网号,则每一个子网上可连接的主机数就较多反之,若使用较多位数的子网号,则子网的数目较多但每个子网上可连接的主机数就较少。因此我们可根据网络的具体情况(一共需要划分多少个子网,每个子网中最多有多少台主机)来选择合适的子网掩码。

总而言之,划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。例如,本来一个 B 类地址最多可连接 65534 台主机,但表 4-6 中任意一行的最后两项的乘积一定小于 65534。


注意这个, 答案是 129.250.[1-16].1129.250.[1-16].254 , 不是到 129.250.[1-16].250 , 尽管每个单位只有250台机器, 但是每个主机选取1到254选取哪一个都可以. 全1为广播地址, 全0代表网络号.

超网 – 无分类编制CIDR

CIDR,全称为 Classless Inter-Domain RoutingCIDR 是与以分类来切割 IP 地址的方式所对应的新方式。

CIDR notation 其实概念也很直白,它不再粗暴的以字节为粒度来切分 IP 地址,而是精确到 bit 位,我们看一个典型的 CIDR notation

注意 IP 地址后面的 /23,这就是 CIDR notation,它表示 IP 地址的前 23 bits 为 Network ID,剩余的 9 bits 为 Host ID。23 并不是 8 的倍数,我们将切分的精读提高到了 bit。我们可以通过简单的位运算,得到具体的 Network IDHost ID,我们将 IP 地址和 /23 先转为二进制:

上面两个二进制进行与操作,我们就可以得到 Network IDHost ID

最长前缀匹配

因为路由表中的每个表项都指定了一个网络,所以一个目的地址可能与多个表项匹配。最明确的一个表项——即子网掩码最长的一个——就叫做最长前缀匹配。

例如,考虑下面这个IPv4的路由表(这里用CIDR来表示):

在要查找地址192.168.20.19的时候,这两个表项都“匹配”。也就是说,两个表项都包含着要查找的地址。这种情况下,前缀最长的路由就是192.168.20.16/28,因为它的子网掩码(/28)比其他表项的掩码(/16)要长,使得它更加明确。

VLSM

可变长子网掩码(VLSM,Variable Length Subnet Mask)是指在同一个网络中可以使用不同的子网掩码。只有支持VLSM的路由协议,如OSPF、 EIGRP才能应用这种策略。

优点:

  1. 使IP地址得到更有效地利用
  2. 可以提高路由汇总能力,隔离与其他路由器的拓扑变化

例子:

有一个IP地址为 192.168.1.0/24的子网, 需要为如图所示的拓扑图用VLSM划分IP地址。 其中路由器RA、RB和 RC所连的LAN包含的 主机数分别为30、20 和10台主机,问如何划分,可以最大程度不浪费IP地址?

路由器每个端口需要分配 IP 地址,而交换机不需要。

然后先从大的开始,然后由大到小依次分配:首先划分 RA,因为 30 台主机,所以至少需要 5 位,所以一开始为 000|00000,然后第二个 RB,也是需要五位,就在前面的网络号加一 ,001|00000,然后划分 RC,先在前面的加一,因为只需要 4 位,需要往后移网络号,即 0100|0000。(为什么不是 0001|0000?因为要和其他的区分,而0001|0000 包括在 RA 的主机,所以不行)。假如还需要分配主机,那就在 RC 子网号 0100 上加一,以此类推。

路由汇总

路由汇总的含义是把一组路由汇聚为一个单个的路由广播。路由汇总的最终结果和最明显的好处是缩小网络上的路由表的尺寸。

下面是一个例子,假如路由表中存储了如下网络:

要计算路由器的汇总路由,需判断这些地址最左边的多少位相同的,即向前推了网络的掩码。由于IP地址172.16.1.0~172.16.5.0 的前21位相同,因此最佳的汇总路由为 172.16.0.0/21

ICMP协议

ICMP 的作用是允许主机或路由器报告差错情况和提供有关异常情况的报告。 ICMP 是互联网的标准协议。ICMP 报文是装在 IP 数据报中,作为其中的数据部分,而是 IP 层的协议。ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。

ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文

ICMP 报文的前 4 个字节是统一的格式,共有三个字段:类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。最后面是数据字段,其长度取决于 ICMP 的类型。下表给出了几种常用的 ICMP 报文类型。

差错报告报文

  • 终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。
  • 时间超过:(1) 当路由器收到生存时间 (TTL) 为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。(2) 当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
  • 参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
  • 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。当主机要发送数据报时,首先是査找主机自己的路由表,看应当从哪一个接口把数据报发送出去。在主机刚开始工作时,一般都在路由表中设置一个默认路由器的 IP 地址。不管数据报要发送到哪个目的地址,都一律先把数据报传送给这个默认路由器,而这个默认路由器知道到每一个目的网络的最佳路由(通过和其他路由器交换路由信息)。如果默认路由器发现主机发往某个目的地址的数据报的最佳路由应当经过网络上的另一个路由器 R 时,就用改变路由报文把这情况告诉主机。于是,该主机就在其路由表中增加一个项目:到某某目的地址应经过路由器 R(而不是默认路由器)。

应用

PING

主机之间的连通性。PING 使用了 ICMP 回送请求与回送回答报文(8或0)。PING 是应用层直接使用网络层 ICMP 的一个例子。它没有通过运输层的 TCPUDP

注意 ping 命令本身相当于一个应用程序,位于应用层,虽然它使用的是 ICMP 协议,就好像HTTP位于应用层,但是也是使用的 TCP 协议。

traceroute

Traceroute 从源主机向目的主机发送一连串的 IP 数据报,数据报中封装的是无法交付的 UDP 用户数据报。第一个数据报 P1 的生存时间 TTL 设置为 1。当 P1 到达路径上的第一个路由器 R1 时,路由器 R1 先收下它,接着把 TTL 的值减 1。由于 TTL 等于零了,R1 就把 P1 丢弃了,并向源主机发送一个 ICMP 时间超过差错报告报文。

源主机接着发送第二个数据报 P2, 并把 TTL 设置为 2。P2 先到达路由器 R1, R1 收下后把 TTL 减 1再转发给路由器 R2R2 接受后减一,发现为零,然后丢弃 P2, 并向源主机发送一个 ICMP 时间超过差错报告报文。这样一直继续下去。当最后一个数据报刚刚到达目的主机时,数据报的 TTL 是 1。主机不转发数据报,也不把 TTL 值减1。但因 P 数据报中封装的是无法交付的运输层的 UDP 用户数据报,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。这样子我们就可以得到路由信息。

注意:我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。

路由选择协议

倘若从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,则只有路由选择算法只有两大类,即静态路由选择策略与动态路由选择策略。

静态路由选择也叫做非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。对于很简单的小网络,完全可以采用静态路由选择,用人工配置每一条路由。

动态路由选择也叫做自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。因此,动态路由选择适用于较复杂的大网络。

路由选择算法

距离-向量路由算法和链路状态路由算法

距离-向量路由算法

在距离-向量路由算法中,所有的结点都定期地将它们整个路由选择表传送给所有与之直接相邻的结点。这种路由选择表包含每条路径的目的地(另一结点)和路径的代价(距离)。

情况一:被通告一条新的路由,该路由在本结点的路由表中不存在,此时本地结点加入这条新的路由。

情况二:通过发送路由信息的结点有一条到达某个目的地的路由,该路由比当前使用的路由有较短的距离(例如,RIP 就是有较小的跳数)。在这种情况下,用经过发送路由信息的结点的新路由替换路由表中到达那个目的地的现有路由。

目前,最常用的距离-向量路由算法是 RIP 算法。它采用“跳数”作为距离的代价。

链路状态路由算法

  1. 主动测试所有邻接结点的状态两个共享一条链接的结点是相邻结点,它们连接到同条链路。
  2. 定期地将链路状态传播给所有其他结点(或称为路由结点)

链路状态路由算法主要有三大特征:

  1. 向本自治系统中的所有路由器发送信息。这里使用的方式是洪泛法。
  2. 发送的信息就是与本路由器相邻的所有路由器的链路状态。
  3. 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送信息。

目前,最常用的链路状态路由算法是 OSPF 算法。

分层次的路由选择协议

分层次使用路由选择协议的理由如下:

  1. 互联网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需的带宽就会使互联网的通信链路饱和。
  2. 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到互联网上。

为此,可以把整个互联网划分为许多较小的自治系统(autonomous system),一般都记为 AS。自治系统 AS 是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。(ISP 就是一个自治系统),所以我们把路由选择协议分为以下两类。

  1. 内部网关协议 IGP (Interior Gateway Protocol) 即在一个自治系统内部使用的路由选择协议,而这与在互联网中的其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多,如 RIPOSPF 协议。
  2. 外部网关协议 EGP (External Gateway Protocol)若源主机和目的主机处在不同的自治系统中(这两个自治系统可能使用不同的内部网关协议),当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议 EGP。目前使用最多的外部网关协议是 BGP 的版本 4 (BGP-4)

自治系统之间的路由选择也叫做域间路由选择(interdomain routing),而在自治系统内部的路由选择叫做域内路由选择(intradomain routing)

RIP协议

RIP 的工作原理

从一路由器到直接连接的网络的距离定义为 1。从一路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。“加 1”是因为到达目的网络后就进行直接交付,而到直接连接的网络的距离已经定义为 1。

RIP 协议的“距离”也称为“跳数”(hop count,因为每经过一个路由器,跳数就加 1。RIP 认为好的路由就是它通过的路由器的数目少,即“距离短”。RIP 允许一条路径最多只能包含 15 个路由器。因此“距离”等于 16 时即相当于不可达。可见 RIP 只适用于小型互联网。

  1. 仅和相邻路由器交换信息。如果两个路由器之间的通信不需要经过另一个路由器,这两个路由器就是相邻的。RIP 协议规定,不相邻的路由器不交换信息。
  2. 路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表。也就是说,交换的信息是:“我到本自治系统中所有网络的(最短)距离,以及到每个网络应经过的下一跳路由器”。
  3. 按固定的时间间隔交换路由信息,例如,每隔 30 秒。然后路由器根据收到的路由信息更新路由表。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。

RIP的收敛存在的问题

初始时 R1 到 C 网络的跳数是 1,路由表中就记录着 1,R2 经过 R1 再到 C 共两跳,因此记录跳数是 2.

现在:

R1C的路径被剪断了,R1可以感受到,于是在自己的路由表中更新为16,表示 “无穷大”,不可达。

这是个坏消息,坏消息传得慢。现在看如何慢。

R1准备在下一个 30 秒内告诉R2这个坏消息,但是R2先把自己的所有信息都告诉了R1,R1一看咦?R2C的跳数是 2,我到R2就一跳,现在虽然我不能直接到C了,那么绕道R2不就可以了吗?说干就干,于是把自己到C的跳数改为3. 好了,真相被谎言掩盖了。开始了二者之间的互捧臭脚时间。

R1R2这个好基友坦白所有的信息,R2看到R1C的距离变为 3 了,R2知道自己是经过R1才到达的C,于是毫不犹豫的改为 4. 下一次再把全部信息告诉R1,R1收到一看,咋回事啊,怎么又加一跳了呢!R2那边发生了什么?但是还是得根据规则,毫不犹豫的修改到 C 的距离跳数。就这样不断增加,直到都为 16,才恍然大悟,原来大家都到不了了啊。

OSPF协议

更多请看:https://zhuanlan.zhihu.com/p/37403700

OSPF是一种链路状态路由算法。其核心思想是通过节点之间交换链路状态来完成节点间路由表的建立。

OSPF主要包含五个基本步骤。对于结点A

  1. A首先发现邻居节点,并了解其网络地址
  2. 设置到每个邻居节点的成本和度量值
  3. 构造一个包含A邻居节点的成本和度量值的数据包
  4. 将这个包发送给所有其他的路由器,并接受其他路由器发过来的包
  5. 根据其他路由器发过来的包来更新路由表,计算到相关节点的最短路径(一般使用SPF算法,也被称为Dijkstra算法)

相对于RIP 协议,OSPF 相当于构建你一个拓扑结构

BGP协议

BGP 是在不同自治系统的路由器之间交换路由信息的协议。BGP 采用的是路径-向量路由选择协议。由于以下原因边界网关协议只能是力求寻找一条能够到达目的网络且比较好的路由(不能转圈),而并非要寻找一条最佳路由。

  1. 因特网的规模太大,使得自治系统之间路由选择非常困难。
  2. 对于自治系统之间的路由选择,要寻找最佳路由是很不现实的。
  3. 自治系统之间的路由选择必须考虑有关策略。

BGP 的基本原理

每一个自治系统的管理员要选择至少一个路由器(可以有多个)作为该自治系统的“BGP 发言人”。一个 BGP 发言人要与其他自治系统中的 BGP 发言人交换路由信息,就要先建立TCP 连接,然后在此连接上交换 BGP 报文以建立 BGP 会话,再利用 BGP 会话交换路由信息。各 BGP 发言人互相交换网络可达性的信息后,各 BGP 发言人就可找出到达各自治系统比较好的路由了。

特点

  1. BGP 交换路由信息的结点数量级是自治系统数的量级,这要比自治系统中的网络数少很多。
  2. 每一个自治系统中 BGP 发言人(或边界路由器)的数目是很少的,这样就使得自治系统之间的路由选择不过分复杂。
  3. BGP 支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器以及到达该目的网络所要经过的各个自治系统序列
  4. 在 BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表,但以后只需要在发生变化时更新有变化的部分。这样对节省网络带宽和减少路由器的处理开销方面都有好处。

路由器

路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。从路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。

转发表和路由表

首先,我想先说明下转发和路由的区别:

  • 转发:在路由器中,分组在单一的路由器的一条输入链路中,由路由器将该分组移动到合适的端口输出。
  • 路由选择:一个网络中,分组从发送方到接收方时,所采用的路径。涉及多个路由器,路由器按照复杂的路由算法,得出整个网络的拓扑变化情况,因而能够动态地改变所选择的路由,并由此构造出整个的路由表。

路由表一般仅包含从目的网络到下一跳(用 IP 地址表示)的映射,而转发表是从路由表得出的。转发表必须包含完成转发功能所必需的信息。这就是说,在转发表的每一行必须包含从要到达的目的网络到输出端口和某些 MAC 地址信息(如下一跳的以太网地址)的映射。

将转发表和路由表用不同的数据结构实现会带来一些好处,这是因为在转发分组时,转发表的结构应当使查找过程最优化,但路由表则需要对网络拓扑变化的计算最优化。路由表总是用软件实现的,但转发表则甚至可用特殊的硬件来实现。

交换结构

IPv6

IPv6报文头部更精简了,字段更少了,对比起IPv4,有以下几个地方值得注意:

  • IPv6报文头部是定长(固定为40字节),IPv4报文头部是变长的。这个意味着,写代码处理IPv6数据报文的效率会提高很多;
  • IPv6Hop Limit字段含义类似IPv4的TTL
  • IPv6的报文头部取消了校验和字段:取消这个字段也是对IPv4协议的一个改进。当IPv4报文在网路间传输,每经过一个路由器转发就是修改TTL字段,就需要重新计算校验和。值得一提的是,在IPv6协议下,传输层L4协议UDP、TCP是强制需要进行校验和。
  • IPv6 不允许分片。

IPv6基本结构如下

一个IPv6的地址使用冒号十六进制表示方法:128位的地址两个字节分成一段,每个16位的段用十六进制表示并用冒号分隔开,例如:

IPv6地址支持压缩前导零的表示方法,例如上面的地址可以压缩表示为:

为了进一步精简IPv6地址,当冒号十六进制格式中出现连续几段数值0的位段时,这些段可以压缩为双冒号的表示,例如

这里值得注意的是:双冒号只能出现一次。即规定在任一地址中只能使用一次零压缩。

从 IPv4 向 IPv6 过渡

双协议栈

双协议栈是指在完全过渡到 IPv6 之前,使一部分主机(或路由器)装有双协议栈:一个 IPv4 和一个 IPv6。因此双协议栈主机(或路由器)既能够和 IPv6的系统通 信,又能够和IPv4的系统通信。双协议栈的主机(或路由器)同时具有两种 IP 地址:一个 IPv6 地址和一个 IPv4 地址。

隧道技术

隧道技术要点就是在 IPv6 数据报要进入 IPv4 网络时,把 IPv6 数据报封装成为 IPv4 数据报。现在整个的 IPv6 数据报变成了 IPv4 数据报的数据部分。 IPv4 数据报离开 IPv4 网络中的隧道时,再把数据部分(即原来的 IPv6 数据报)交给主机的 IPv6 协议。

ICMPv6

在IPv6中,地址解析协议 ARP 和网际组管理协议 IGMP 的功能都已被合并到 ICMPv6 中

IP多播(组播)

与单播相比,在一对多的通信中,多播可大大节约网络资源。IPTV就是多播的一个实用的例子:

其实多播组的标识符就是 IP 地址中的 D 类地址。下面是来自逼乎的一个比较简单的解释:

VPN

作者:丁之浩Alex + 我的修改

VPN是一种中转服务,全称是 Virtual Private Network

首先我们说说什么 PN,Pirate NetworkPirate Network 是相对于公网来说,我们可以理解为内网网络。在内网中,我们指明了一些专用地址,这些地址只能用于一个机构的内部通信,而不能用于和互联网上的主机通信。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。下面是三类专用地址:

当我们的电脑接入VPN后,我们的对外公网IP就会发生改变,没错,就会变成VPN服务器的公网IP,我们请求或者接受任何数据都会通过这个VPN服务器,然后在传到我们的电脑上。

接下来说说VPN在游戏加速方面的原理,假设本地网络是网通,而游戏服务器或者网页服务器是电信,那么直连起来是非常卡的。这个时候我们就可以利用VPN服务器进行中转,把我们本地的网通“变成”电信网络,电信直连电信的延迟就很低了,从而达到了加速的目的。

同样是这个原理,我们可以利用VPN来更改我们对外的IP地址,从图中可以看出,我们可以把自己的网通IP变成一个电信IP,同样我们可以把自己的中国IP,通过美国VPN服务器变成一个美国IP地址,对外显示美国。

大家可能会说,如果是这样,那我们的私人数据不是全部暴露了,这个是不会的,因为VPN在“中转”的过程采用的是256位加密技术,VPN的特性之一就是安全,由于安全这一特性,VPN在企业的应用中非常广,我们简单说下VPN在企业中的应用,出差在外的员工可以通过企业内部的VPN服务器,在任何地方都可以轻松的接入到公司的企业内部网,并且这个过程是非常安全的,得益于VPN优良的安全性能!一旦介入公司VPN,操作内部网的一些资料或者文件等同于局域网一般!这就是简单的企业VPN工作原理。

NAT

网络地址转换 NAT (Network Address Translation)它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球IP地址,才能和互联网连接。NAT 的公网IP决定内部同时可以使用的主机数目。这样就可以使专用网内较多数量的主机,轮流使用 NAT 路由器有限数量的公网IP地址。

现在常用的 NAT 转换表往往把运输层的端口号也利用上。这样,就可以使多个拥有本地地址的主机,共用一个 NAT 路由器上的公网IP地址,因而可以同时和互联网上的不同主机进行通信。这种技术叫做NAPT:

MPLS

看不懂,先Pass,MPLS基础:https://zhuanlan.zhihu.com/p/27232535

Share

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注