IP网络层

在第一章IP概述中提到了互连网是网络的网络,只有网络和网络相互连接,网络上的数据才能实现共享以及主机进行连通。咱们知道互连网是由很多网络连在一起组成的,那么用户发出的数据包怎样才能准确的到达目的地呢?这里就需要了解IP层的协议。

IP层中的通信

IP层的通讯方式

面向连接通讯方式指的是在双方通讯之前先建立连接(即在分组交换中建立一条虚拟电路),以预留双方通信所需的一切网络资源,双方通信就沿着已建立的虚拟电路发送传输分组,通信结束后需要释放建立的虚电路。这种模式是借助于电信网的通信方式。如图主机H1、H2之间交换的分组都必须在事先建立的虚拟电路上传送。
在这里插入图片描述

  • 无连接
    无连接通信指的是在发送分组时不需要先建立连接,每个分组独立发送,与其前后的分组无关。这种传输方式不可靠。如图主机H1、H2之间交换分组时,每个分组都可能选择不同的链路传输,到达目的的先后顺序可能也不一样。
    在这里插入图片描述
    下图是面向连接和无连接之间的对比。
    在这里插入图片描述
    如今的网络层协议采用的无连接传输数据。即在主机之间交换分组不需要事先建立虚电路,所以网络层不提供服务质量的承诺,网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。之所以采用无连接方式是因为网络系统中的主机拥有智能(即可以处理差错),而传统的电信网中的电话机不具有个能力。再者采用无连接方式能节约成本以及运行方式很灵活,能够适应多种应用。

从上述可知,网络中数据分组在网络层采用的是无连接交换,那么各种网络之间存在差异(如网络类型不一样,有以太网、令牌环网、无线网等;各种网络的编址方案和路由选择可能也不一样),数据是如何进行通信的呢?这里是这样处理的,**参加互连的计算机网络都使用相同的网际协议IP,因此可以把互连以后的计算机网络看成一个虚拟互连网络(虚拟互连网络也就是逻辑互连网络)**这样互连起来的各种物理网络的差异性本来是客观存在的,但是我们利用IP协议就可以使这些性能各异的网络在网络层上看起来好像就是一个统一的网络(忽略各种物理网络的具体异构细节)。

在这里插入图片描述
当很多异构网络通过路由器互连起来时,如所有的网络都使用相同的IP协议,那么在网络层讨论问题就显得很方便。如图主机H1要把一个IP数据报发送给目的主机H2,虽然有不同的物理网络,如卫星链路、无线链路、光缆等。但使用的都是IP协议,所以能够正常的通信。
在这里插入图片描述
在互连网中通信,分组是怎样识别网络中的目的主机呢,如上图中的H1发的分组怎样才能识别到H2呢?在通信中有个重要的概念就是设备地址。给网络上的每个设备分配一个唯一的地址,这样分组就能知道要交给哪台设备了。在网络层中称之为IP地址。IP地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32位的标识符(由于IP地址是32位,所以在书写上会采用点分十进制来描述)。IP地址的结构使我们可以在互联网上很方便地进行寻址。使用公网IP需要向ISP申请。

IP地址分类

IP地址的编址方法经过了三个历史阶段。

分类的IP地址

最初考虑到各种网络的差异很大,有的网络拥有很多主机,而有些网络上的主机则很少,所以把IP地址划分为A、B、C三类是为了更好地满足不同用户的要求。
分类的IP地址就是将IP地址划分为若干个固定类(A、B、C、D、E五类),每一类都由两个固定长度的字段组成,即网络号和主机号。网络号标志主机所连接到的网络,主机号标志该网络中的主机(也是唯一的)。
其中分类如下,其中ABC为单播,D是多播而E类地址保留以后用。
在这里插入图片描述
IP地址中的全0表示“这个(this)”,网络号字段为全0的IP地址是个保留地址,意思是“本网络”。网络号为127保留作为本地软件环回测试使用。主机号为全0则指的是网络地址,而全1表示所有的,即广播地址。
A类地址中127不指派,B类IP网络128.0.0.0不指派,C类IP网络192.0.0.0不指派,网络中特殊地址的如下表中所示:
在这里插入图片描述
IP地址采用分等级的地址结构,方便IP地址管理(理由是管理机构只分配网络号,而主机号有公司内部自己管理),同样路由器仅根据目的的主机所连接的网络号来转发分组,这样减小了路由表所占的存储空间以及查找路由表的时间。用网络号来标识不同的网络,一个网络是指具有相同网络号net-id的主机的集合。用转发器和网桥连接起来的若干个局域网仍为一个网络,不同网络号的局域网必须使用路由器进行互连。下图是三个局域网通过路由器连接起来的互联网。
在这里插入图片描述

子网的划分

上述提到的两级结构分类IP地址其利用率有时很低,如A类地址网络可连接的主机数超过1000万,这是什么概念。有多少公司具有这样的规模,B类网络也可以分配到6万个主机号,而C类也有两百多,很多公司都申请B类但是却使用不上这么多;给每一个物理网络分配一个网络号会使路由表变得太大从而影响网络性能;两级IP地址不够灵活;由于分类的IP地址具有上述的缺陷,从而提出了从两级IP地址到三级IP地址的解决方案,即在IP地址中添加一个子网号字段,使两级IP地址变成为三级IP地址,这个就是子网寻址或子网路由选择
划分子网的基本思路是:从网络的主机号借用若干位作为子网号,将物理网络划分为若干个子网,子网划分纯属一个单位内部的事情,本单位以外的网络看不见这个网络是由多少个子网组成,因此对外仍然表现为一个网络 。外部网络发送给本网络某台主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。路由器再按目的网络号和子网号找到目的子网,从而交付数据。划分子网只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号。子网划分属于单位内部的事情,只有与之相连的路由器才会知道网络内部是怎样划分子网的,内部有几个子网。
网络上的数据到达与本网络相连的路由器后,它是如何准确地把数据交给众多子网中的某个子网呢?由于IP和分组的包头都没有关于子网的字段,所以需要借助别的东西来做区分。这个就是子网掩码路由器收到外部网络发来的数据后,将其目的IP和子网掩码作与操作就可以得到网络地址,从而知道把数据交于哪个子网,路由器中有与之相连的所有子网的网络地址和子网掩码。如网络不划分子网则子网源码使用默认掩码(即与网络号一样的位数的1)
使用子网时分组的转发
使用子网划分后,路由表必须包含目的网络地址、子网掩码和下一跳地址

  • 从收到的数据报的首部提取目的IP地址D
  • 先判断是否为直接交付,对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D逐个相与,看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付,转发任务结束。否则就是间接交付。
  • 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则执行下一步
  • 对路由表中的每一行进行匹配,看下目的网络地址是否匹配,若匹配则把数据报传送给该行指明的下一跳路由器;否则执行下一步
  • 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行下一步
  • 报告转发分组出错。

构成超网(无分类编址)

划分子网在一定程度上缓解了互联网在发展中遇到的困难,但是还有许多问题没有得到处理。如路由表项过大,IP地址使用仍然有浪费问题,所以进一步提出了无分类编址方案。
无分类编址方法是在变长子网掩码VLSM上发展而来的,正式名字是无分类域间路由选择CIDR,其主要特点是消除了传统的A、B、C三类地址以及划分子网的概念,能更加有效地分配IP地址空间。CIDR把IP地址划分为网络前缀和主机号两部分,又回到两级编址。CIDR把网络前缀都相同的连续的IP地址组成一个CIDR地址块,我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址和最大地址,以及地址块中地址数。具体的算法是主机号全0为最小IP地址,而主机号为全1则为最大的IP地址。同时CIDR还使用斜线记法,在IP地址后面加上斜线“/”,后面写上网络前缀所占的位数请注意,CIDR不使用子网是指CIDR并没有在32位地址中指明若干位作为子网字段,但是分配到一个CIDR地址块的单位,仍然可以在本单位内根据需求划分出一些子网,这些子网也都只有一个网络最前和一台主机号字段
使用CIDR地址块,路由表中就是利用CIDR地址块来查找目的网络,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示原来传统分类地址的很多个路由,路由表中的项目因此能减少很多。路由聚合也称为构成超网。
使用CIDR时,由于采用了网络前缀这种记法,IP地址由网络前缀和主机号这两个部分组成,因此路由表中的项目也要有相应的改变。这时,每个项目由网络前缀和下一跳组成。但是在查找路由表时可能会得到不止一个匹配结果,这样应该从匹配结果中选择具有最长网络前缀的路由。在路由表中查找路由时使用二叉线索。具体的用法有兴趣的读者可以百度下。

数据包在网络中的传输流程

数据包在网络中的传输是以网络为单位来进行转发的,这样做的目的是简化路由器中路由表的项目(假如是根据主机IP来转发的话,路由表中的项目将会十分的庞大),路由器收到包后,先查找路由表,看是否可以直接交付到与本路由器相连的网络中,要是可以则直接交付;否则转发给别的路由器,由于路由器和路由器连在同一网络中,所以转发分组到别的路由器是十分容易现实的(只需要ARP协议就可以实现)。包的转发是根据目的网络地址来确定下一跳的,IP数据报最终一定可以找到目的主机所在目的网络上的路由器(可能需要通多多次的间接交付),只有到达最后一个路由器时,才试图向目的主机进行直接交付。
在这里插入图片描述
虽然互联网是基于目的主机所在的网络来进行分组转发,但是为了网络管理人员更方便地控制网络以及测试网络和安全考虑,所以还可以对目的主机指明一个路由,即特定主机路由
路由器还可以采用默认路由以减小路由表所占用的空间和搜索路由表所用的时间,这种转发方式在一个网络只有很少的对外连接时时很用用的。默认路由在主机发送IP数据报时往往更能显示出它的好处,主机在发送每一个IP数据报时都要查找自己的路由表,如果一台主机连接在一个小网络上,而这个网络只用一个路由器和互联网连接,那么在这种情况下使用默认路由是非常合适的。如下图,N1网络上的任何一台主机只需要三个项目既可,连接在N1上的目的主机可以直接交付,而目的主机在N2中,则转发给R2,否则一律交给R1处理。在实际的路由器表中,“其他”和“直接”字符并不会出现,而是被记为0.0.0.0(这个网络
在这里插入图片描述
路由器分组转发的算法如下:

  • 从数据报的首部提取目的主机的IP地址D,得出目的网络地址N
  • N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器;否则就是间接交付,执行下一步。
  • 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则执行下一步。
  • 若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器;否则执行下一步。
  • 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行下一步。
  • 报告转发分组出错。
    有一点需要注意的是,IP数据报的首部中没有地方可以用来指明“下一跳路由器的IP地址”,在IP数据报的首部只写上了源IP地址和目的IP地址,而没有中间经过的路由器的IP地址。那么待转发的数据报又怎么样能够找到下一跳路由器呢?路由器在收到一个待转发的数据报后在路由表中查找路由得出下一跳路由器的IP地址。然后转发到相应的路由器。同样路由表并没有指明所给分组到某个网络的完整路径,路由表只指出,到达某个网络应当先到某个路由器,在到达下一跳路由器后继续找到路由表,就这样一步一步地查找下去,直到最后到达目的网络。

ARP协议

在前面的学习中知道了IP层及以上使用的是IP地址,而在数据链路层中使用的是硬件地址(即MAC地址),如下图:
在这里插入图片描述
在发送数据时,数据从高层下到低层,然后才到通信链路上传输,使用IP地址的数据报一旦交给了数据链路层,就被封装成MAC帧了,MAC帧在传送时使用的源地址和目的地址都是硬件地址。设备在收到正确的帧后,只有在剥去MAC帧的首部和尾部后把MAC层的数据上交给网络层后,网络层才能在IP数据报的首部中查找到源IP地址和目的IP地址。
**总之,IP地址放在IP数据报的首部,而硬件地址放在MAC帧的首部。当IP数据报放入数据链路层的MAC帧以后,整个IP数据报就成为MAC的数据,因此在数据链路层看不见数据报的IP地址 **

IP数据报在传输中源IP地址和目的IP地址始终不会发生变化,但是在传输中MAC地址可能会发生变化,这是因为在不同的链路中传输时,其MAC地址是不一样的。所以在数据传输中咱们还需要知道设备的MAC地址,而MAC地址和IP地址的格式不一致,不能建立简单的映射。那么在传输中如何获取设备的MAC地址呢?
对上述的问题,网络中使用ARP协议来获取设备的MAC地址,这里由于IP协议使用了ARP协议,通常把ARP协议划归网络层。
在这里插入图片描述
**ARP的工作原理:**网络层使用的是IP地址,但在实际网络的链路上传送数据帧时,最终还是必须使用该网络的硬件地址。所以主机中需要有一个ARP高速缓存来保存各设备的IP地址到硬件地址的映射表。当设备A要向设备B发送消息时,ARP的工作流程如下:

  • 首先在A设备的ARP高速缓存中查看有无主机B的IP地址,如有,则直接使用高速缓存中的硬件地址。否则执行下一步
  • A设备的ARP进程在本局域网上广播一个ARP请求分组,把自己的IP地址以及MAC地址和需要寻找的设备的IP地址发送出处。
  • 在本局域网上的所有主机都能收到ARP请求分组,只有主机中IP地址和ARP请求分组中要查询的IP地址一致时,设备才会收下这个ARP分组,并向主机A发送ARP响应。其它的设备则不响应。同时主机B会记录设备A的IP地址和MAC地址到ARP高速缓存表中。
  • 主机A收到主机B的ARP响应分组后,也会在ARP高速缓存中写入主机B的IP地址到硬件地址的映射。
    设备中的ARP高速缓存还是非常有用,使用ARP高速缓存可以减少网络上的通信量(不需要在每次传送数据包时,都先发送ARP请求)。同时ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间,凡超过生存时间的项目就从高速缓存中删除(目的是考虑到网络中更换网络适配器,更换网络适配器后需要更新MAC地址)。
    ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题,如不在同一局域网上,就无法解析,这时需要借助路由器来获取相同局域网中的主机MAC地址。
    使用了MAC地址就能进行通信,为何还需要IP地址?
    由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够相互通信就必须进行非常复杂的硬件地址转换工作。因此使用同一的IP编址把这个复杂的问题进行处理,这样它们的通信就像连接在同一个网络上那样简单方便(屏蔽了各种异构的硬件差异)。

IP数据报的格式

在这里插入图片描述
IP数据报的格式如上,下面对各个字段进行简单介绍

  • 版本:指的是IP协议的版本,IPv4的版本号为4
  • 首部长度:指的是IP首部的长度,单位是32位字。长度在20~60个字节之间
  • 区分服务:也称为服务类型,一般情况下不使用。
  • 总长度:首部和数据之和的长度,单位为字节。数据报的最大长度为216-1即65535个字节。
  • 标识: IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。当数据报长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各个数据报片最后能正确地重装成为原来的数据报
  • 标志:最低位MF(more fragment),MF = 1即表示后面还有分片的数据报;MF = 0表示这已是若干数据报片的最后一个
    标志中间位DF(don’t fragment),意思是不能分片,DF = 0时才允许分片。
  • 片偏移:较长的分组在分片后,某片在原分组中的相对位置。是相对于用户字段的起点,该片从何处开始。单位是8个字节
  • 生存时间:表明数据报在网络中的寿命,由发出数据的源点设置这个字段,路由器在每次转发数据 报之前就把TTL值减1,若TTL值减小到零,就丢弃这个数据报,不再转发
  • 协议:协议字段指出此数据报携带的数据是使用何种协议。
    在这里插入图片描述
  • 首部校验和: 这个字段只校验数据报的首部,但不包括数据部分。这样能减小计算的工作量。
  • 源地址
  • 目的地址
  • IP数据报首部的可变部分。
    在IP协议中有IP数据包的总长度,但是在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度(MTU),当一个IP数据报封装成链路层的帧时,此数据报的总长度一定不能超过MTU的值。如所传送的数据报长度超过数据链路层的MTU值,就必须把过长的数据报进行分片处理。

网际控制报文协议ICMP

ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP协议属于IP层协议,ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。报文格式如下:
在这里插入图片描述ICMP报文分为ICMP差错报告报文和ICMP查询报文。ICMP报文的 代码字段是为了进一步区分某种类型中的几种不同情况。校验和字段用来校验整个ICMP报文。。
在这里插入图片描述
所有的ICMP差错报告报文中的数据字段都具有同样的格式,把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段。提取收到的数据报的数据字段前8个字节是为了得到运输层的端口号和运输报文的发送序列号,这些信息对源点通告高层协议是有用的。
在这里插入图片描述

IP多播

多播是由一个源点发送数据到许多个终点,即一对多的通信。多播通信能减小网络上数据的通信量。当然多播也需要使用多播IP地址进行通信。
我们知道,在互联网中每一台主机必须有一个全球唯一的IP地址。那么主机 怎么样才能收到某个特定多播组的分组呢?显然这个多播数据报的目的地址一定不能写入这台主机的IP地址。这是因为在同一时间可能有成千上万台主机加入到同一个多播组。多播数据报不可能在其首部写入这样多的主机的IP地址。在多播数据报的目的地址写入的是多播组的标识符(即多播地址),然后设法让加入到这个多播组的主机的IP地址与多播组的标识符关联起来。
多播组的标识符就是IP地址中的D类地址,上面所说的关联起来是通过网际组 管理协议IGMP来实现的。所以多播 数据报和一般的IP数据报的区别就是它使用D类IP地址作为目的地址,并且首部中协议字段值是2,表明使用网际组管理协议IGMP。多播地址只能用于目的地址,而不能用于源地址,对多播数据报不产生ICMP差错报文。

在局域网上进行硬件多播

多播的硬件地址范围是01-00-5E-00-00-00到01-00-5E-7F-FF-FF,由于硬件地址的高24位作为公司标识,只有低24位能进行自由分配,加上第23位只能为0(这里是历史原因,当时只买了1个OUI并且只分配了一半用于多播。还是贫穷限制了想象啊^ _ ^),所以能够使用的只有23位。多播的硬件地址和多播的IP地址对应关系为MAC地址的低23位使用IP多播地址的低23位。如下图,所以这种映射关系不是唯一的。
在这里插入图片描述
IGMP协议的本地使用范围,IGMP并非在互联网范围内对所有多播组成员进行管理的协议。IGMP不知道IP多播组包含的成员数,也不知道这些成员都分布在哪些网络上,等等。IGMP协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出了某个多播组
IGMP也是使用IP数据报传递其报文,即IGMP报文加上IP首部构成IP数据报,因此IGMP也属于网际层协议IP的一个组成部分。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值