计算机网络系列四 -- 网络层详解(二)

1 IP 数据报

我们在上一篇博客已经提到,IP 协议提供的是不可靠,无连接的数据报传输服务,而 IP 层提供的服务是通过对数据报的封装与拆封来实现的。IP 数据报的格式分为报头区和数据区两大部分,其中报头区是为了正确传输高层数据而加的各种控制信息,而数据区则包括高层协议需要传输的数据。

下面内容参考至:IP数据报格式详解

1.1 IP 数据报格式

在这里插入图片描述

1.2 IP 数据报各部分功能介绍

  • 版本号:占用4位,表示该 IP 数据报使用的 IP 协议版本。
  • 头长度:占用4位,指出整个报头的长度(包括选项),以32位二进制数为一个计数单位,接收端通过此域可以计算出报头在何处结束及从何处开始读数据。一个没有任何选项的普通 IP 数据报中该字段的值是5(即20个字节的长度)。
  • 服务类型:占用8位,用于规定本数据报的处理方式。优先权:数字越大优先权越高,路由器可以对其进行拥塞控制,D位置1时,数据报请求以短延迟信道传输,0表示正常延时,T位置1时,数据报请求以高吞吐量信道传输,0表示普通。R位置1时,数据报请求以高可靠性信道传输,0表示普通。目前在 Internet 中使用的 TCP/IP 协议大多数情况下网络并未对服务类型进行处理,但一些重要的网际应用协议中都设置了建议使用的服务类型值。
    在这里插入图片描述
  • 总长度:占用16位,指整个 IP 数据报的长度(报头区+数据区),单位为字节。利用头部长度字段和总长度字段就可以计算出IP数据报中数据内容的起始位置和长度。由于该字段长度为16位二进制数,因此理论上 IP 数据报最长可达65536个字节。
  • 生存时间:又称 TTL,占用8位,指定数据报可以在网络中经过的最大路由器数。TTL 的初始值由源主机设置,一旦经过一个处理它的路由器,它的值就减1。当该字段为0时,数据报就被丢弃,并发送 ICMP 报文通知源主机。可使用 TTL 防止进入一个循环回路时,数据报无休止地传输下去。
  • 上层协议标识:占用8位,指定上层协议,例如 TCP 协议为6。
  • 校验和:占用16位,用于协议头数据有效性的校验,可以保证 IP 报头区在传输时的正确性和完整性。头部检验和字段是根据 IP 协议头计算出的检验和,它不对头部后面的数据进行计算。
  • 源地址:占用32位,发送端 IP 地址
  • 目的地址:占用32位,目的端 IP 地址。
  • 选项:用来实现对数据报传输过程中的控制,如规定数据报要经过的路由,或者进行网络测试,如一个数据报传输过程中经过了哪些路由器。

标识,标志,偏移量三个字段将在我们下面实现 IP 数据报分片和重组再另外介绍。

1.3 最大传输单元

最大传输单元,即 MTU,表示数据帧的最大长度。IP 数据报在网络上传输时,可能要经过多个物理网络才能从源端传输到目的端,不同的网络由于链路层和介质的物理特性不同,因此在进行数据传输时,对数据帧的最大长度都有一个限制。

同一个网络上的两台主机之间通信时,该网络的 MTU 值是确定的,不存在分片问题。分片问题一般只存在于具有不同 MTU 值的互联网中。由于现在互联网主要使用路由器进行网络连接,因此分片工作通常由路由器负责。

当两台主机之间的通信要通过多个具有不同 MTU 值的网络时,MTU 的瓶颈是通信路径上最小的 MTU 值,它被称为路径 MTU。在以太网中,MTU 为1500字节。

1.4 IP 数据报分片和重组

1.4.1 分片

把一个数据报为了适合网络传输而分成多个数据报的过程称为分片,被分片后的各个 IP 数据报可能经过不同的路径到达目标主机。一个 IP 数据报在传输过程中可能被分片,也可能不被分片。如果被分片,分片后的 IP 数据报和原来没有分片的 IP 数据报结构是相同的,即也是由 IP 头部和 IP 数据区两个部分组成:
在这里插入图片描述
分片后的 IP 数据报,数据区是原 IP 数据报数据区的一个连续部分,头部是原 IP 数据报头部的复制,但与原来未分片的 IP 数据报头部有两点主要不同:标志和片偏移:

  • 标志:占用3位,DF 为1时表示不可分片,MF 为1表示该数据报不是分片之后的最后一个数据报
    在这里插入图片描述
  • 片偏移:占用13位,表示 IP 数据报被分片后,各片数据区在原来 IP 数据区中的位置,以8个字节为单位进行计算,在上个例子中,分片1的偏移是0,分片2的偏移是75,分片3的偏移是150。
1.4.2 重组

当分片的 IP 数据报到达最终目标主机时,目标主机对各分片进行组装,恢复成源主机发送时的 IP 数据报,这个过程叫做 IP 数据报的重组。

在 IP 数据报头部中,标识用16位二进制数表示,它唯一地标识主机发送的每一份数据报。在一个数据报被分片时,每个分片仅把数据报“标识”字段的值原样复制一份,所以一个数据报的所有分片具有相同的标识。

目标端主机根据标识,标志,偏移量三个字段重组数据报。

扫描二维码关注公众号,回复: 8612488 查看本文章

2 IP 地址分类

IP 地址由4段组成,每个字段为1个字节,共4个字节,也就是加起来有32位。事实上,IP 地址是唯一的32位标识符。

2.1 IP 地址的组成

IP 地址由下面两部分组成:

  1. 网络地址:表示主机/路由器连接到的网络,表示其属于互联网的哪一个网络
  2. 主机地址:表示主机/路由器,表示其属于该网络中的哪一台主机

简言之,IP 地址 = 网络地址 + 主机地址。

2.2 IP 分类

IP 地址分为A、B、C三类及D、E两类特殊地址。注意全0或者全1的地址保留不用。

2.2.1 A类地址
  • 地址范围:1.0.0.0-126.255.255.255(为了统计方便,算上了全0全1的情况,其他的类似)
  • 网络号范围: 1 ~ 126
  • 默认子网掩码:255.0.0.0
  • 私有号段:10.0.0.0-10.255.255.255
  • 规模:一般用于大型网络
2.2.2 B类地址
  • 地址范围:128.1.0.1-191.255.255.254
  • 网络号范围:128.1 ~ 191.255
  • 默认子网掩码:255.255.0.0
  • 私有号段:172.16.0.0-172.31.255.255
  • 规模:中等规模网络
2.2.3 C类地址
  • 地址范围:192.0.1.1-223.255.255.254
  • 网络号段范围:192.0.1 ~ 223.255.255
  • 子网掩码:255.255.255.0
  • 私有号段:192.168.0.0-192.168.255.255
  • 规模:小型网络
2.2.4 D类地址

D类地址为多播地址,其地址范围为224.0.0.1-239.255.255.254,网络号为224~239。

2.2.5 E类地址

保留地址,网络号为240~255。

2.2.6 特殊地址
  • 127.0.0.1 为 localhost,即本机 IP
  • 0.0.0.0 对应当前主机
  • 255.255.255.255 为当前子网的广播地址
  • 网络号全0的地址为保留地址,意思为本网络,
  • 网络号为127的地址为保留地址,用于回路测试

3 子网掩码

3.1 什么是子网掩码?

子网掩码是一个应用于 TCP/IP 网络的32位二进制值,可以屏蔽 IP 地址的一部分,从而分离出 IP 地址中的网络部分与主机部分。根据子网掩码,我们可以进一步将网络划分为若干子网。

3.2 子网掩码的作用

两台计算机进行通信时,我们可以根据子网掩码和 IP 地址分别得到目标主机以及本机的网络号,并根据对网络号的比较查询目标主机是否在本网络上。若网络号相同,两台主机在同一个网络,通过相关的协议直接将数据包发送至目标主机即可,否则表示两台主机不在同一个网络上,可以将数据包发送给本网络的路由器,再由路由器发送至其他网络。

3.3 如何使用子网掩码

我们可以使用子网掩码分离出网络地址和主机地址,那这个过程是怎样的呢?

将二进制形式的 IP 地址与子网掩码做与运算,即可得到网络地址。再将子网掩码取反后与 IP 地址做与运算,即可得到主机地址。

3.4 子网掩码的分类

3.4.1 缺省子网掩码

在未划分子网时,网络号所有位置1,主机号所有号置0

  • A类网络缺省子网掩码:255.0.0.0
  • B类网络缺省子网掩码:255.255.0.0
  • C类网络缺省子网掩码:255.255.255.0
3.4.2 自定义子网掩码

将一个网络划分为多个子网,每一段使用不同的网络号或子网号,事实上,我们可以将主机号分为两部分:子网号和子网主机号。简单的说,未做子网划分的 IP 地址为网络号+主机号,做了子网划分之后的 IP 地址为网络号+子网号+子网主机号。

3.5 子网划分

子网划分是依靠子网掩码实现的。

在子网划分之后,IP 地址的网络号不变,从局域网外部的视角来看,这里只有一个网络,即网络号所代表的那个网络。但从局域网内部的视角看,由于每个子网的子网号是不同的,使用子网划分之后的 IP 地址与子网掩码做与运算,每个子网将得到不同的子网地址,从而实现了对网络的划分。

4 CIDR

CIDR 为无分类编址,用于构成超网。CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。

IP 地址 ::= {< 网络前缀号 >, < 主机号 >}

CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。

CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。

一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为构成超网。

在路由表中每个项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配。

5 路由器

5.1 路由器工作原理

路由器工作于网络层,主要任务为接收来源于一个网络接口的数据包,根据这个数据包中所含的目的地址,决定转发到的下一个目的地址。路由器时刻维持着一张路由表,所有的数据包的发送和转发都通过查找路由表来实现的。这个路由表可以静态配置,也可以通过动态路由协议产生。

路由器物理层从路由器的一个端口收到一个报文,上送到数据链路层。数据链路层去掉链路层封装,根据报文的协议域上送到网络层。网络层首先看报文是否是送给本机的,若是,去掉网络层封装,送给上层。若不是,则根据报文的目的地址查找路由表,若找到路由,将报文送给相应端口的数据链路层,数据链路层封装后,发送报文。若找不到路由,报文丢弃。

5.2 路由器的作用

  1. 路由:寻找路径
  2. 隔离网络:防止广播风暴,以及实现防火墙的功能
  3. 报文分片和重组:超过接口的 MTU 报文会被分片,到达目的地之后的报文会被重组
  4. 流量控制:可以实现复杂的流量控制

6 静态路由和动态路由

  • 静态路由:在路由器中设置的固定的路由表,除非网络管理员干预。否则其不会发生变化。静态路由不能对网络的改变作出反映。一般用于网络规模不大、拓扑结构固定的网络中。其优点为简单、高效、可靠,在所有路由中,静态路由的优先级是最高的,当动态路由与静态路由发生冲突,应该以静态路由为准。
  • 动态路由:网络中的路由器之间相互通信,传递路由信息,利用收到的路由信息更新路由器表的过程,能实时地适应网络结构的变化。动态路由适用于网络规模大、网络拓扑复杂的网络。

7 路由器分组转发流程

  1. 从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。(路由表项是网络号而不是 IP 地址,这样做大大减少了路由表条目数量)
  2. 若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付;
  3. 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;
  4. 若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器;
  5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;
  6. 报告转发分组出错。

8 路由选择协议

互联网使用的路由选择协议都是自适应的,能随着网络通信量和拓扑变化而自适应地进行调整。互联网可以划分为许多较小的自治系统 AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议。

那么我们可以把路由选择协议分为两类:

  1. 内部网关协议 IGP:在自治系统内部使用,如 RIP 和 OSPF
  2. 外部网关协议 EGP:在自治系统之间使用,如 BGP

8.1 内部网关协议 RIP

RIP 是一种分布式的基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为 1,跳数最多为 15,超过 15 表示不可达。

RIP 按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。

距离向量算法如下:

  1. 对地址为 X 的相邻路由器发来的 RIP 报文,先修改报文中的所有项目,把下一跳字段中的地址改为 X,并把所有的距离字段加 1;
  2. 对修改后的 RIP 报文中的每一个项目,进行以下步骤:若原来的路由表中没有目的网络 N,则把该项目添加到路由表中;否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目;否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。
  3. 若 3 分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为 16。

RIP 协议实现简单,开销小,但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。

8.2 内部网关协议 OSPF

开放最短路径优先 OSPF,是为了克服 RIP 的缺点而开发出来的。开放表示 OSPF 不受某一家厂商控制,而是公开发表的;最短路径优先是因为使用了 Dijkstra 提出的最短路径算法 SPF。

OSPF 具有以下特点:

  1. 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。
  2. 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。
  3. 只有当链路状态发生变化时,路由器才会发送信息。

所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。

8.3 外部网关协议 BGP

AS 之间的路由选择很困难,主要是互联网规模很大。并且各个 AS 内部使用不同的路由选择协议,就无法准确定义路径的度量。并且 AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。

BGP 只能寻找一条比较好的路由,而不是最佳路由。它采用路径向量路由选择协议。

每个 AS 都必须配置 BGP 发言人,通过在两个相邻 BGP 发言人之间建立 TCP 连接来交换路由信息。

9 交换机与路由器的区别

  1. 交换机工作于数据链路层,能识别 MAC 地址,根据 MAC 地址转发链路层数据帧。具有自学机制来维护 IP 地址与 MAC 地址的映射。
  2. 路由器位于网络层,能识别 IP 地址并根据 IP 地址转发分组。维护着路由表,根据路由表选择最佳路线。

参考:IP数据报格式详解
IP地址分类(A类 B类 C类 D类 E类)
子网掩码与子网划分--讲得很清楚
路由器与交换机的基本工作原理
静态路由和动态路由的区别
计算机网络学习总结(超赞!!!)

发布了113 篇原创文章 · 获赞 206 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Geffin/article/details/103290473
今日推荐