计算机网络原理之网络层
标签:计算机网络
目录
韩立刚计算机网络:网络层协议
网络层提供两种服务
网络层提供的两种服务:
在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接” 还是 “无连接”)曾引起了长期的争论。争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?
网络层应该向运输层提供两种服务:
- 虚电路服务
- 数据包服务
虚电路服务
面向连接的通信方式。
建立虚电路 (Virtual Circuit),以保证双方通信所需的一切网络资源。如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点。
虚电路是逻辑连接:
虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。请注意,电路交换的电话通信是先建立了一条真正的连接。因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。
数据包服务
因特网采用的设计思路:
- 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
- 网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
- 网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
尽最大努力交付的好处:
- 由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。
- 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)。
- 采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
- 因特网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。
虚电路服务与数据报服务的对比
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点时不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
网际协议 IP
虚拟互联网
网络层中间设备:中间设备又称为中间系统或中继 (relay) 系统。
- 物理层中继系统:转发器 (repeater)。
- 数据链路层中继系统:网桥或桥接器 (bridge)。
- 网络层中继系统:路由器 (router)。
- 网络层以上的中继系统:网关 (gateway)。注: 现在说的网关一般指的是路由器接口,网关地址一般习惯使用本网段第一个地址或者最后一个地址。
虚拟互连网络的意义:
- 所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用 IP 协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络。
- 使用 IP 协议的虚拟互连网络可简称为 IP 网。
- 使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的各具体的网络异构细节。
IP 地址和 MAC 地址
MAC 地址
MAC(Media Access Control,介质访问控制)地址,或称为物理地址,也叫硬件地址,用来定义网络设备的位置,MAC 地址是网卡出厂时设定的,是固定的(但可以通过在设备管理器中或注册表等方式修改,同一网段内的 MAC 地址必须唯一)。MAC 地址采用十六进制数表示,长度是 6 个字节(48 位),分为前 24 位和后 24 位。
- 前 24 位叫做组织唯一标志符(Organizationally Unique Identifier,即 OUI),是由 IEEE 的注册管理机构给不同厂家分配的代码,区分了不同的厂家。
- 后 24 位是由厂家自己分配的,称为扩展标识符。同一个厂家生产的网卡中 MAC 地址后 24 位是不同的。
MAC 地址对应于 OSI 参考模型的第二层数据链路层,工作在数据链路层的交换机维护着计算机 MAC 地址和自身端口的数据库,交换机根据收到的数据帧中的 “目的 MAC 地址” 字段来转发数据帧。
IP 地址
IP 地址(Internet Protocol Address),缩写为 IP Adress,是一种在 Internet 上的给主机统一编址的地址格式,也称为网络协议(IP 协议)地址。它为互联网上的每一个网络和每一台主机分配一个逻辑地址,常见的 IP 地址,分为 IPv4 与 IPv6 两大类,当前广泛应用的是 IPv4,目前 IPv4 几乎耗尽,下一阶段必然会进行版本升级到 IPv6;如无特别注明,一般我们讲的的 IP 地址所指的是 IPv4。
IP 地址对应于 OSI 参考模型的第三层网络层,工作在网络层的路由器根据目标 IP 和源 IP 来判断是否属于同一网段,如果是不同网段,则转发数据包。
参考:
划分子网和构造超网
参考:
ARP & RARP
ARP 简介
不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
每一个主机都设有一个 ARP 高速缓存 (ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。
ARP 高速缓存的作用:
为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。
当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便了。
使用 ARP 的四种典型情况:
- 发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
- 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
应当注意的问题:
ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
从 IP 地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址。
逆地址解析协议 RARP:
逆地址解析协议 RARP 使只知道自己硬件地址的主机能够知道其 IP 地址。
IP 数据报格式
IP 数据包:
一个 IP 数据包由首部和数据两部分组成。
- 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
- 在首部的固定部分的后面是一些可选字段,其长度是可变的。
IP 数据报首部的固定部分中的各字段:
- 版本:占 4 位,指 IP 协议的版本,目前使用的 IP 协议版本号为 4(即 IPv4)
- 首部长度:占 4 位,课表示的最大数值 是 15 个单位 (一个单位为 4 字节),因此 IP 的首部长度的最大值是 60 字节。
- 区分服务:让数据包加上一个标记,来告诉网络上那些传输的数据,这些数据包在传的时候 是着急还是不着急。QOS 服务质量。
- 总长度:占 16 位,指首部和数据之和的长度,单位位字节,因此数据报的最大长度位 65535 字节。总长度必须不超过最大传送单元 MTU。
- 标识:占 16 位,它是一个计数器,用于产生数据报的标识,不是序号,每产生一个数据包,就增加 1。
- 标志:占 3 位,目前只有前两位有意义。标志字段的最低位是 MF。 MF=1 表示后面 “还有分片”。MF=0 表示最后一个分片。标志字段中间的一位是 DF。 只有当 DF=0 时才允许分片。
- 生存时间:记位 TTL (Time To Live) 占 8 位,数据报在网络中可通过的路由器数的最大值。数据包没过一个路由器 TTL-1。
- 协议:协议(8 位)字段指出此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分交给哪个进程处理。
- 首部检验和:首部检验和 (16 位) 字段只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
- 源地址、目的地址:各占四个字节。
IP 数据报首部的可变部分:
IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。
增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。
IP 转发分组的流程
数据包如何路由:
IP 路由:
路由就是路由器从一个网段到另外一个网段转发数据包的过程,即数据包通过路由器转发,就是数据路由。网络畅通条件,要求数据包必须能够到达目标地址,同时数据包必须能够返回发送地址。这就要求沿途经过的路由器必须知道到目标网络如何转发数据包,即到达目的网络下一跳转发给哪个路由器,也就是必须有到达目标网络的路由,沿途的路由器还必须有数据包返回所需的路由。
- 数据路由:路由器在不同网段转发数据包
- 网络畅通的条件:能去能回
- 沿途的路由器必须知道目标网络下一跳给哪个接口
- 沿途的路由器必须知道源网络下一跳给哪个接口
如图所示,计算机 PC0 ping PC1,网络要想通,要求沿途的路由器 Router0,Router1,Router2,Router3 都必须有到 192.168.1.0/24 网络的路由,这样数据包才能到达 PC1。PC1 要回应数据包给 PC0,沿途所有的路由器必须有到 192.168.0.0/24 网络的路由,这样数据包才能回来。
配置静态路由:
默认路由:
网络地址和子网掩码均为 0 的路由就是默认路由。
Windows 上的默认路由和网关:
计算机也有路由表,我们可以在计算机上运行 route print 显示 Windows 操作系统上的路由表。运行 netstat –r
也可以显示 Windows 操作系统上的路由表。如图所示,给计算机配置网关就是给计算机添加默认路由。
如果不配置计算机的网关,使用以下命令添加默认路由。如图所示,去掉本地连接的网关,在命令提示符下,输入 route print
,可以看到没有默认路由了,该计算机也不能访问其他网段,ping 202.99.160.68 提示 “目标主机不可到达”。
如图所示,在命令提示符下,输入 route /?
可以看到该命令的帮助。输入 route add 0.0.0.0 mask 0.0.0.0 192.168.8.1
,添加默认路由。输入 route print
可以显示路由表,默认路由已经出现。Ping 202.99.160.68 可以 ping 通。
如图所示,内网的计算机需要配置 IP 地址、子网掩码和网关,网关就是 Server 的内网网卡的 IP 地址。在 Server 的两个连接,内网的网卡不需要配置网关,但是连接 Internet 的网卡需要配置默认网关。
注意:
IP 数据报的首部中没有地方可以用来指明 “下一跳路由器的 IP 地址”。当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件。网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。
网际控制报文协议 ICMP
ICMP 简介:
为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。
ICMP 不是高层协议,而是 IP 层的协议。ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。
ICMP 报文格式:
ICMP 报文的类型:
ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。
- 差错报告报文有五种:终点不可达 ,源点抑制 (Source quench) ,时间超过 ,参数问题 ,改变路由(重定向)(Redirect)。
- 询问报文有两种:回送请求和回答报文,时间戳请求和回答报文
差错报告报文的数据字段的内容:
ICMP 应用举例:
- PING 用来测试两个主机之间的连通性。PING 使用了 ICMP 回送请求与回送回答报文。PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或 UDP。
- Pathping
- tracert
ping 命令诊断网络故障:
PING(Packet Internet Grope),因特网包探索器,用于测试网络连接量的程序。Ping 发送一个 ICMP 回声请求消息给目的地并报告是否收到所希望的 ICMP 回声应答。
ping 指的是端对端连通,通常用来作为可用性的检查, 但是某些病毒木马会强行大量远程执行 ping 命令抢占你的网络资源,导致系统变慢,网速变慢。 严禁 ping 入侵作为大多数防火墙的一个基本功能提供给用户进行选择。
如果你打开 IE 浏览器访问网站失败,你可以通过 ping 命令测试到 Internet 的网络连通,可以为你排除网络故障提供线索,下面展示 ping 命令返回的信息以及分析其原因。
目标主机不可到达:
目标网络不可到达:
请求超时:
通过延迟评估网络带宽:
Pathping 跟踪数据包的路径:
使用 ping 能够判断网络通还是不通,比如请求超时,你就不能判断什么位置出现的网络故障造成的请求超时。使用 pathping 命令能跟踪数据包的路径,能够查出故障点,并且能够计算路由器转发丢包率和链路丢包率以及延迟,据此能够判断出网络拥塞情况。
互联网的路由选择协议
路由选择协议的核心就是路由算法,一个理想的路由算法应该以下特点:
- 算法必须是正确的和完整的:沿着各路由表所指引的路由,分组一定能够最终到达目的网络和目的主机
- 算法在计算上应简单
- 算法应能适应通信量和网络拓扑的变化:即要有自适应性。
- 算法应具有稳定性
- 算法应该是公平的
- 算法应该是最佳的
路由选择包括静态和动态:
- 静态(非自适应路由选择):简单和开销较小,但不能及时适应网络状态的变化,适用于简单的小网络
- 动态(自适应路由):能较好地适应网络状态的变化。但实现起来较为复杂,开销比较大。
- 互联网采用的路由选择协议主要是自适应、分布式路由选择协议,由于以下两个原因,互联网采用分层次的路由选择协议:
- 互联网的规模非常大,如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大
- 许多单位不愿意外界了解自己单位网路的布局细节和本部门所采用的路由选择协议,但同时还希望连接到互联网上。
为此,把整个互联网划分为许多较小的自治系统 AS(autonomous system)。自治系统 AS 是在单一技术管理下的一组路由器,这些路由器使用一种自治系统内部的路由选择协议和共同的度量。一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。
这样就把路由选择协议划分为两大类:
- 内部网关协议 IGP(Interior Gateway protocol): 也叫作域内路由选择,即在一个自治系统内部使用的路由选择协议,如 RIP 和 OSPF 协议。
- 外部网关协议 EGP(External Gateway Protocol):也叫作域间路由选择,若源主机和目的主机处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。
内部网关协议 RIP
RIP 是一种分布式的基于距离向量的路由选择协议。RIP 要求每一个路由器都要维护从它自己到其他每一个目的网络距离记录。
距离的定义:从一个路由器到直接连接的网络的距离定义为 1/0,其中每经过一次路由器就加 1,也称为 “跳数”。
分布式路由的特点就是:每一个路由器都要不断地和其他一些路由器交换路由信息,周期性广播。
RIP 协议的特点:
- 仅和相邻路由器交换信息。
- 路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表,包括到本自治网络的最短距离,以及到每个网络应经过的下一跳路由器。
- 按照固定的时间间隔交换路由信息。
- 路由器刚刚开始工作时,它的路由表是空的,经过若干次更新后,所有路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
- 距离向量算法:找出每个目的网络的最短距离算法。
RIP 的工作流程
收到相邻路由器(其地址为 X)的一个 RIP 报文:
- 先修改此 RIP 报文中的所有项目:把 “下一跳” 字段中的地址都改为 X,并把所有的 “距离” 字段的值加 1。
- 对修改后的 RIP 报文中的每一个项目,重复以下步骤:
若项目中的目的网络不在路由表中,则把该项目加到路由表中。
否则:若下一跳字段给出的路由器地址是同样的,则把收到的项目替换原路由表中的项目。
否则:若收到项目中的距离小于路由表中的距离,则进行更新,
否则,什么也不做。 - 若 3 分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为 16(距离为 16 表示不可达)。
RIP 协议的优缺点:
- RIP 存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。
- RIP 协议最大的优点就是实现简单,开销较小。
- RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
- 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。
内部网关协议 OSPF
OSPF 协议的基本特点:
- 开放:“开放” 表明 OSPF 协议不是受某一家厂商控制,而是公开发表的。
- 最短路径优先:“最短路径优先” 是因为使用了 Dijkstra 提出的最短路径算法 SPF。
- 分布式:是分布式的链路状态协议。
OSPF 只是一个协议的名字,它并不表示其他的路由选择协议不是 “最短路径优先”。
三个要点:
- 洪泛法:向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
- “链路状态” 就是说明本路由器都和哪些路由器相邻,以及该链路的 “度量”(metric)。
- 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
链路状态数据库:
由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库。这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。OSPF 的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF 的更新过程收敛得快是其重要优点。
OSPF 划分为两种不同的区域:
划分区域:
划分区域的好处就是将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。OSPF 使用层次结构的区域划分。在上层的区域叫作主干区域 (backbone area)。主干区域的标识符规定为 0.0.0.0。主干区域的作用是用来连通其他在下层的区域。
OSPF 直接用 IP 数据报传送:
OSPF 不用 UDP 而是直接用 IP 数据报传送。OSPF 构成的数据报很短。这样做可减少路由信息的通信量。数据报很短的另一好处是可以不必将长的数据报分片传送。分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。
OSPF 的其他特点:
- OSPF 对不同的链路可根据 IP 分组的不同服务类型 TOS 而设置成不同的代价。因此,OSPF 对于不同类型的业务可计算出不同的路由。
- 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫作多路径间的负载平衡。
- 所有在 OSPF 路由器之间交换的分组都具有鉴别的功能。
- 支持可变长度的子网划分和无分类编址 CIDR。
- 每一个链路状态都带上一个 32 位的序号,序号越大状态就越新。
OSPF 的五种分组类型:
- 类型 1,问候 (Hello) 分组。
- 类型 2,数据库描述 (Database Description) 分组。
- 类型 3,链路状态请求 (Link State Request) 分组。
- 类型 4,链路状态更新 (Link State Update) 分组, 用洪泛法对全网更新链路状态。
- 类型 5,链路状态确认 (Link State Acknowledgment) 分组。
OSPF 的其他特点:
- OSPF 还规定每隔一段时间,如 30 分钟,要刷新一次数据库中的链路状态。
- 由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF 协议要比距离向量协议 RIP 好得多。
- OSPF 没有 “坏消息传播得慢” 的问题,据统计,其响应网络变化的时间小于 100 ms。