网络层概述
网络层是干什么的?
- 网络层的主要任务是实现不同异构网络互连,进而实现数据包在各网络之间的传输
- 相比于数据链路层的以太网通信,网络层则是将一个个数据链路层连接的以太网通过路由器连接起来。从而实现不同数据链路层的互联。
这些异构型网络N1~N7如果只是需要各自内部通信,他们只要实现各自的物理层和数据链路层即可
但是如果要将这些异构型网络互连起来,形成一个更大的互联网,就需要实现网络层设备路由器
有时为了简单起见,可以不用画出这些网络,图中N1~N7,而将他们看做是一条链路即可
-
网络层最最核心的功能,就是 分组转发 和 路由选择
- 分组转发:当分组进入路由器,根据转发表将分组从合适的路由端口转发出去
- 路由选择:当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径,这就是路由选择
路由器收到数据后,是依据什么来决定将数据包从自己的哪个端口转发出去?
依据分组中的目的地址和路由器中的路由表
但在实际当中,路由器是怎样知道这些路由记录?
- 由用户或网络管理员进行人工配置(比如配置一个默认兜底的路由),这种方法只适用于规模较小且网络拓扑不改变的小型互联网
- 另一种是实现各种路由选择协议,由路由器执行路由选择协议中所规定的路由选择算法,而自动得出路由表中的路有记录,这种方法更适合规模较大且网络拓扑经常改变的大型互联网
补充 网络层(网际层)除了 IP协议外,还有之前介绍过的地址解析协议ARP,还有网际控制报文协议ICMP,网际组管理协议IGMP
总结
网络层提供的两种服务
这个问题是怎么提出来的呢?
- 在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起了长期的争论。
- 争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统?
面向连接的虚电路服务
一种观点:让网络负责可靠交付
- 这种观点认为,应借助于电信网的成功经验,让网络负责可靠交付,计算机网络应模仿电信网络,使用面向连接的通信方式。
- 通信之前先建立虚电路 (Virtual Circuit),以保证双方通信所需的一切网络资源。
- 如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,不丢失、不重复。
发送方 发送给 接收方 的所有分组都沿着同一条虚电路传送
- 虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。
- 请注意,电路交换的电话通信是先建立了一条真正的连接。
- 因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样
所以说为什么互联网不用这种虚电路的交换方式呢?
虚电路电信网提供的端到端可靠传输服务对电话业务无疑是很合适的,因为电信网的终端(电话机)非常简单,没有智能,无差错处理能力,电信网必须负责把用户电话机产生的话音信号可靠地传送到对方的电话机,使还原后的话音质量符合技术规范的要求。但计算机网络的端系统是有智能的计算机。计算机有很强的差错处理能力(这点和电话机有本质上的差别),因此,互联网在设计上就采用了和电信网完全不同的思路。
无连接的数据报服务
另一种观点:网络提供数据报服务
- 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
- 网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
- 网络层不提供服务质量(QoS)的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
发送方 发送给 接收方 的分组可能沿着不同路径传送
尽最大努力交付
- 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责可靠交付(包括差错处理、流量控制等) 。
- 采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
- 互连网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。
将网络转发设备上的压力降低(路由器,交换机…),把纠错等等问题交给计算能力强的计算机
虚电路服务与数据报服务的对比
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点时不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
IP地址
IP地址属于网络层的范畴,不属于数据链路层的范畴
为什么会出现IP的概念
简单说:全世界各种各样的以太局域网,设备不统一,协议不统一。没有一种单一的网络能够适应所有用户的需求。而这些局域网又有接入互联网的需求,势必需要一个统一的概念。
从一般的概念来讲,将网络互相连接起来要使用一些中间设备。根据中间设备所在的层次,可以将中间设备分为以下四种。
(1)物理层使用的中间设备叫作转发器(Repeater)或集线器(Hub)。
(2)数据链路层使用的中间设备叫作网桥或桥接器(Bridge)或交换机(Switch)。
(3)网络层使用的中间设备叫作路由器(Router)。
(4)在网络层以上使用的中间设备叫作网关(Gateway),用网关连接两个不兼容的系统需要在高层进行协议的转换。
当中间设备是转发器或网桥时,互连仅仅是把一个网络扩大了,从网络层的角度看,这仍然是一个网络,因此一般并不称之为网络互连。因此提出了IP的概念,于参加互连的计算机网络都使用相同的IP,因此可以把互连以后的计算机网络看成一个虚拟互连网络。所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性是客观存在的,但是我们利用IP可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。
TCP/IP体系在网络互连上采用的做法是在网络层(即IP层)使用标准化协议,但相互连接的网络可以是异构的。网络层及以下是IP负责转发数据,网络层以上TCP保证可靠传输
从网络体系结构看IP地址与MAC地址
每一层都看不懂上一层给他的东西是什么,但是这不重要,只需要加上对应的这一层的帧首尾就可以了。
IP地址与MAC物理地址的关系
从层次的角度看,物理地址是数据链路层或物理网络使用的地址,而IP地址是网络层及以上各层使用的地址,是一种逻辑地址(称IP地址是逻辑地址是因为IP地址是用软件实现的)。
以局域网为例来说明IP地址与物理地址的关系。在发送数据时,数据从高层传递到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦被交给了数据链路层,就被封装成MAC帧。
MAC帧在传送时使用的源地址和目的地址都是物理地址,这两个物理地址都写在MAC帧的首部中。连接在通信链路上的设备(主机或路由器)在接收MAC帧时,其根据是MAC帧首部中的物理地址进行转发等等操作。在数据链路层看不见隐藏在MAC帧的数据中的IP地址。只有在剥去MAC帧的首部和尾部,把MAC层的数据上交给网络层后,网络层才能在IP数据报的首部中找到源IP地址和目的IP地址。
总之, IP地址放在IP数据报的首部,而物理地址则放在MAC帧的首部。 在网络层和网络层以上使用的是IP地址,而数据链路层使用的是物理地址。在图中,在IP数据报被放入数据链路层的MAC帧中以后,整个IP数据报就成为MAC帧的数据,因而在数据链路层看不见数据报的IP地址。(每一层只能看见本层相关的地址内容)
数据包转发过程中IP地址与MAC地址的变化情况
图上各主机和路由器各接口的IP地址和MAC地址用简单的标识符来表示
注意,主机中有完整的网络体系结构,而路由器仅有到网络层的结构
重点:
在传输过程中:
源IP地址和目的IP地址保持不变;
源MAC地址和目的MAC地址逐个链路(或逐个网络)改变。
看个例题:MAC地址在转发过程中的变化情况
这里我们可以看到,IP是恒定不变的。但是MAC是随着下一跳的目的地址不断变化的,假如一个路由器连了多个节点,下一跳转发给哪个MAC这个怎么确定?
如何从IP地址找出其对应的MAC地址?
引出ARP协议
ARP协议
如何从IP地址找出其对应的MAC地址(数据链路层)?
通过ARP(地址解析协议 Address Resolution Protocol)
ARP生成的流程
主机B要向本局域网上的某个主机C发送IP数据报时,会先在其ARP高速缓存中查看有无主机C的IP地址。如有,主机B就在ARP高速缓存中查出其对应的物理地址,再把这个物理地址写入MAC帧,然后通过局域网把该MAC帧发往此物理地址。
主机B也有可能查不到主机C的IP地址。原因可能是主机B才入网,也可能是主机B刚刚加电,其高速缓存还是空的。在这种情况下,主机B就自动运行ARP,然后按以下步骤找出主机B的物理地址。
ARP高速缓存表的生成过程
当主机B要给主机C发送数据包时,会首先在自己的ARP高速缓存表中查找主机C的IP地址所对应的MAC地址,但未找到,此时,主机B需要发送ARP请求报文,来获取主机C的MAC地址。
主机B需要发送ARP请求报文,发送广播帧来获取主机C的MAC地址
C发现是询问自己IP地址ARP广播帧,于是对广播帧做出响应,同时,C也会对B的地址(IP,MAC地址映射)进行记录,以便后续可能会用到。都会记录彼此的地址。
Q:为什么C要记录B的地址
A:当主机B向C发送数据报时,很可能以后不久主机C还要向B发送数据报(比如响应数据),因而主机C也可能要向B发送ARP请求分组。为了减少网络上的通信量,主机B在发送其ARP请求分组时,就把自己的IP地址到物理地址的映射写入ARP请求分组。主机C收到B的ARP请求分组时,就把主机B的这一地址映射写入自己的ARP高速缓存。以后主机C向B发送数据报时就很方便了。
收到ARP请求报文的主机A和主机C会把ARP请求报文交给上层的ARP进程
主机A发现所询问的IP地址不是自己的IP地址,因此不用理会
主机C的发现所询问的IP地址是自己的IP地址,需要进行响应
C回复ARP响应报文(单播帧)
这样就代表了,B的ARP表存好了C的MAC地址,二者就可以开始发送数据了
但是,ARP表并不是一成不变的,比如连入设备改变,网卡坏了等等导致的MAC地址更新等等。
因此,ARP高速缓存中的每一个地址映射项目都设置有生存时间(如10~20min)。超过生存时间的项目会被从高速缓存中删除掉。
ARP协议的使用条件
ARP协议只能在一段链路或者一个局域网上使用,不能跨局域网使用。原因就是路由器会隔离广播域,广播域都隔离了,ARP广播帧自然就发不过去了
从IP地址到物理地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器通信,ARP就会自动地把这个IP地址解析为链路层所需要的物理地址。
Q:既然在网络链路上传送的帧最终是按照物理地址找到目的主机的,那么为什么我们不直接使用物理地址进行通信,而是要使用逻辑的IP地址并调用ARP来寻找出相应的物理地址呢?
A:全世界存在着各式各样的网络,它们使用不同形式的物理地址。要使这些异构网络能够互相通信就必须进行非常复杂的物理地址转换工作,由用户或用户主机来完成这项工作几乎是不可能的。统一的IP地址把这个复杂问题解决了。
所以这也就是,网络层以及IP出现的意义。为了连接不同架构的异构网络,以及解决不同形式的物理地址连接问题。
总结
IPV4
IP地址及编址方式
点分十进制就是二进制的IPV4地址转化十进制的IPV4地址
分类编制时期的IPv4地址(已淘汰)
IPV4之所以说是32位的
就是因为网络号+主机号 一共是32位
通过不同的格式分为 A、B、C、D(多播地址)、E(保留地址) 五种不同种类的网络
其中,A、B、C 类网络最为常用
- 每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。
- 主机号在它前面的网络号所指明的网络范围内必须是唯一的。
- 由此可见,