计算机网络快速入门--4--网络层

网络层关注的是如何将分组从源端沿着网络路径送到目的端,在计算机领域,网络层应该是面向连接还是无连接,曾引起了长期的讨论。


但是我们可以想象,你在网上买一个东西,这个东西要经过一个一个的运输站,那么如果你买的这个东西在路上出了问题,你应该是找快递站还是应该找卖东西的人呢?如果你找运输站,那么运输站就得找另一个运输站,直到找到卖家,而且在传输中要相互确认,这无疑增大了开销,消耗了更多的时间。所以我们现在的网络层都是采用的无连接的方式,尽最大努力的交互。


两种服务类型

虚电路服务
也就是事先规定好的线路,主机之间进行通信的时候,按照指定的路线进行通信
这里写图片描述


数据报服务
这种方式是在传输的数据前面加上目的地址,让路由器选择一条合适的路径来传输数据
这里写图片描述

比较一下两种服务的区别
这里写图片描述

网际协议

虚拟互联网

物理层中继,转发器(集线器)
数据链路层中继,网桥或者桥接器(交换机)
网络层中继,路由器
网络层以上的中继器系统,网关


上面的内容大家都应该比较熟悉了,现在来介绍一下网关,我们同一个子网内的主机要想与外界通信必须通过网关,但是如果子网内部与内部通信,进行通信的时候,不需要网关与也可以,也就是说,网关是与外界进行通信的桥梁。通常来说,网关就是路由器上与外界进行通信的一个接口。


互联网在进行通信的时候要解决一系列问题,比如说,不同的寻址方案,不同的超时控制,不同的差错控制,不同的路由选择技术,不同的用户接入机制等等,那么为了解决这些问题,在IP层诞生了一系列的协议。不管数据链路层的不同设备之间是如何处理的,我们的数据最终还是要达到网络层,通过网络层来决定最终发送的地址。

这里写图片描述

IP协议

IP地址

IP地址采用32位bit组成,IP地址主要代表的意思是网络ID和主机ID
有了网络ID和主机ID,在数据进行转发的时候就能提高效率,比如说,采用某个网段表示中国的网段,采用某个网段表示美国的网段,到时候,路由器只要发现这个地址是在哪个网段,就往哪个网段发。


32位bit的IP地址,我们将他分成四个部分,每个部分占8位,0-255,那么这时候,又可以将这4个部分分成四类

这里写图片描述

那么大家可以算一下,对于常用的ABC类的地址,一个网络下能有台主机。
以A类地址为例子,后面一共有24位bit,也就是2的24次方,全1和全0一般没有被开放使用,所以只要2的24次方-2个ip地址,同样的,可以计算出B类地址,C类地址有多少个不同的IP地址。

这里写图片描述

从上图我们可以看出,我们可以计算出每类地址是从哪个地址开始到哪个地址结束的,对于A类地址,第一位的0的地址就是A类地址,由于第一位是0,那么也就是说第一个部分从00000000到01111111的都是A类地址,转换成10进制也就是0-127,但是0这个网段一般没有被放出来使用,而127用来表示单机的地址,所以,就等于少了2个网段,一共就是128-2个网段,10开头的代表B类地址,也就是10000000到10111111,转换成10进制,也就是128-191的所有网段,代表B类地址,而110代表C类地址,也就是11000000到11011111,也就是192-223的所有网段就是C类地址的网段,这样,我们看到一个地址就能知道它是哪类地址了,同样的,根据这个,我们就知道这个地址是哪类地址了

几个特殊的IP地址

127.0.0.1 本地回环地址
169.254.0.0 windows默认地址,当自动分配不成功的使用会使用,当然这个地址不能与外界通信,但是能实现同一个子网下的地址进行通信。
保留的地址(以下地址能在内网进行通信,但是不能直接使用该地址与外网通信)
10.0.0.0 这些地址没有被分配给用户,分配给企业或者学校
172.16.0.0 - 172.31.0.0
192.168.0.0 - 192.168.255.0

子网掩码

上面介绍了ABC类地址,那么,计算机在通信的时候是如何知道这个地址是哪一类地址呢?这时候子网掩码的作用就来了,子网掩码可以标识该地址属于哪一个网络,比如说,对于A类地址,子网掩码就是11111111.00000000.00000000.00000000,用这个地址与原地址做与运算,就能知道该地址属于哪一个网段。这也就是A类地址的默认子网掩码,同样的,我们可以得出B类子网的默认子网掩码。

有了子网掩码,我们就能知道知道你的主机地址在哪一个网段了,这样就能知道你的ip属于哪一个网段了。尤其是内网,如果不是同一个网段,有可能无法通信。因为如果子网掩码不对,它可能将不是同一个网段的数据当成同一个 网段来处理,也就不会交给网关,也就是路由器,从而导致数据传传输失败。

子网划分

我们的子网掩码可以标示一个子网,例如192.168.0.x,这时候子网掩码可以是255.255.255.0,这表示这192.168.0.0-192.168.0.255,但是由于全0和全1一般不被分配来使用,所以就是192.168.0.1-192.168.0.254,如果我们想进一步划分子网,那么久就可以将子网掩码设置成11111111.11111111.11111111.10000000,转换成十进制也就是255.255.255.128,这时候,将最后一本分分成两个部分,一个是1-126(0和全1没有被使用),一个是(129-254),两个部分的网关分通常是第一个地址,也就是192.168.0.1和192.168.0.129

如果我们在家,家里的wifi装在楼下呢,这时候,我们想再装一个路由器在自己的房间用wifi,那么应该怎么做呢?由于路由器的两个接口需要在不同的网段,否则是无法通信的,也就是路由器的出接口需要与进接口在不同的网段,这时候,就可以通过子网掩码划分子网,让两个路由器处于不同的网段,一个路由器的地址我们设置成192.168.0.1,那么另外一个路由器的地址就必须设置成192.168.0.129,同时要将路由器的子网掩码设置成255.255.255.128,就能让两个路由器正常工作了。我家里是装了关猫的,楼下的路由器连光猫的接口也要与进那个路由器的接口在不同的网段,那么这时候,可以通过进一步划分子网掩码来控制,或者将那边的IP地址改成192.168.1.2,(192.168.1.1被光猫占用了),这样也能让路由器的两个接口在不同的网段。

点到点的子网掩码是多少呢?由于点到点的子网掩码只有两个主机,只需要两个地址,所以这个子网掩码最好是255.255.255.252,即253-254可用。


变长的子网划分,我们知道,我们可以通过设置子网掩码来划分子网,既然是这样,如果你想要讲子网划分成两个子网就很简单,只需要将子网掩码的第4部分的第1位设置成1就行,那么如果想要划分成4个子网掩码呢?那么就将子网掩码的第4个部分的第12位设置成1。依次类推。


那么如果想要将子网划分成10,30,50,100呢?那么应该如何划分子网呢?
我们可以让1-126的主机成为同一个子网,那么这时候子网掩码应该是255.255.255.1
我们可以让129-142的主机成为同一个子网,那么这时子网掩码应该是255.255.255.240
我们可以让161-190的主机成为同一个子网,那么这时的子网掩码应该是255.255.255.224
我们可以让193-254的主机成为同一个子网,那么这时的子网掩码应该是255.255.255.192


让我们来看一个思科的考试题
这里写图片描述
请给上图中的箭头所指向的地方分配上IP地址,与子网掩码
我们先看第一个路由器的下面那个接口,要连接12台主机,我们可以选择16台主机为一个子网的子网掩码,这个子网掩码是255.255.255.240,那么在上图中应该选择192.168.201.196/28,在看第二个路由器的右边那个接口,接了24台主机,我们可以让它接在一个可以承载32台主机的子网上面,这时候可以将子网掩码设置成255.255.255.224,也就是左边的27的那个,再看最上面那个路由器的右边那个接口,接了40台主机,我们可以让它接在可也承载64台主机的一个子网上面,这时候,子网掩码应该设置成255.255.255.192,也就是左边26的那个,再看路由器与路由器相互连接的那个地方,这个地方是点对点通信,因此子网掩码应该选择255.255.255.252,也就是左边的30的那两个,但是这里要知道的是,168转换成2进制之后,子网掩码为0的部分,它也为0,就不能选这个,因为我们通常不选用全0的ip地址,它仅仅用来标识一个网段,当然全1的也不能选,这个地址用来成为当前子网中的广播的地址。

子网合并

对于一个C类地址,一个网段下可以有254台主机,那么如果有一家公司,它想在一个子网下弄400台主机,那么对于一个C类子网就无法实现,那么这时候可以将子网合并到一起。
比如要将192.168.0.x和192.168.1.x下的254个子网合到一起组成一个大的子网,那么应该如何设置子网掩码呢?

这里写图片描述

在划分子网的时候,将第三部分的子网向前移动一位,就相当于将256*2,当然在用的时候,要去掉全0和全1的地址。
那么想将800个地址合并到同一个子网也不是难事了。
但是,如果想将192.168.1.x和192.168.2.x合并到同一个网段,这时候要如果要设置子网掩码,应该是前22位全是1,但是这样一来,吧192.168.0.x和192.168.3.x也合并到了同一个网段,导致了多合并了一些地址。

IP地址与MAC地址

前面学习了MAC帧,我们知道,MAC帧的数据部分可以是IP数据报,对于IP数据报的源IP地址与目的IP地址是不变的,而对于MAC帧来说,源MAC地址与目的MAC地址是一直在变的,每经过一个路由器就要将源MAC地址与目的MAC地址进行改变。每经过一个路由器,就将目的mac改成吓一跳的MAC地址,并且将源地址改成自身的MAC地址。

这里写图片描述

如上图,我们可以看到,主机H1和主机H2之间通信,是通过了2个路由器R1和R2才能正常通信,主机H1现在知道H2的地址,也就是目的IP地址,这时候它将数据发送到路由器R1,路由器R1根据路由表,插目的地址是在哪一个网段,每个网段对应下一跳的路由器,这时候,它在自己的路由器表中查到,H2的那个网段的吓一跳路由器是R2,那么他就将数据发送到路由R2,路由器R2收到数据之后,发现目的地址与自己是同一个网段,那么就将数据直接交给了H2。

这里写图片描述

ARP地址解析协议

对于上图中的R1和R2他们一开始不知道对方的MAC地址,那么对于路由器R1,它是如何知道R2的mac地址的呢?那么这里就用到了一个叫做ARP协议的协议,专门用来解析mac地址。
ARP协议主要用来解决同一个局域网下的IP地址和硬件地址映射的问题。那么我们来看看ARP协议是如何操作的。

这里写图片描述

对于总线型的局域网,局域网内所有的主机接在一根总线上面,这里的A如果想要知道B的地址,那么A就发送ARP请求,也就是一个数据帧,数据帧中会包含自己的MAC与IP地址,广播到局域网内的所有主机,当其他主机收到该广播的时候,就将A的IP地址与MAC地址添加到自己的MAC映射表中,当B收到的时候,知道这个ARP请求是发给自己的,那么他就沿着原路返回自己的IP地址与MAC地址,这时不必采用广播,而是单播。当A收到B的MAC地址和IP地址的时候,就将它存放到自己的地址映射表中,我们称这个地址映射表为ARP高速缓存。

以后如果A再想向B发送数据的时候,可以通过交换机直接转发,而不会将数据广播到其他地方。

如果是在不同的局域网中,通过路由器相连接,这时候如果想从一台主机传到另一个局域网的主机,那么再发送主机中的ARP缓存中,存放的就是网关的地址,因为数据都是从这里出去的,也就是路由器的地址,然后路由器中也有ARP高速缓存,它也可以知道这个IP端的下一跳地址是谁,也就是说,对于不同局域网,ARP高速缓存存放的是下一跳MAC地址与对应的网段地址。到时候数据只需要网对应网段上面的路由器发送,再由那个路由器根据ARP高速缓存转发到具体的主机。

ARP欺骗

有人可能听说过ARP欺骗,其实这个漏洞就是利用ARP采用的是广播的方式来发送获取MAC地址的。
ARP首先通过广播,将ARP请求发送给局域网内所有的主机,在这种情况下,如果这些主机中有一台是黑客的主机,例如Z,他的主机当然也能收到,这时候,如果A通过ARP协议向B发送ARP请求的时候,由于是广播的方式,黑客的主机收到了,并且他那也知道了A的MAC地址,这时候,黑客可以伪造一个帧,这个帧会返回给A,这个帧告诉A,B的MAC地址是Z,A就会更新自己的ARP高速缓存,这时候,当A再想向B发送数据的时候,数据会先送到Z,Z截取到之后,可以自己再交付出去,这就是著名的ARP欺骗。
在DOS下能查看ARP高速缓存表,用ARP -A命令即可。
在DOS下手动指定ARP欺骗
arp -s ip地址 mac地址就能指定正确的地址。

IP数据报

IP数据报由首部和数据两个部分组成,首部的前部分为固定长度20个字节,固定长度后面为可变长度的一部分。

这里写图片描述

对于IP数据报的首部,又可以分成若干个部分。

版本

版本指定当前用的是IPv4还是IPv6协议。这个部分占4位。

首部长度

首部长度,为什么要这个部分呢?原因是首部中有一个长度可变的部分。这个部分标识了整个部分的长度。占4位。

区分服务

这个字段现在很少被使用,它的做用是,标识数据传输的优先级,也就是说,如果数据报中和路由器中都事先配置好了优先级,就能更好的传输比较重要的数据。

总长度

总长度可想而知,这个长度等于首部长度加上数据部分长度。占16位

标识

每产生一个数据报,这个部分就加1,当数据长度超过MTU需要进行分片的时候,就必须进行分片,这个标识被分配到所有的分片中。

标志

用来标志能不能被分片,标志中的最低位如果等于1的时候,表示后面还有分片,如果等于0时,表示为最后一个分片。当标志中间记为DF=1的时候,意思是不能分片。

片偏移

当IP数据报长度大于MTU的时候,必须进行分片,这时候,如果要将数据拆分后能够合理的合并上,就需要记录当前这个数据报的数据部分的开头是在第几个字节。

这里写图片描述

生存时间

用来控制数据在互联网中的生命周期,用TTL来记录,每经过一个路由器,就将TTL的值减一,由于这个部分只占8个位,最大值也就是255,也就是说,一个数据报在互联网中最多只能通过255个路由器。想象一个下,如果没有这个TTL来控制数据的生命周期,那么当一个数据在传输的过程中没有找到目标主机的时候,就可能在互联网中转圈圈永远不会消失,这就导致了通信资源的严重浪费。

协议

用来标识上层协议是什么协议,也就是说,这个IP数据的数据部分应该交给哪个协议来处理。比如UDP协议,TCP协议等等。

首部校验和

这个部分主要用来验证首部的数据是否正确,做法是将首部划分成许多16位的字序列,校验和这个时候全是0,然后相加,取反码,得出来的结果放到校验和的位置,传到目的地之后,要验证数据是否正确,这时候,也按照同样的方法计算,只不过,这时候首部校验和就不是取0了,然后将计算的结果取反码,如果是0就保留,如果不是0就丢弃。

这里写图片描述

可变部分

这个部分内容很丰富,主要是为了增加IP数据报的功能。


转发分组的流程

对于两个不同网段的主机中间通过几个路由器,它们是如何进行通信的呢?

对于每一个路由器都有一个路由表,根据这个路由表知道下一跳的地址是谁(后面再介绍路由表是怎么生成的),
(1)首先从数据报中提取到目标主机的IP地址,通过子网掩码得出网络地址
(2)若这个网路地址是与路由器直接相连的网路地址,那么就由路由器直接交付给目标主机,如果不是,就交给下一跳主机,这个下一跳主机在路由表中有指明。
(3) 如果路由表中没有该网路的路由,就将数据交给默认路由(网关)。

这里写图片描述

我们可以看到R2的路由表,对于自己不能直接交付的网络,它都是交给它的直接下一跳路由。
当然,在路由表中还可以配置特定路由,对于某些主机,配置特定路由,让路由器直接交付给特定的下一跳路由器。
对于路由器在寻找下一跳地址的时候,由ARP先建立IP和MAC地址的映射,到时候根据下一跳路由器的IP映射到MAC地址,然后将数据交个下一跳。

网关就是默认路由

当你的操作系统设置了网关的时候,那么这个网关就默认路由。
这里写图片描述
那么,如果当你的电脑上面装有2块网卡的时候,那么如果你这时候设置了2个网关,就等于有了2个默认路由,如果中间的一个网卡连的那个网段没有连到广域网,这时候,网络就可能出现时断时正常的情况,原因是电脑认为有两个默认路由,而它不知道哪个路由是正常的默认路由,所以,那么这个时候,就不应该把那个不能上万的网关设置成默认路由,当然如果还是需要与哪个网段相连的话,可以把它设置成普通的路由。

添加一个路由,在DOS下可以执行这个命令。
route add 网络地址 mask 子网掩码 下一跳的网址

网络的负载均衡

对于一个路由器有几条路线可以到达目的主机的时候,那么可以对网络进行配置,主要是配置路由表,让数据合理的转发,实现负载均衡。

采用二叉搜索方式搜索路由表

先来看看如何通过IP地址来得出网络地址。
这里写图片描述
这里给出子网掩码,255.255.192.0,转换成2进制之后,然后与真实IP做与运算,就能得出,这个IP所属的网路号。
在路由表中搜索这个网络号是根据线索二叉树的方式实现的,线索二叉树是数据结构中的一种算法,叶子节点的左子树指向直接前驱,右子树指向直接后继。
对于如下几个网络。
01001000 00000000 00000000 00000000
01011000 00000000 00000000 00000000
01111100 00000000 00000000 00000000
那么我们来看是如何建立二叉树是如何建立的

这里写图片描述

在构造树的过程中,0是向左走,1是向右走。这里只需要通过构造唯一前缀就能构造一个路由表了,对于一个网络地址,通过唯一前缀就能在路由表中找到对应的项。

这里写图片描述

我们来看,H1要发送分组给H2
1、先检查主机是否直接连接在本网段上,如果是直接连接,就直接交付,否则就交付给路交付给路由器R1。这里用这个目的IP与本网段的子网掩码做与运算,这样看出得出的网络号是不是与本网段的网络号一样。
2、路由器收到这个数据报之后,看看有没有为数据报中的这个目的IP指定特定的路由,如果有,就直接交付给特定的路由。
3、如果没有特定的路由,就取数据报中的目的目的IP来与路由表汇中的每一项的子网掩码作与运算,例如,先让128.30.33.138与255.255.255.128做与运算,得出的结果是123.30.33.128,与目的网络地址不同,就证明这个不是正确的映射接口,就找下一个,让255.255.255.128与目的地址做与运算,得到的地址是128.30.33.128,这样就证明这个映射正确的,那么就选择接口1转发数据。

ICMP协议

ICMP报文有两种,即ICMP差错报告报文和ICMP询问报文。
其中差错控制报文共有五种
1、终点不可抵达
2、源点抑制
3、时间超过
4、参数问题(首部不正确)
5、改变路由(重定向)

ICMP询问报文(这个报文主要为了辅助上层协议而制定的)
1、请求和响应
2、时间戮请求和回答
所以在ICMP报文中就包含了上层协议的端口号,序号。在后面讲TCP协议的时候会讲到。

使用pathping来跟踪网络

pathping可以向每一个路由发起ping请求,然后每一个路由就会会送一个信息,这里能看到丢包率还有一些其他信息。就能用来判断整个网络是哪个部分可能会出现网络堵塞,当然这也不是绝对的,某些路由器是禁用ping的,这是为了防止通过ping发送大量数据攻击。

RIP协议

RIP协议用来产生路由表,它是一种基于距离向量的路由选择协议。
它规定,从一路由器到直接连接的网络的距离定义为1,从一路由器到非直接连接的网络距离定义为所经过的路由器的数量加1,RIP协议规定,一条路径最多只能包含15个路由器,因此距离等于16的时候,相当于不可抵达。所以RIP协议适用于小型的互联网


它规定,
一个路由器只和相邻的路由器交换信息
交换的信息的自己所知道的所有信息,即自己的路由表。
每隔30秒交换一次信息。


对于每一个路由器发过来的RIP报文,执行如何步骤
1、对于地址为X的路由器发过来的RIP报文,先修改此报文中的所有项目,将一下跳地址全部改成X,并把所有距离字段加1,对于路由表,需要4个字段,目的网络,子网掩码,下一跳地址,距离。
2、对修改后的RIP报文中的网络地址,一一与自己原有路由表中的的地址进行对比,如果目的网络在自己路由表中没有,那么就添加该项,如果有,那么就看距离,如果新收到的距离比原有距离更小,那么就应该更新路由表。
3、如果隔了3分钟还没收到相邻路由器的路由表,那么就把相邻路由器记为不可到达的。也就是把距离设置成16。

RIP协议的优缺点

优点,实现简单,对于路由器的开销较小
缺点,当网络中出现故障的时候,要讲信息传递到多有的路由器较慢,并且最大距离16,限制了规模,交换信息的时候是交换的整个路由表,当网络数量变多,开销也就比较大。这里解释一下,为什么当出现故障的时候,传递到所有路由器会比较慢。

这里写图片描述

当上面R1和R2已经配置好了路由表的情况下,如果网1突然出现故障,那么当R1就将网1的距离设置成了16,但是这个时候,如果R2向R1发送RIP报文,由于R2认为到网1的距离是2,所以,R1受到R2发来的RIP报文的时候,认为可以通过R2到网1,就把距离设置成3,而R2再受到R1的RIP报文的时候,发现到网1的距离是3,所以这时候,它就更新成4,这样循环下去,直到两个路由器对网1的距离都设置成16。

OSPF协议

为了解决RIP协议的一些不足,这时候,就诞生了OSPF协议。它不像RIP那样转发自己的路由表,现在来讲OSPF的工作机制。

OSPF协议是以带宽来选择路径,而不是以跳数。
它是触发式更新,当邻居路由器发生变化的时候,它才发送新的路由状态,才更新路由表。那么它是如何知道邻居路由器是否通畅呢?它每隔一段时间向邻居路由器发送一个hello包,对方收到之后也hello一下,如果对方迟迟没有回应,就证明那个路由是不同的,那么,所有的路由器都知道自己连着谁了,然后所有的路由器就能构造一个图了,用地杰斯特拉(最短路径算法)计算出下一个路由应该怎么走。算出来的路径即为最佳路径,如果这条路径出现问题了,那么就重新计算,得出一条新的路径。

对于OSPF协议,如果同一个区域内使用的路由器较多,那么应该是划分区域,更细的来执行最短路径算法,否则如果将所有的路由器都构造到一起,每计算一次,效率是很低的。如果各区域之间需要通信,那么由区域边界路由器来传递信息。

外部网关协议BGP

对于上面,进行了区域划分,如果有的区域是用的RIP协议,如果有的区域用的是RIP协议,那么如何让各区域直接进行通信,这里就用BGP协议来解决这个问题。

这里写图片描述

对于上面的3个独立区域,用的就是让那BGP协议来使3个独立区域进行通信,各个区域通过自己的边界路由器来分组转发。

这里写图片描述

对于AS1构造出的自制系统连通图,它是一个树形结构,从AS4发送数据到AS7,只需要将数据发送到AS1然后再转发就行。
BGP协议需先建立TCP连接,再建立BGP会话,通过BGP会话来交换路由信息。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值