【简记】Computer Networking——network layer(part one)

来源:互联网 发布:java解析器是什么 编辑:程序博客网 时间:2024/06/05 00:50

本part主要内容:

  1. 虚拟互连网络的概念
  2. IP地址与物理地址的关系
  3. 传统的分类的IP地址(包括子网掩码)和无分类域间路由选择CIDR

4.1 网络层提供的两种服务

虚电路服务(电信网)和数据报服务(因特网)。

因特网采用的设计思路:

  • 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
  • 网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
  • 网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。

尽最大努力交付的好处:

  • 由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。
  • 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)。
  • 采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。

这里写图片描述
这里写图片描述


4.2 网际协议IP

IP 协议配套使用的还有三个协议:
地址解析协议 ARP(Address Resolution Protocol)
网际控制报文协议 ICMP(Internet Control Message Protocol)
网际组管理协议 IGMP(Internet Group Management Protocol)

这里写图片描述

===
4.2.1 虚拟互连网络

网络互相连接起来 要使用一些中间设备:
物理层中继系统:转发器(repeater)。
数据链路层中继系统:网桥或桥接器(bridge)。
网络层中继系统:路由器(router)。
网桥和路由器的混合物:桥路器(brouter)。
网络层以上的中继系统:网关(gateway)。

当中继系统是转发器或网桥时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,而这仍然是一个网络。

互联网都是指用路由器进行互连的网络。

由于历史的原因,许多有关 TCP/IP 的文献将网络层使用的路由器称为网关。

但是我们利用 IP 协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络。

===
4.2.2 分类的 IP 地址

IP 地址就是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。
IP 地址现在由因特网名字与号码指派公司ICANN (Internet Corporation for Assigned Names and Numbers)进行分配

先介绍分类IP地址的编址方式:
IP 地址 ::= { <网络号>, <主机号>}
这里写图片描述

  • A,B,C都是单播地址(一对一通信),是最常用的。
  • A,B,C的网络号字段长度不同(依次递增),主机号长度也不同(依次递减),最前面的三位是类别位。
  • D类地址用于多播。

这是最早的分类规则(现在已不用),但概念清晰,适用于教学引入环节。

起初使用这种编码方式,是考虑到各种网络的差异很大,比如说主机的数量,所以某单位可以根据自己的需求选择申请的地址类型。

常用的三种类别的IP地址
这里写图片描述

A类地址
网络号减2的原因:
第一:IP地址全0标识“this”,意思是本网络,是个保留地址
第二:IP地址127(01111111)保留作为本地软件环回测试本主机的进程之间的通信之用。目的地址是环回地址的IP数据报不会出现在任何网络上。Tomcat运行时分配的虚拟IP好像就是127开头的。

主机号减2的原因:
全0的主机号字段表示该IP地址是“本主机”连接到的单个网络地址
全1的主机号字段表示该网络上的所有主机

B类和C类地址,减去出类别号以外全0的网络号

IP 地址的一些重要特点 :
1. IP 地址是一种分等级的地址结构。分两个等级的好处是:IP 地址管理机构在分配 IP 地址时只分配网络号;路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
2. 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口。
当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机(multihomed host)。
由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址。
3. 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。

这里写图片描述

  • 在同一个局域网上的主机或路由器的IP 地址中的网络号必须是一样的。
  • 路由器总是具有两个或两个以上的 IP 地址。路由器的每一个接口都有一个不同网络号的 IP 地址。
  • 两个路由器直接相连的接口处,可指明也可不指明 IP 地址(图中的N1,N2,N3)。如指明 IP 地址,则这一段连线就构成了一种只包含一段线路的特殊“网络” 。现在常不指明 IP 地址。

===
4.2.3 IP地址与硬件地址
这里写图片描述
(在数据链路层看不到数据报的IP地址)

这里写图片描述
路由器有N个硬件地址和N个IP地址。

路由器只根据目的站的 IP 地址的网络号进行路由选择 ,两个路由器的 IP 地址并不出现在 IP 数据报的首部中 。但MAC帧的首部一直在变化。

IP层抽象的互联网屏蔽了下层很复杂的细节在抽象的网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机和主机或主机和路由器之间的通信 。

===
4.2.4 地址解析协议ARP

不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。

每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。

当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。

当找不到主机B的IP地址时,主机A启动ARP:
这里写图片描述

ARP 高速缓存的作用:
1. A在向B发送数据报时,就把自己的ip地址和对应的硬件地址写在里面了,下次B向A发送时,就没比要再用广播方式发送请求
2. ARP会为每个映射都设置生存时间,因为有可能发生网络适配器更换的情况

应当注意的问题:
ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题,自动解析。
如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。

使用 ARP 的四种典型情况 :

  • 发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
  • 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
  • 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
  • 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成。

===
4.2.5 IP数据报的格式

一个 IP 数据报由首部和数据两部分组成。
首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
在首部的固定部分的后面是一些可选字段,其长度是可变的。

这里写图片描述
(在TCP/IP标准中,经常以32位为单位描述)

各字段介绍:

  1. 版本——占 4 位,指 IP 协议的版本目前的 IP 协议版本号为 4 (即 IPv4)
  2. 首部长度——占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节)因此 IP 的首部长度的最大值是 60 字节。
  3. 区分服务——占 8 位,用来获得更好的服务
  4. 总长度——占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节(但现实中以太网最大1500字节)。总长度必须不超过最大传送单元 MTU。如果目标主机无法接受超过多少字节的数据报,就要进行分片。
  5. 标识(identification) 占 16 位,它是一个计数器,用来产生数据报的标识。 不等于序号,因为IP是无连接服务。 当需要分片时,相同的标识字段的值使分片后的各数据报片最后能正确地组装。
  6. 标志(flag) 占 3 位,目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)。MF=1 表示后面“还有分片”。MF  0 表示最后一个分片。标志字段中间的一位是 DF (Don’t Fragment) 。只有当 DF = 0 时才允许分片。
  7. 片偏移(13 位)指出:较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
    这里写图片描述
  8. 生存时间(8 位)记为 TTL (Time To Live)数据报在网络中可通过的路由器数的最大值。防止未到达的数据报无限制地兜圈子。每经过一次路由该值减1。
  9. 协议(8 位)字段指出此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理过程。
  10. 首部检验和(16 位)字段只检验数据报的首部不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
    这里写图片描述
  11. 源地址和目的地址都各占 4 字节

IP 数据报首部的可变部分:实际上这些选项很少被使用。

===
4.2.6 IP 层转发分组的流程

举例:
这里写图片描述

在路由表中,对每一条路由,最主要的是(目的网络地址,下一跳地址)

默认路由(default route)
这里写图片描述

只要目的网络不是 N1 和 N2,就一律选择默认路由,把数据报先间接交付路由器 R1,让 R1 再转发给下一个路由器。

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


4.3 划分子网和构造超网

4.3.1 划分子网

两级IP地址的部分缺点:

  • IP 地址空间的利用率有时很低。(比如10BASE-T规定最大节点是1024)
  • 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
  • 两级的 IP 地址不够灵活。(比如某个单位需要在新地点马上开通一个新的网络)

解决办法——划分子网(又称子网寻址或子网路由选择)

从 1985 年起在 IP 地址中又增加了一个“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址。

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

特点:
1.划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
2.从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。

一个B类网络

  1. 凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号net-id,先找到连接在本单位网络上的路由器。
  2. 然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。
  3. 最后就将 IP 数据报直接交付目的主机。

===
子网掩码

Q:从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。如何将其发送到指定的子网。
A:使用子网掩码

这里写图片描述

※使用子网掩码和IP地址进行逐位与操作,就可以得到网络地址(不论有没有划分子网)

子网掩码是一个重要属性:

  • 子网掩码是一个网络或一个子网的重要属性。
  • 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
  • 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
  • 若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码。

子网号为全0或全1的情况,在CIDR中被允许,但尽量少用。

===
4.3.2 使用子网掩码的分组转发过程
(1) 从收到的分组的首部提取目的 IP 地址 D。
(2) 先判断是否直接交付,对路由器直接相连的网络进行检查。先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行(3)。
(3) 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行(4)。
(4) 对路由表中的每一行的子网掩码和 D 逐位相“与”,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行(5)。
(5) 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行(6)。
(6) 报告转发分组出错。


4.3.3 无分类编址 CIDR (构成超网)

正式名字是无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。

出现的背景:92年B类地址就分配了一半,2011年ipv4地址已经耗尽。

无分类的两级编址的记法是(消除了之前提到的传统概念,又回到了两级地址):
IP地址 ::= {<网络前缀>, <主机号>}

CIDR 还使用“斜线记法”(slash notation),它又称为CIDR记法,即在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数,CIDR中称为地址掩码,也可叫做子网掩码)。

eg: 128.14.35.7/20 表示的地址块共有 2^12 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位,但全0和全1的地址一般不用)。

CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。

一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。(why?因为128.14.35.7/20这个例子,将前24位填满,就相当于包含了16个C类地址)

路由聚合也称为构成超网(supernetting)。

这里写图片描述
这个 ISP 共有 64 个 C 类网络。如果不采用 CIDR 技术,则在与该 ISP 的路由器交换路由信息的每一个路由器的路由表中,就需要有 64 个项目。但采用地址聚合后,只需用路由聚合后的 1 个项目206.0.64.0/18 就能找到该 ISP。

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

应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配(longest-prefix matching)。

====
使用二叉搜索查找路由表(针对最长匹配原则)

为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie)。





joke
这里写图片描述

阅读全文
0 0