网络层(IP协议+ICMP协议)

  • 网络层向上只提供简单灵活的、无连接的、尽量大努力的数据报服务,进程之间的通信的可靠性由运输层负责。
    这样的话,网络造价大大降低,运行方式灵活。
  • 网际层IP是用来使互联起来的许多计算机网络能够进行通信。

一、网际协议IP

与IP协议配套使用的还有三个协议:

地址解析协议ARP:通过IP地址,找到相应的硬件地址。
网际控制报文协议ICMP;
网际组管理协议IGMP

ICMP和IGMP经常使用IP协议,IP协议经常使用ARP协议。

1.虚拟互联网络:

网络互连需要的中间设备:

  • 物理层使用的中间设备:转发器
  • 数据链路层:网桥或桥接器
  • 网络层:路由器
  • 运输层+应用层:网关
    当中间设备是转发器和网桥时,这仅仅是把一个网络扩大了,并不能称之为网络互连。网关比较负责,目前使用的少,因此,我们现在讨论网络互连时,都是使用路由器进行网络互连和路由选择。路由器其实是一台专用计算机,用来在互联网中进行路由选择。

计算机网络通过路由器连接起来,由于互连的计算机网络都使用相同的IP协议,因此可以把互连以后的计算机网络堪称一个虚拟互联网络。

例如:互联网中的源主机H1要把一个IP数据报发送给目的主机H2,主机H1先查看自己的路由表,看目的主机是否在本网络中,如是,则不需要经过任何路由器而是直接交付。如果不是,把IP数据报发送给某个路由器(R1),R1查看自己的路由表,知道把数据转发给R2进行间接交付,这样一致转下去,最后路由器R5知道自己是和H2连接在同一个网络中,于是把数据直接交付目的主机H2.
源主机和目的主机的协议栈是五层,路由器的协议栈是三层。
网络层(IP协议+ICMP协议)_第1张图片
2.分类的IP地址
IP地址就是给互联网上的每一个主机(或路由器)的每一个接口分配一个全世界唯一的32位标识符。
IP地址={<网络号>,<主机号>}
网络号:标志主机所连接的网络,一个网络号在整个因特网中必须是唯一的。

当一个单位申请了一个IP地址时,实际上是获得了具有同样网络号的一块地址,其中具体的每个主机号则由单位自行分配,只要无重复的主机号就行。
IP地址表示:(点分十进制记法)二进制表示:每八位一个空格,共四部分。每部分表示成十进制数,用“.”隔开。

常用的三种类别的IP地址:

(1)A类地址网络号1-1267位可用,可指派的网络数=2^7-2(去除全0全1)全0表示this(本网络),全1作为本地软件环回测试本主机的进程之间的通信之用。
主机号:3字节 A类网络中的最大主机数:2^24-2(去掉全0全1)全0:该主机连接到的单个网络地址,比如:一个主机的IP地址为5.6.7.8,则它的网络地址是5.0.0.0
全1:该网络上的所有主机。
IP地址空间:2^32个地址,
A类地址 2^31个地址。
(2)B类地址: 网络号128.1-192.255:共16为(10已经固定,14位可用,总数:2^14-1),网络号字段不会出现全0全1的情况,但是128.0.0.0是不指派的,指派的最小网络地址:128.1.0.0。
主机数2^16-2;
(3)C类地址: 网络号192.0.1–223.255.255:共24位(110已固定,21位可分配,总数是
2^21-1)从192.0.1.0开始指派。
2^8-2个主机数。
(4)D类地址:1110+多播地址
(5)E类地址:1111+今后使用

3.IP地址的特点
(1)每个IP地址由网络号和主机号组成,申请时只分配网络号,主机号由单位自行分配。路由器仅根据目的主机所连接的网络号来转发分组,不考虑主机号,这样使路由表中的项目数大幅度减少,从而减少了路由表所占的存储空间以及查询路由表的时间
(2)实际上IP地址是标志一个主机(或路由器)和一条链路的接口。当一个主机同时连接到两个网络时,该主机必须同时具有两个相应的IP地址,其网络号必须不同,这种主机称为多归属主机。当路由器连接到多于两个网络时,一个路由器也要有多个IP地址。
(3)一个网络:具有相同网络号的主机的集合。具有不同网络号的局域网必须使用路由器互连,所以路由器的每一个接口都有一个不同的网络号的IP地址。
(4)因特网同等对待每一个IP地址。

4.IP地址与硬件地址
物理地址是数据链路层和物理层使用的地址
IP地址是网络层和以上各层使用的地址,是一种逻辑地址。(IP地址是逻辑地址是因为IP地址是用软件实现的)

发送数据时,数据从高层下到低层,然后菜刀通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成MAC帧了。MAC帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在MAC帧的首部中。

如下图:
三个局域网用两个路由器R1和R2互连起来。现在主机H1要和H2通信。IP地址分别为:IP1,IP2,硬件地址分别为:HA1,HA2。通信的路径是:H1->R1转发->R2转发->H2.路由器R1有两个硬件地址:HA3和HA4.

  • 转发过程中,IP数据报的源地址和目的地址一直都是: IP1,IP2 但是MAC帧首部的地址:源地址和目的地址一直在变。
  • 路由器只根据目的站的IP地址的网络号进行路由选择。
  • 在局域层的链路层,只能看见MAC帧
  • 尽管互连起来的网络的硬件地址体系各不相同,但IP层抽象的屏蔽了这些细节。使用统一的、抽象的IP地址研究主机与主机或路由器之间的通信。

5.地址解析协议ARP

  • 通过IP地址找到硬件地址,提供给数据链路层使用。

  • 地址解析协议:主机ARP高速缓存中应存放存放IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)

  • 每一个主机都设有ARP高速缓存:里面是本局域网上的各主机和路由器的IP地址到硬件地址的映射表。
    应用:

  • 在同一个局域网中,如果主机A向主机B发送IP数据报时,就现在ARP高速缓存中查看有无主机B的IP地址,如果有,就在ARP中查到其硬件地址,再把硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。

  • 如果主机A的映射表中没有主机B的IP地址,则ARP进程会发出一个广播:我的IP地址时209.0.0.5,硬件地址是00-00-C0-15-AD-18.我想知道209.0.0.6主机的硬件地址。

  • 然后会有主机B 会发送ARP响应:”我是209.0.0.6,我的硬件地址是08-00-2B-00-EE-0A“

  • 主机A收到后,就在其ARP高速缓存中写入主机B的IP地址和硬件地址的映射。收到A的ARP请求的主机,都会把A的地址映射写到自己的ARP高速缓存中。

  • ARP中保存的地址映射是有生存周期的,一到期就自动删除。

  • 如果源主机和目的主机不在一个局域网中
    则需要路由器的帮助。需要获得路由器的硬件地址,然后再一步一步转发。

问题:既然在网络链路中传动的帧是按照硬件地址找到目的主机的,为什么我们不直接使用地址进行通信呢?而使用抽象的IP地址并调用ARP来寻找响应的硬件地址呢?

这是因为:全世界各种各样的网络,使用不同的硬件地址,要进行非常负责的硬件地址转换工作,所以使用统一的IP地址就把复杂的问题简单化了。

6.IP数据报的格式
IP数据报:首部+数据。首部固定长度20字节。
首部校验和:只校验数据首部,不包括数据部分。这些数据每经过一个路由器,路由器都要重新计算一下首部校验和

7.IP层转发分组的流程
在路由表中,对每一条路由最重要的信息:
{目的网络地址,下一跳地址}

分组转发算法:
(1)从数据报的首部提取目的主机的IP地址D,得出目的网络地址N
(2)若N就是与此路由器直接连接的某个网络地址,则进行直接交付,直接把数据交付给目的主机(包括把目的主机地址D转换成具体的硬件地址,把数据报封装成MAC帧,再发送此帧)
否则,执行(3)
(3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器。否则,执行(4)
(4)若路由表中有到达网络N的路由,则把数据报传送给路由表中指明的下一跳路由器,否则,执行(5)
(5)若路由表中有一个默认路由,则把数据报传送给路由表中指明的默认路由器,否则,执行(6)
(6)报告转发分组出错。
当路由器收到一个待转发的数据报时,从路由表中得出下一跳路由器的IP地址后,不是把这个地址填入IP数据报,而是通过将IP地址转换成硬件地址,并将此硬件地址放在链路层的MAC帧首部,通过这个硬件地址找到下一跳路由器的。

8.划分子网

为什么从两级IP地址到三级IP地址?

(1)IP地址空间的利用率有时很低:比如一个单位申请了一个B类地址,但所连接的主机数并不多,但又不愿意申请你个C类地址,因为考虑到今后的发展。造成IP地址浪费。
(2)给每一个物理网络分配一个网络号会使路由表变的太大因而使网络性能变坏。
(3)两级IP地址不够灵活:三级网络可以满足以下情况:如果一个单位需要新开通一个网络,二级IP地址就需要单位再去因特网管理机构申请新的,但三级IP地址就可以让一个单位随时灵活地增加本单位的网络。

划分子网的基本思路:
(1)划分子网是一个单位内部的事情,这个单位对外依然表现为一个网络。
(2)划分子网的方法:从网络的主机号借用若干位作为子网号,主机号也相应的减少了同样的位数。
IP地址:{<网络号>,<子网号>,<主机号>}
(3)凡是从其他网络发送给本单位某个主机的IP数据报,仍然根据IP数据报的目的网络号找到连接在本单位网络上的路由器。但此路由器在收到IP数据报后,再按目的网络和子网号找到目的子网,把IP数据报交付给目的主机。

子网掩码

  • 将网络号+子网号的位置都置1,主机号的位置都置0.
  • 将子网掩码与目的IP地址进行与操作,找到其子网的网络地址。
  • 路由器在和相邻的路由器交换路由信息时,必须把自己所在网络的子网掩码高速相邻路由器。
  • 路由器中的路由表的每一个项目中包括:目的网络地址+子网掩码
  • 若一个路由器连接在两个子网上,就拥有了两个网络地址和两个子网掩码。
  • 子网数根据子网号subnet-id计算出来。若subnet-id有n位,则共有2^n-2种可能的子网数(去掉全0全1)
  • B类地址的子网号的位数:没有0,1,15,16这四种情况。


同样的IP地址和不同的子网掩码可以得出相同的网络地址。

9.使用子网时分组的转发
使用了子网划分后,路由表的内容:目的网络地址、子网掩码、下一跳地址
路由器转发分组算法:
(1)从数据报的首部提前目的IP地址D
(2)先判断是否为直接交付。对路由器直接连接的网络逐个检查:(每个网络都有一个网络地址+子网掩码)用各网络的子网掩码和D逐位进行”与“操作,看结果是否和相应的网络地址匹配。如果匹配,则把分组进行直接交付(把D转换成物理地址,把数据报封装成帧发出去)。否则就是简介交付,执行(3)
(3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表种所指明的下一跳路由器。否则,执行(4)
(4)对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D逐位相”与“,其结果是N,若N与改行的目的网络地址匹配,就把数据报传送给该行指明的下一跳路由器。否则,执行(5)
(5)若路由器有一个默认路由,则把数据报传送给路由表中所指明的默认路由器。否则,执行(6)
(6)报告转发分组报错。

源主机H1向目的主机H2发送的分组的目的地址是H2的IP地址128.30.33.138

  • 首先,128.30.33.138与子网1(本网络)的子网掩码进行与操作,得出128.30.33.128,与子网1的网络地址不一样。需要进行间接交付:
  • 目的IP地址分别与R1中的路由表中的子网掩码进行与操作,如果结果和对应的目的网络地址一样,就执行下一跳。
  • 我们发现,路由表中的第二行是匹配的,R1把分组从接口1直接交付主机H2.

10.无分类编址CIDR(构成超网)
CIDR的特点:
(1)IP={网络前缀,子网号}。在IP地址后面加上“/”,然后写上网络前缀所占的位数
(2)CIDR把网络前缀相同的连续的IP地址组成一个“CIDR地址块”,已知IP地址:128.14.35.7/20(20是网络前缀,12位是主机号)

  • CIDR使用32位的地址掩码,地址掩码由一串1和一串0组成,1的长度就是网络前缀的长度。
  • CIDR使用地址掩码也可以称为子网掩码: /20地址块的地址掩码:11111111 11111111 11110000 00000000
  • 一个CIDR地址块中有很多地址,在路由表中就可以利用CIDR地址块来查找目的网络。这种地址的聚合常称为:路由聚合。它使得路由表中的一个项目可以表示原来传统分类地址的很多个路由。路由聚合也称为构成超网。
  • "CIDR 不使用子网"是指:CIDR并没有在32位地址中指明若干位作为子网字段。
  • 例如地址:192.199.170.82/27不仅表示IP地址是192.199.170.82,还表示这个地址块的网络前缀有27位,5位主机号。包含32个IP地址数(2^5=32).这个地址块的最小地址:192.199.170.64,最大地址:192.199.170.95。因为82的二进制是01010010,后5位是主机号,最小值:01000000(64),最大值:01011111(95).
  • 使用CIDR的好处:可以更加有效的分配IPv4的地址空间,可根据客户的需求分配适当大小的CIDR地址块,然而在分类为地址的环境中,向一个组织分配IP地址,就只能以/8,/16,/24为单位来分配,这样不灵活。

例如:ISP已拥有地址块:206.0.64.0/18,现在某大学需要800个IP地址,ISP可以给大学分配一个地址块:206.0.68.0/22,它包含(2^10=1024个IP地址)。这个ISP拥有64个C类网络,如果不采用CIDR技术,则在与该ISP的路由器交换路由信息的每一个路由器的路由表中,就需要64个项目。但采用地址聚合后,就只需用路由聚合后的一个项目206.0.64.0/18就能找到该ISP,同理,这个大学有四个系,在ISP内的路由器的路由表中,也需要使用206.0.68.0/22这一个项目。
把四个系的路由聚合为大学的一个路由(即构成超网),是将网络前缀缩短。网络前缀越短,其地址块所包含的地址数越多。而在三层结构的IP地址中,划分子网是使网络前缀变长。

最长前缀匹配:

  • 在使用CIDR时,IP地址由网络前缀和主机号组成,路由表中的项目由**“网络前缀”和“下一跳地址”**组成。在查找路由表时可能得到不止一个匹配结果,我们应当从匹配结果中选择具有最长网络前缀的路由。(最长前缀匹配
  • 例如:四系希望ISP转发给四个系的数据报不经过大学的路由器直接转发给四个系,但又不愿意改变自己使用的IP地址块。因此,在ISP的路由器的路由表中,至少要以下两个项目:大学和四系。现在ISP收到一个数据报,其目的IP地址D=206.0.71.130。把D分别和路由器中的这两个项目的掩码逐位相“与”,大学和四系都匹配,但选择具有最长网络前缀的路由即四系。
  • 例如:可以将世界划分称四大地区,每一地区分配一个CIDR地址块,这样IP地址就和地理位置相关联,好处:大大压缩路由表中的项目数,例如:凡是从中国发往北美的数据报都现发送交给美国的一个路由器,因此,路由表中使用一个项目就好了。

11.网际控制报文协议ICMP

  • 使用该协议的目的:为了更有效的转发IP数据报和提高交付成功的机会。
  • ICMP允许主机或路由器报告差错情况和提供异常情况的报告。ICMP报文装在IP数据报中,作为数据部分。
  • ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。

    ICMP报文的种类:ICMP差错报告报文 和 ICMP询问报文
  • ICMP报文的前4个字节是统一的格式,共有三个字段:类型、代码和校验和。接着的四个字节的内容与ICMP的类型有关。最后面是数据字段,长度取决于ICMP的类型。
  • 检验和字段用来检验整个ICMP报文,IP数据报首部的检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP报文不产生差错。

ICMP的应用:

  • ICMP的一个重要应用就是分组间探测PING,用来检测主机之间的连通性。PING使用了ICMP 回送请求 与 回送回答报文 ,PING是应用层直接使用网络层ICMP的一个例子,没有通过运输层的TCP或UDP。

你可能感兴趣的:(计算机网络)