共计 13318 个字符,预计需要花费 34 分钟才能阅读完成。
后面咱们学习了运输层如何为客户端和服务器输送数据的,提供过程端到端的通信。那么上面咱们将学习网络层实际上是怎么实现主机到主机的通信服务的。简直每个端系统都有网络层这一部分。所以,网络层必然是很简单的。上面我将破费大量篇幅来介绍一下计算机网络层的常识。
网络层概述
网络层是 OSI 参考模型的第三层,它位于传输层和链路层之间,网络层的次要目标是实现两个端系统之间通明的数据传输。
网络层的作用从外表看上去非常简单,行将 分组
从一台主机挪动到另外一台主机。为了实现这个性能,网络层须要两种性能
转发
:因为在互联网中有很多路由器
的存在,而路由器是形成互联网的基本,路由器最重要的一个性能就是分组转发
,当一个分组到达某路由器的一条输出链路时,该路由器会将分组挪动到适当的输入链路。转发是在数据立体中实现的惟一性能。
在网络中存在两种立体的抉择
- 数据立体(data plane):负责转发网络流量,如路由器交换机中的转发表(咱们前面会说)。
- 管制立体(control plane):管制网络的行为,比方网络门路的抉择。
路由抉择
:当分组由发送方流向接管方时,网络层必须抉择这些分组的门路。计算这些门路抉择的算法被称为路由抉择算法(routing algorithm)
。
也就是说,转发是指将分组从一个输出链路转移到适当输入链路接口的路由器本地动作。而路由抉择是指确定分组从源到目的地所定位的门路的抉择。咱们前面会常常提到转发和路由抉择这两个名词。
那么此处就有一个问题,路由器怎么晓得有哪些门路能够抉择呢?
每台路由器都有一个要害的概念就是 转发表(forwarding table)
。路由器通过查看数据包标头中字段的值,来定位转发表中的项来实现转发。标头中的值即对应着转发表中的值,这个值指出了分组将被转发的路由器输入链路。如下图所示
上图中有一个 1001 分组达到路由器后,首先会在转发表中进行索引,而后由路由抉择算法决定分组要走的门路。每台路由器都有两种性能:转发和路由抉择。下 面咱们就来聊一聊路由器的工作原理。
路由器工作原理
上面是一个路由器体系结构图,路由器次要是由 4 个组件形成的
- 输出端口:
输出端口 (input port)
有很多性能。线路终端性能
和数据链路解决
性能,这两个性能实现了路由器的单个输出链路相关联的物理层和数据链路层。输出端口查找 / 转发性能
对路由器的替换性能来说至关重要,由路由器的替换构造来决定输入端口,具体来讲应该是查问转发表来确定的。 - 替换构造:
替换构造 (Switching fabric)
就是将路由器的输出端口连贯到它的输入端口。这种替换构造相当于是路由器外部的网络。 - 输入端口:
输入端口(Output ports)
通过替换构造转发分组,并通过物理层和数据链路层的性能传输分组,因而,输入端口作为输出端口执行反向数据链接和物理层性能。 - 路由抉择处理器:
路由抉择处理器(Routing processor)
在路由器内执行路由协定,保护路由表并执行网络管理性能。
下面只是这几个组件的简略介绍,其实这几个组件的组成并不像形容的那样简略,上面咱们就来深刻聊一聊这几个组件。
输出端口
下面介绍了输出端口有很多性能,包含线路终端、数据处理、查找转发,其实这些性能在输出端口的外部有相应的模块,输出端口的外部实现如下图所示
每个输出端口中都有一个路由处理器保护的 路由表的正本 ,依据路由处理器进行更新。这个路由表的副本能 够使每个输出端口进行切换,而无需通过路由处理器对立解决。这是一种 分散式
的切换,这种形式防止了路 由选择器对立解决造成转发瓶颈。
在输出端口解决能力无限的路由器中,输出端口不会进行替换性能,而是由路由处理器对立解决,而后依据 路由表查找并将数据包转发到相应的输入端口。
个别这种路由器不是独自的路由器,而是工作站或者服务器充当的路由,这种路由器外部中,路由处理器其实就是
CPU
,而输出端口其实只是网卡
。
输出端口会依据转发表定位输入端口,而后再会进行分组转发,那么当初就有一个问题,是不是每一个分组都有本人的一条链路呢?如果分组数量十分大,达到亿级的话,也会有亿个输入端口门路吗?
咱们的潜意识中显然不是的,来看上面一个例子。
上面是三个输出端口对应了转发表中的三个输入链路的示例
能够看到,对于这个例子来说,路由器转发表中不须要那么多条链路,只须要四条就够,即对应输入链路 0 1 2 3。也就是说,可能应用 4 个转发表就能够实现亿级链路。
如何实现呢?
应用这种格调的转发表,路由器分组的地址 前缀(prefix)
会与该表中的表项进行匹配。
如果存在一个匹配项,那么就会转发到对应的链路上,可能不好了解,我举个例子来说吧。
比方这时有一个分组是 11000011 10010101 00010000 0001100 达到,因为这个分组与 11000011 10010101 00010000 相匹配,所以路由器会转发到 0 链路接口上。如果一个前缀不匹配下面三个输入链路中的一种,那么路由器将向链路接口 3 进行转发。
路由匹配遵循 最长前缀准则(longest prefix matching rule)
,最长匹配准则故名思义就是如果有两个匹配项一个长一个短的话,就匹配最长的。
一旦通过查找性能确定了分组的输入端口后,那么该分组就会进入替换构造。在进入替换构造时,如果替换构造正在被应用,就会阻塞新到的分组,等到替换构造调度新的分组。
替换构造
替换构造是路由器的外围性能,通过替换性能把分组从输出端口转发至输入端口,这就是替换构造的次要性能。替换构造有多种形式,次要分为 通过内存替换、通过总线替换、通过互联网络进行替换,上面咱们离开来探讨一下。
- 通过内存替换:最开始的传统计算机就是应用
内存替换
的,在输出端口和输入端口之间是通过 CPU 进行的。输出端口和输入端口的性能就如同传统操作系统中的 I/O 设施一样。当一个分组达到输出端口时,这个端口会首先以中断
的形式向路由选择器发出信号,将分组从输出端口拷贝到内存中。而后,路由抉择处理器从分组首部中提取指标地址,在转发表中找出适当的输入端口进行转发,同时将分组复制到输入端口的缓存中。
这里须要留神一点,如果内存带宽以每秒读取或者写入 B 个数据包,那么总的交换机吞吐量(数据包从输出端口到输入端口的总速率) 必须小于 B/2。
- 通过总线替换:在这种解决形式中,总线经由输出端口间接将分组传送到输入端口,两头不须要路由选择器的干涉。总线的工作流程如下:输出端口给分组调配一个
标签
,而后分组经由总线发送给所有的输入端口,每个输入端口都会判断标签中的端口和本人的是否匹配,如果匹配的话,那么这个输入端口就会把标签拆掉,这个标签只用于交换机外部逾越总线。如果同时有多个
分组达到路由器的话,那么只有一个分组可能被解决,其余分组须要再进入替换构造前期待。
- 通过互联网络替换:克服繁多、共享式总线带宽限度的一种办法是应用一个更简单的互联网络。如下图所示
每条垂直的的总线在交叉点与每条程度的总线穿插,交叉点通过替换构造控制器可能在任何时候开启和闭合。当分组达到输出端口 A 时,如果须要转发到端口 X,交换机控制器会闭合 A 到 X 穿插局部的交叉点,而后端口 A 在总线上进行分组转发。这种网络互联式的替换构造是 非阻塞的 (non-blocking)
的,也就是说 A -> X 的交叉点闭合不会影响 B -> Y 的链路。如果来自两个不同输出端口的两个分组其目的地为雷同的输入端口的话,这种状况下只能有一个分组被替换,另外一个分组必须进行期待。
输入端口解决
如下图所示,输入端口解决取出曾经寄存在输入端口内存中的分组并将其发送到输入链路上。包含抉择和去除排队的分组进行传输,执行所需的链路层和物理层的性能。
在输出端口中有期待进入替换的排队队列,而在输入端口中有期待转发的排队队列,排队的地位和水平取决于 流量负载、替换构造 的绝对频率和线路速率。
随着队列的一直减少,会导致路由器的缓存空间被耗尽,进而使没有内存能够存储溢出的队列,以致分组呈现 丢包(packet loss)
,这就是咱们说的在网络中丢包或者被路由器抛弃。
何时呈现排队
上面咱们通过输出端口的排队队列和输入端口的排队队列来介绍一下可能呈现的排队状况。
输出队列
如果替换构造的处理速度没有输出队列达到的速度快,在这种状况下,输出端口将会呈现排队状况,达到替换构造前的分组会退出输出端口队列中,以期待通过替换构造传送到输入端口。
为了形容分明输出队列,咱们假如以下状况:
- 应用网络互联的替换形式;
- 假设所有链路的速度雷同;
- 在链路中一个分组由输出端口替换到输入端口所花的工夫雷同,从任意一个输出端口传送到给定的输入端口;
- 分组依照 FCFS 的形式,只有输入端口不同,就能够进行并行传送。然而如果位于任意两个输出端口中的分组是发往同一个目的地的,那么其中的一个分组将被阻塞,而且必须在输出队列中期待,因为替换构造一次只能传输一个到指定端口。
如下图所示
在 A 队列中,输出队列中的两个分组会发送至同一个目的地 X,假如在替换构造正要发送 A 中的分组,在这个时候,C 队列中也有一个分组发送至 X,在这种状况下,C 中发送至 X 的分组将会期待,不仅如此,C 队列中发送至 Y 输入端口的分组也会期待,即便 Y 中没有呈现竞争的状况。这种景象叫做 线路前部阻塞(Head-Of-The-Line, HOL)
。
输入队列
咱们上面探讨输入队列中呈现期待的状况。假如替换速率要比输出 / 输入的传输速率快很多,而且有 N 个输出分组的目的地是转发至雷同的输入端口。在这种状况下,在向输入链路发送分组的过程中,将会有 N 个新分组达到传输端口。因为输入端口在一个单位工夫内只能传输一个分组,那么这 N 个分组将会期待。然而在期待 N 个分组被解决的过程中,同时又有 N 个分组达到,所以,分组队列可能在输入端口造成。这种状况下最终会因为分组数量变的足够大,从而 耗尽
输入端口的可用内存。
如果没有足够的内存来缓存分组的话,就必须思考其余的形式,次要有两种:一种是失落分组,采纳 弃尾(drop-tail)
的办法;一种是删除一个或多个曾经排队的分组,从而来为新的分组腾出空间。
网络层的策略对 TCP 拥塞管制影响很大的就是路由器的分组抛弃策略。在最简略的状况下,路由器的队列通常都是依照 FCFS 的规定解决到来的分组。因为队列长度总是无限的,因而当队列曾经满了的时候,当前再达到的所有分组(如果可能持续排队,这些分组都将排在队列的尾部)将都被抛弃。这就叫做尾部抛弃策略。
通常状况下,在缓冲填满之前将其抛弃是更好的策略。
如上图所示,A B C 每个输出端口都达到了一个分组,而且这个分组都是发往 X 的,同一时间只能解决一个分组,而后这时,又有两个分组别离由 A B 发往 X,所以此时有 4 个分组在 X 中进行期待。
等上一个分组被转发实现后,输入端口就会抉择在剩下的分组中依据 分组调度(packet scheduleer)
抉择一个分组来进行传输,咱们上面就会聊到分组传输。
分组调度
当初咱们来讨论一下分组调度秩序的问题,即排队的分组如何经输入链路传输的问题。咱们生存中有有数排队的例子,然而咱们生存中个别的排队算法都是 先来先服务 (FCFS)
,也是 先进先出(FIFO)
。
先进先出
先进先出就映射为数据结构中的 队列
,只不过它当初是链路调度规定的排队模型。
FIFO 调度规定依照分组达到输入链路队列的雷同秩序来抉择分组,先达到队列的分组将先会被转发。在这种形象模型中,如果队列已满,那么弃尾的分组将是队列开端的前面一个。
优先级排队
优先级排队是先进先出排队的改进版本,达到输入链路的分组被分类放入输入队列中的优先权类,如下图所示
通常状况下,每个优先级不同的分组有本人的优先级类,每个优先级类有本人的队列,分组传输会首先从优先级高的队列中进行,在同一类优先级的分组之间的抉择通常是以 FIFO 的形式实现。
循环加权偏心排队
在 循环加权偏心规定(round robin queuing discipline)
下,分组像应用优先级那样被分类。然而,在类之间却不存在严格的服务优先权。循环调度器在这些类之间循环轮流提供服务。如下图所示
在循环加权偏心排队中,类 1 的分组被传输,接着是类 2 的分组,最初是类 3 的分组,这算是一个循环,而后接下来又从新开始,又从 1 -> 2 -> 3 这个程序进行轮询。每个队列也是一个先入先出的队列。
这是一种所谓的 放弃工作排队(work-conserving queuing)
的规定,就是说如果轮询的过程中发现有空队列,输入端口不会期待分组,而是持续轮询上面的队列。
IP 协定
路由器对分组进行转发后,就会把数据包传到网络上,数据包最终是要传递到客户端或者服务器上的,那么数据包怎么晓得要发往哪里呢?起到关键作用的就是 IP 协定。
IP 次要分为三个局部,别离是 IP 寻址、路由和分包组包。上面咱们次要围绕这三点进行论述。
IP 地址
既然一个数据包要在网络上传输,那么必定须要晓得这个数据包到底发往哪里,也就是说须要一个指标地址信息,IP 地址就是连贯网络中的所有主机进行通信的指标地址,因而,在网络上的每个主机都须要有本人的 IP 地址。
在 IP 数据报发送的链路中,有可能链路十分长,比如说由中国发往美国的一个数据报,因为网络抖动等一些意外因素可能会导致数据报失落,这时咱们在这条链路中会放入一些 中转站
,一方面可能确保数据报是否失落,另一方面可能控制数据报的转发,这个中转站就是咱们后面聊过的路由器,这个转发过程就是 路由管制
。
路由管制(Routing)
是指将分组数据发送到最终目标地址的性能,即便网络复杂多变,也可能通过路由管制达到指标地址。因而,一个数据报是否达到指标主机,要害就在于路由器的管制。
这里有一个名词,就是 跳
,因为在一条链路中可能会布满很多路由器,路由器和路由器之间的数据报传送就是跳,比方你和隔壁老王通信,两头就可能会通过路由器 A-> 路由器 B -> 路由器 C。
那么一跳的范畴有多大呢?
一跳是指从源 MAC 地址到指标 MAC 地址之间传输帧的区间,这里引出一个新的名词,MAC 地址是啥?
MAC 地址指的就是计算机的 物理地址(Physical Address)
,它是用来确认网络设备地位的地址。在 OSI 网络模型中,网络层负责 IP 地址的定位,而数据链路层负责 MAC 地址的定位。MAC 地址用于在网络中惟一标示一个网卡,一台设施若有一或多个网卡,则每个网卡都须要并会有一个惟一的 MAC 地址,也就是说 MAC 地址和网卡是紧密联系在一起的。
路由器的每一跳都须要询问以后直达的路由器,下一跳应该跳到哪里,从而跳转到指标地址。而不是数据报刚开始发送后,网络中所有的通路都会显示进去,这种屡次跳转也叫做 多跳路由
。
IP 地址定义
现如今有两个版本的 IP 地址,IPv4 和 IPv6,咱们首先探讨一下现如今还在宽泛应用的 IPv4 地址,前面再思考 IPv6。
IPv4 由 32 位正整数来示意,在计算机外部会转化为二进制来解决,然而二进制不合乎人类浏览的习惯,所以咱们依据 易读性
的准则把 32 位的 IP 地址以 8 位为一组,分成四组,每组之间以 .
进行宰割,再将每组转换为十进制数。如下图所示
那么下面这个 32 位的 IP 地址就会被转换为十进制的 156.197.1.1。
除此之外,从图中咱们还能够失去如下信息
每个这样 8 位位一组的数字,天然是非正数,其取值范畴是 [0,255]。
IP 地址的总个数有 2^32 次幂个,这个数值算下来是 4294967296
,大略能容许 43 亿台设施连贯到网络。实际上真的如此吗?
实际上 IP 不会以主机的个数来配置的,而是依据设施上的 网卡(NIC)
进行配置,每一块网卡都会设置一个或者多个 IP 地址,而且通常一台路由器会有至多两块网卡,所以能够设置两个以上的 IP 地址,所以主机的数量远远达不到 43 亿。
IP 地址结构和分类
IP 地址由 网络标识
和 主机标识
两局部组成,网络标识代表着网络地址,主机标识代表着主机地址。网络标识在数据链路的每个段配置不同的值。网络标识必须保障相互连接的每个段的地址都不反复。而雷同段内相连的主机必须有雷同的网络地址。IP 地址的 主机标识
则不容许在同一网段内反复呈现。
举个例子来说:比如说我在石家庄(如同不必比方昂),我所在的小区的某一栋楼就相当于是网络标识,某一栋楼的第几户就相当于是我的主机标识,当然如果你有整栋楼的话,那就当我没说。你能够通过 xx 省 xx 市 xx 区 xx 路 xx 小区 xx 栋来定位我的网络标识,这一栋的第几户就相当于是我的网络标识。
IP 地址分为四类,别离是 A 类、B 类、C 类、D 类、E 类,它会依据 IP 地址中的第 1 位到第 4 位的比特对网络标识和主机标识进行分类。
A 类
:(1.0.0.0 – 126.0.0.0)(默认子网掩码:255.0.0.0 或 0xFF000000)第一个字节为网络号,后三个字节为主机号。该类 IP 地址的最后面为 0,所以地址的网络号取值于 1~126 之间。个别用于大型网络。B 类
:(128.0.0.0 – 191.255.0.0)(默认子网掩码:255.255.0.0 或 0xFFFF0000)前两个字节为网络号,后两个字节为主机号。该类 IP 地址的最后面为 10,所以地址的网络号取值于 128~191 之间。个别用于中等规模网络。C 类
:(192.0.0.0 – 223.255.255.0)(子网掩码:255.255.255.0 或 0xFFFFFF00)前三个字节为网络号,最初一个字节为主机号。该类 IP 地址的最后面为 110,所以地址的网络号取值于 192~223 之间。个别用于小型网络。D 类
:是多播地址。该类 IP 地址的最后面为 1110,所以地址的网络号取值于 224~239 之间。个别用于多路播送用户。E 类
:是保留地址。该类 IP 地址的最后面为 1111,所以地址的网络号取值于 240~255 之间。
为了不便了解,我画了一张 IP 地址分类图,如下所示
依据不同的 IP 范畴,有上面不同的地总空间分类
子网掩码
子网掩码(subnet mask)
又叫做网络掩码,它是一种用来指明一个 IP 地址的哪些位标识的是主机所在的网络。子网掩码是一个 32 位 地址,用于屏蔽 IP 地址的一部分以区别网络标识和主机标识。
一个 IP 地址只有确定了其分类,也就确定了它的网络标识和主机标识,由此,各个分类所示意的网络标识范畴如下
用 1
示意 IP 网络地址的比特范畴,0
示意 IP 主机地址的范畴。将他们用十进制示意,那么这三类的示意如下
保留地址
在 IPv4 的几类地址中,有几个保留的地址空间不能在互联网上应用。这些地址用于非凡目标,不能在局域网内部路由。
IP 协定版本
目前,寰球 Internet 中共存有两个 IP 版本:IP 版本 4(IPv4)
和 IP 版本 6(IPv6)
。IP 地址由二进制值组成,可驱动 Internet 上所有数据的路由。IPv4 地址的长度为 32 位,而 IPv6 地址的长度为 128 位。
Internet IP 资源由 Internet 调配号码机构(IANA)
调配给区域 Internet 注册表(RIR),例如 APNIC,该机构负责根 DNS,IP 寻址和其余 Internet 协定资源。
上面咱们就一起认识一下 IP 协定中十分重要的两个版本 IPv4 和 IPv6。
IPv4
IPv4 的全称是 Internet Protocol version 4
,是 Internet 协定的第四版。IPv4 是一种无连贯的协定,这个协定会尽最大致力交付数据包,也就是说它不能保障任何数据包能达到目的地,也不能保障所有的数据包都会依照正确的程序达到指标主机,这些都是由下层比方传输控制协议管制的。也就是说,单从 IP 看来,这是一个不牢靠的协定。
后面咱们讲过网络层分组被称为
数据报
,所以咱们接下来的叙述也会围绕着数据报开展。
IPv4 的数据报格局如下
IPv4 数据报中的关键字及其解释
版本字段 (Version)
占用 4 bit,通信单方应用的版本必须统一,对于 IPv4 版本来说,字段值是 4。首部长度(Internet Header Length)
占用 4 bit,首部长度阐明首部有多少 32 位(4 字节)。因为 IPv4 首部可能蕴含不确定的选项,因而这个字段被用来确定数据的偏移量。大多数 IP 不蕴含这个选项,所以个别首部长度设置为 5,数据报为 20 字节。服务类型(Differential Services Codepoint,DSCP)
占用 6 bit,以便应用不同的 IP 数据报,比方一些低时延、高吞吐量和可靠性的数据报。服务类型如下表所示
拥塞通告(Explicit Congestion Notification,ECN)
占用 2 bit,它容许在不抛弃报文的同时告诉对方网络拥塞的产生。ECN 是一种可选的性能,仅当两端都反对并心愿应用,且底层网络反对时才被应用。最开始 DSCP 和 ECN 统称为 TOS,也就是辨别服务,然而起初被细化为了 DSCP 和 ECN。数据报长度 (Total Length)
占用 16 bit,这 16 位是包含在数据在内的总长度,实践上数据报的总长度为 2 的 16 次幂 – 1,最大长度是 65535 字节,然而实际上数据报很少有超过 1500 字节的。IP 规定所有主机都必须反对最小 576 字节的报文,但大多数古代主机反对更大的报文。当下层的数据链路协定的最大传输单元(MTU)
字段的值小于 IP 报文长度时,报文就必须被分片。标识符(Identification)
占用 16 bit,这个字段用来标识所有的分片,因为分片不肯定会按序达到,所以达到指标主机的所有分片会进行重组,每产生一个数据报,计数器加 1,并赋值给此字段。标记(Flags)
占用 3 bit,标记用于管制和辨认分片,这 3 位别离是- 0 位:保留,必须为 0;
- 1 位:
禁止分片(Don’t Fragment,DF)
,当 DF = 0 时才容许分片; - 2 位:
更多分片(More Fragment,MF)
,MF = 1 代表前面还有分片,MF = 0 代表曾经是最初一个分片。
如果 DF 标记被设置为 1,然而路由要求必须进行分片,那么这条数据报回抛弃
分片偏移(Fragment Offset)
占用 13 位,它指明了每个分片绝对于原始报文结尾的偏移量,以 8 字节作单位。存活工夫 (Time To Live,TTL)
占用 8 位,存活工夫防止报文在互联网中迷失
,比方陷入路由环路。存活工夫以秒为单位,但小于一秒的工夫均向上取整到一秒。在事实中,这实际上成了一个跳数计数器:报文通过的每个路由器都将此字段减 1,当此字段等于 0 时,报文不再向下一跳传送并被抛弃,这个字段最大值是 255。协定(Protocol)
占用 8 位,这个字段定义了报文数据区应用的协定。协定内容能够在 https://www.iana.org/assignme…。首部校验和(Header Checksum)
占用 16 位,首部校验和会对字段进行纠错查看,在每一跳中,路由器都要从新计算出的首部测验和并与此字段进行比对,如果不统一,此报文将会被抛弃。源地址(Source address)
占用 32 位,它是 IPv4 地址的形成条件,源地址指的是数据报的发送方目标地址 (Destination address)
占用 32 位,它是 IPv4 地址的形成条件,指标地址指的是数据报的接管方选项(Options)
是附加字段,选项字段占用 1 – 40 个字节不等,个别会跟在目标地址之后。如果首部长度 > 5,就应该思考选项字段。数据
不是首部的一部分,因而并不被蕴含在首部测验和中。
在 IP 发送的过程中,每个数据报的大小是不同的,每个链路层协定能承载的网络层分组也不一样,有的协定可能承载大数据报,有的却只能承载很小的数据报,不同的链路层可能承载的数据报大小如下。
IPv4 分片
一个链路层帧能承载的最大数据量叫做 最大传输单元 (Maximum Transmission Unit, MTU)
,每个 IP 数据报封装在链路层帧中从一台路由器传到下一台路由器。因为每个链路层所反对的最大 MTU 不一样,当数据报的大小超过 MTU 后,会在链路层进行分片,每个数据报会在链路层独自封装,每个较小的片都被称为 片(fragement)
。
每个片在达到目的地后会进行重组,精确的来说是在运输层之前会进行重组,TCP 和 UDP 都会心愿发送残缺的、未分片的报文,出于性能的起因,分片重组不会在路由器中进行,而是会在指标主机中进行重组。
当指标主机收到从发送端发送过去的数据报后,它须要确定这些数据报中的分片是否是由源数据报分片传递过去的,如果是的话,还须要确定何时收到了分片中的 最初一片
,并且这些片会如何拼接一起成为数据报。
针对这些潜在的问题,IPv4 设计者将 标识、标记和片偏移 放在 IP 数据报首部中。当生成一个数据报时,发送主机会为该数据报设置源和目标地址的同时贴上 标识号
。发送主机通常将它发送的每个数据报的标识 + 1。当某路由器须要对一个数据报分片时,造成的每个数据报具备初始数据报的 源地址、指标地址和标识号。当目的地从同一发送主机收到一系列数据报时,它可能检查数据报的标识号以确定哪些数据是由源数据报发送过去的。因为 IP 是一种不牢靠的服务,分片可能会在网路中失落,鉴于这种状况,通常会把分片的最初一个比特设置为 0,其余分片设置为 1,同时应用偏移字段指定分片应该在数据报的哪个地位。
IPv4 寻址
IPv4 反对三种不同类型的寻址模式,别离是
- 单播寻址模式:在这种模式下,数据只发送到一个目的地的主机。
- 播送寻址模式:在此模式下,数据包将被寻址到网段中的所有主机。这里客户端发送一个数据包,由所有服务器接管:
- 组播寻址模式:此模式是前两种模式的混合,即发送的数据包既不指向单个主机也不指定段上的所有主机
IPv6
随着端系统接入的越来越多,IPv4 曾经无奈满足调配了,所以,IPv6 应运而生,IPv6 就是为了解决 IPv4 的地址耗尽问题而被标准化的网际协议。IPv4 的地址长度为 4 个 8 字节,即 32 比特,而 IPv6 的地址长度是原来的四倍,也就是 128 比特,个别写成 8 个 16 位字节。
从 IPv4 切换到 IPv6 及其耗时,须要将网络中所有的主机和路由器的 IP 地址进行设置,在互联网一直遍及的明天,替换所有的 IP 是一个工作量及其宏大的工作。咱们前面会说。
咱们先来看一下 IPv6 的地址是怎么的
版本
与 IPv4 一样,版本号由 4 bit 形成,IPv6 版本号的值为 6。流量类型(Traffic Class)
占用 8 bit,它就相当于 IPv4 中的服务类型(Type Of Service)。流标签(Flow Label)
占用 20 bit,这 20 比特用于标识一条数据报的流,可能对一条流中的某些数据报给出优先权,或者它可能用来对来自某些利用的数据报给出更高的优先权,只有流标签、源地址和指标地址统一时,才会被认为是一个流。有效载荷长度(Payload Length)
占用 16 bit,这 16 比特值作为一个无符号整数,它给出了在 IPv6 数据报中跟在鼎昌 40 字节数据报首部前面的字节数量。下一个首部(Next Header)
占用 8 bit,它用于标识数据报中的内容须要交付给哪个协定,是 TCP 协定还是 UDP 协定。跳限度(Hop Limit)
占用 8 bit,这个字段与 IPv4 的 TTL 意思雷同。数据每通过一次路由就会减 1,减到 0 则会抛弃数据。源地址(Source Address)
占用 128 bit (8 个 16 位),示意发送端的 IP 地址。指标地址(Destination Address)
占用 128 bit (8 个 16 位),示意接收端 IP 地址。
能够看到,相较于 IPv4,IPv6 勾销了上面几个字段
- 标识符、标记和比特偏移:IPv6 不容许在两头路由器上进行分片和从新组装。这种操作只能在端系统上进行,IPv6 将这个性能放在端系统中,放慢了网络中的转发速度。
- 首部校验和:因为在运输层和数据链路执行了报文段完整性校验工作,IP 设计者大略感觉在网络层中有首部校验和比拟多余,所以去掉了。IP 更多专一的是疾速解决分组数据。
- 选项字段:选项字段不再是规范 IP 首部的一部分了,然而它并没有隐没,而是可能呈现在 IPv6 的扩大首部,也就是下一个首部中。
IPv6 扩大首部
IPv6 首部长度固定,无奈将选项字段退出其中,取而代之的是 IPv6 应用了 扩大首部
扩大首部通常介于 IPv6 首部与 TCP/UDP 首部之间,在 IPv4 中可选长度固定为 40 字节,在 IPv6 中没有这样的限度。IPv6 的扩大首部能够是任意长度。扩大首部中还能够蕴含扩大首部协定和下一个扩大字段。
IPv6 首部中没有标识和标记字段,对 IP 进行分片时,须要应用到扩大首部。
具体的扩大首部表如下所示
上面咱们来看一下 IPv6 都有哪些特点
IPv6 特点
IPv6 的特点在 IPv4 中得以实现,然而即使实现了 IPv4 的操作系统,也未必实现了 IPv4 的所有性能。而 IPv6 却将这些性能大众化了,也就表明这些性能在 IPv6 曾经进行了实现,这些性能次要有
- 地址空间变得更大:这是 IPv6 最次要的一个特点,即反对更大的地址空间。
- 精简报文构造: IPv6 要比 IPv4 精简很多,IPv4 的报文长度不固定,而且有一个一直变动的选项字段;IPv6 报文段固定,并且将选项字段,分片的字段移到了 IPv6 扩大头中,这就极大的精简了 IPv6 的报文构造。
- 实现了主动配置 :IPv6 反对其主机设施的 状态和无状态 主动配置模式。这样,没有
DHCP 服务器
不会进行跨段通信。 - 层次化的网络结构:IPv6 不再像 IPv4 一样依照 A、B、C 等分类来划分地址,而是通过 IANA -> RIR -> ISP 这样的程序来调配的。IANA 是国内互联网号码调配机构,RIR 是区域互联网注册管理机构,ISP 是一些运营商(例如电信、挪动、联通)。
- IPSec:IPv6 的扩大报头中有一个认证报头、封装平安净载报头,这两个报头是 IPsec 定义的。通过这两个报头网络层本人就能够实现端到端的平安,而无需像 IPv4 协定一样须要其余协定的帮忙。
- 反对任播:IPv6 引入了一种新的寻址形式,称为任播寻址。
IPv6 地址
咱们晓得,IPv6 地址长度为 128 位,他所能示意的范畴是 2 ^ 128 次幂,这个数字十分宏大,简直涵盖了你能想到的所有主机和路由器,那么 IPv6 该如何示意呢?
个别咱们将 128 比特的 IP 地址以每 16 比特为一组,并用 :
号进行分隔,如果呈现间断的 0 时还能够将 0 省略,并用 ::
两个冒号隔开,记住,一个 IP 地址只容许呈现一次两个间断的冒号。
上面是一些 IPv6 地址的示例
- 二进制数示意
- 用十六进制数示意
- 呈现两个冒号的状况
如上图所示,A120 和 4CD 两头的 0 被 :: 所取代了。
如何从 IPv4 迁徙到 IPv6
咱们下面聊了聊 IPv4 和 IPv6 的报文格式、报文含意是什么、以及 IPv4 和 IPv6 的特色别离是什么,看完下面的内容,你曾经晓得了 IPv4 当初马上就变的不够用了,而且随着 IPv6 的一直倒退和援用,尽管新型的 IPv6 能够做到 向后兼容
,即 IPv6 能够收发 IPv4 的数据报,然而 曾经部署的具备 IPv4 能力的零碎却不可能解决 IPv6 数据报。所以 IPv4 噬需迁徙到 IPv6,迁徙并不意味着将 IPv4 替换为 IPv6。这仅意味着同时启用 IPv6 和 IPv4。
那么当初就有一个问题了,IPv4 如何迁徙到 IPv6 呢?这就是咱们接下来探讨的重点。
标记
最简略的形式就是设置一个标记日,指定某个工夫点和日期,此时寰球的因特网机器都会在这时关机从 IPv4 迁徙到 IPv6。上一次重大的技术迁徙是在 35 年前,然而很显然,不必我过多解释,这种状况必定是 不行的
。影响不可估量不说,如何保障寰球人类都能晓得如何设置本人的 IPv6 地址?一个设计数十亿台机器的标记日当初是想都不敢想的。
隧道技术
当初曾经在实践中应用的从 IPv4 迁徙到 IPv6 的办法是 隧道技术(tunneling)
。
什么是隧道技术呢?
隧道技术是一种应用互联网络的基础设施在网络之间的传输数据的形式,应用隧道传递的数据能够是不同协定的数据帧或包。应用隧道技术所听从的协定叫做 隧道协定(tunneling protocol)
。隧道协定会将这些协定的数据帧或包封装在新的包头中发送。新的包头提供了路由信息,从而使封装的负载数据可能通过互联网络进行传递。
应用隧道技术个别都会建一个 隧道
,建隧道的根据如下:
比方两个 IPv6 节点 (下方 B、E) 要应用 IPv6 数据报进行交互,然而它们是经由两个 IPv4 的路由器进行互联的。那么咱们就须要将 IPv6 节点和 IPv4 路由器组成一个隧道,如下图所示
借助于隧道,在隧道发送端的 IPv6 节点可将整个 IPv6 数据报放到一个 IPv4 数据报的 数据(有效载荷)
字段中,于是,IPv4 数据报的地址被设置为指向隧道接收端的 IPv6 的节点,比方下面的 E 节点。而后再发送给隧道中的第一个节点 C,如下所示
隧道两头的 IPv4 提供路由,路由器不晓得这个 IPv4 外部蕴含一个指向 IPv6 的地址。隧道接收端的 IPv6 节点收到 IPv4 数据报,会确定这个 IPv4 数据报含有一个 IPv6 数据报,通过观察数据报长度和数据得悉。而后取出 IPv6 数据报,再为 IPv6 提供路由,就如同两个节点间接相连传输数据报一样。
总结
这篇文章是计算机网络系列的连载文章,这篇咱们次要探讨了网络层的相干常识、路由器的外部结构、路由器如何实现转发的,IP 协定相干内容:包含 IP 地址、IPv4 和 IPv6 的相干内容,最初咱们探讨了如何使 IPv4 迁徙到 IPv6。
作者:程序员 cxuan