计算机网络:网络层(提供服务,IP,子网和超网,ICMP)
1,网络层提供的两种服务
1.1,面向连接
通信之前先建立虚电路,以保证双方通信所需的一切网络资源。如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,不丢失、不重复。
虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。电路交换的电话通信是先建立了一条真正的连接。分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。
1.2,无连接
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责可靠交付(包括差错处理、流量控制等) 。
采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。互连网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。
2,网际协议IP
2.1,虚拟互连网络
如何将异构的网络互相连接起来?
- 通过一些中间设备(中间系统或中继系统)
- 物理层中继系统:转发器 (repeater)或集线器。
- 数据链路层中继系统:网桥 或 桥接器 (bridge)或交换机。
- 网络层中继系统:路由器 (router)。网桥和路由器的混合物:桥路器 (brouter)。
- 网络层以上的中继系统:网关 (gateway)。
当中继系统是转发器或网桥时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,而这仍然是一个网络。 网关由于比较复杂,目前使用得较少。网络互连都是指用路由器进行网络互连和路由选择。
- 所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用 IP 协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络。
- 使用 IP 协议的虚拟互连网络可简称为 IP 网。
- 使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的各具体的网络异构细节。
- 如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就是现在的互联网 (Internet)。
2.2,分类的IP地址
IP 地址就是给每个连接在互联网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。
编址方法:分类的IP地址,子网的划分,构造超网
每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。主机号在它前面的网络号所指明的网络范围内必须是唯一的。一个 IP 地址在整个互联网范围内是唯一的。
A类:A类地址的网络号字段占1个字节,只有7位可用(第一位固定为0),可指派的网络号是126个,减2的原因是:第一IP地址全为0表示这个。表示本网络。第二网络号为127(01111111)保留作为本地软件回环测试本主机的进程之间的通信之用。
A类的主机号占3个字节,因此每个A类网络中的最大主机数2^24-2=16777214。这里减2的原因:全是0的主机号表示该IP地址是“本主机”所连接到的单个网络地址,而全为1表示所有的,因此全为1表示该网络上的所有主机。
B类:B类地址的网络号字段有2个字节,但是前面两位已经被固定(1,0),只剩下14位可分配,但是128.0.0.0是不可指派的,因而B类最小网络地址是128.1.0.0,因此B类地址可指派的网络数为2^14-1=16383个。
B类地址每个网络的最大主机数为2^16=65534,这里需要减2是因为扣除全部0和全部1的主机号。
C类:C类地址有3个字节的网络号字段,最前面3位是(1 1 0),还有21位可分配。C类网络地址中的192.0.0.0是不可指派的,可指派的最小网络地址192.1.0.0。每个C类网络最大主机数为2^8-2,原因同上。
网络号
主机号
源地址
使用
目的地址使用
代表的意思
0
0
可以
不可
在本网络上的本主机(见6.6节DHCP协议)
0
host-id
可以
不可
在本网络上的某台主机host-id
全1
全1
不可
可以
只在本网络上进行广播(各路由器均不转发)
net-id
全1
不可
可以
对net-id上的所有主机进行广播
127
非全0或全1的任何数
可以
可以
用作本地软件环回测试之用
机器中存放的IP地址是32位二进制代码:10000000000010110000001100011111 每8位为一组:10000000 00001011 00000011 00011111 转十进制:128.11.3.31
A类 1.0.0.1~127.255.255.254 2^31个地址,占比50% B类 128.0.0.1~191.255.255.254 2^30个地址,占比25% C类 192.0.0.1~223.255.255.254 2^29个地址,占比12.5%
- IP 地址是一种分等级的地址结构。
- 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口。
- 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id。
- 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。
2.3,IP地址与硬件地址
硬件地址(或物理地址)是数据链路层和物理层使用的地址。
IP 地址是网络层和以上各层使用的地址,是一种逻辑地址(称 IP 地址是逻辑地址是因为 IP 地址是用软件实现的)。
地址解析协议ARP就是用来根据IP地址,找出其对应的硬件地址。每一个主机都设有一个 ARP 高速缓存 (ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
每一个主机都设有一个 ARP 高速缓存 (ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。< IP address;MAC address;TTL >TTL (Time To Live):地址映射有效时间 。
ARP请求分组:包含发送方硬件地址 / 发送方 IP 地址 / 目标方硬件地址(未知时填 0) / 目标方 IP 地址。
本地广播 ARP 请求(路由器不转发ARP请求)。
ARP 响应分组:包含发送方硬件地址 / 发送方 IP地址 / 目标方硬件地址 / 目标方 IP 地址。
ARP 分组封装在物理网络的帧中传输。
当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。 如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。 如没有, ARP 进程在本局域网上广播发送一个 ARP 请求分组。收到 ARP 响应分组后,将得到的 IP 地址到硬件地址的映射写入 ARP 高速缓存。 ============================ 存放最近获得的 IP 地址到 MAC 地址的绑定,以减少 ARP 广播的数量。 为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。 当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便了。
应当注意的问题
- ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
- 如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
- 从 IP 地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
- 只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址。
ARP的四种典型情况
发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成。
【问题】为啥我们不直接使用硬件地址进行通信了?
【答案】由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。
IP 编址把这个复杂问题解决了。连接到互联网的主机只需各自拥有一个唯一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为上述的调用 ARP 的复杂过程都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。
2.5,IP数据报的格式
IP数据报由首部和数据两部分组成。首部是固定20字节,是所有IP数据报必须具有的。
版本 占4位,指IP协议版本,通信双方必须使用相同的IP协议版本,IPV4和IPV6 首部长度
占4位,表明整个首部的长度,最大十进制数值是15。因为IP首部固定长度20字节,此首部最小为5。 区分服务
占8位,只有用来区分服务时,这个字段才起作用。 总长度 占16位,表示首部和数据部分长度之和,最长2^16-1=65535。但是在数据链路层MTU=1500,IP数据报的总长度要小于MTU。
每一个IP数据报越短,路由器转发的速度越快,IP数据报规定,互联网中的路由器和主机接受长度不超过576字节的数据报。
标识 占16位,IP软件在存储器中维持一个计算器,每产生一个数据报,计数器就+1,并将此赋给标识字段,这个标识并非序号,
因为IP是无连接服务,不存在按序接受的问题,当数据报由于长度超过MTU而必须分片后的各数据报片最后能正确地重装
为原来的数据报。
标志 占3位,但只有两位有意义。
标志字段中最低位MF,MF=1表示后面还有分片,MF=0表示这已是若干数据报片中的最后一个。
标志字段中中间位DF,意思是不能分片,只有DF=0才允许分片。
片偏移 占13位,较长的分组在分片后,某片在原分组中的相对位置,相对用户数据字段的起点,该片是从何处开始的。以8个字节为
单位,分片长度一定是8字节的整数倍。
生存时间
占8位,生存时间的缩写是TTL,这是数据报在网络中的寿命,其目的是防止无法交付的数据报在网络中兜圈子,浪费网络资源。
TTL按照跳数限制,路由器每次转发数据报之前就把TTL减一。当TTL值减到0时,就丢弃这个数据报。
协议 占8位,协议字段指出此数据报携带的数据是使用何总协议,以便使目的主机IP层知道应将数据部分上交给那个协议处理。
ICMP-1,IGMP-2,IP-4,TCP-6,EGP-8,IGP-9,UDP-17,IPv6-41,ESP-50,OSPF-89
首部检验和 占16位,这个字段只检验数据报的首部,但不包括数据部分。因为数据报每经过一个路由器,路由器都要重新计算一下收不
检验和一些字段(生存时间,标志,片偏移等),不检验数据部分可减少计算的工作量,为了进一步减少工作量,采用如下方法
在发送方,先把数据报首部划分为许多16位字的序列,并把检验和字段置为0。用反码算术运算把所有16位字想加后,将得到的
和的反码写入检验字段。接收方收到数据报后,将首部的所有16位字再使用反码算数运算想加一次。将得到的和取反码,即得
出接收放检验和的计算结果,若首部未发生变化,则此结果必为0,于是保留这个数据报,否则即认为出差错。
源地址 占32位。 目的地址 占32位。 可变字段 1~40个字节,增加了IP数据报的功能,同时让IP数据报长度成为可变。
2.6,IP层转发分组的流程
假设:有四个 A 类网络通过三个路由器连接在一起。每一个网络上都可能有成千上万个主机。
可以想像,若按目的主机号来制作路由表,每一个路由表就有 4 万个项目,即 4 万行(每一行对应于一台主机),则所得出的路由表就会过于庞大。
但若按主机所在的网络地址来制作路由表,那么每一个路由器中的路由表就只包含 4 个项目(每一行对应于一个网络),这样就可使路由表大大简化。
根据目的网络地址就能确定下一跳路由器,这样做的结果是:
IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。只有到达最后一个路由器时,才试图向目的主机进行直接交付。
【特定主机路由】
虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例,即为特定的目的主机指明一个路由。
采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。
【默认路由】
路由器还可采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间。
这种转发方式在一个网络只有很少的对外连接时是很有用的。
默认路由在主机发送 IP 数据报时往往更能显示出它的好处。
如果一个主机连接在一个小网络上,而这个网络只用一个路由器和互联网连接,那么在这种情况下使用默认路由是非常合适的。
路由器分组转发算法:
(1)从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
(2)若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。
(3)若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
(4)若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。
(5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
(6)报告转发分组出错。
3,划分子网和构造超网
3.1,划分子网
划分子网的原因:
(1)IP 地址空间的利用率有时很低。
(2)给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
(3)两级的 IP 地址不够灵活。
划分子网:在 IP 地址中又增加了一个“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址。
从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。
凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。 然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。 最后就将 IP 数据报直接交付目的主机。
子网掩码:从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。使用子网掩码(subnet mask)可以找出 IP 地址中的子网部分。
规则:子网掩码长度=32位;某位=1:IP地址中的对应位为网络号和子网号;某位=0:IP地址中的对应位为主机号
虽然RFC文档中没有规定子网掩码中的一串1必须是连续的,但却极力推荐子网掩码中选用连续的1,以免出现可能发生的错误。
有固定长度子网和变长子网两种子网划分方法:
- 在采用固定长度子网时,所划分的所有子网的子网掩码都是相同的。
- 虽然根据已成为互联网标准协议的RFC 950文档,子网号不能为全1或全0,但随着无分类域间路由选择CIDR的广泛使用,现在全1和全0的子网号也可以使用了,但一定要谨慎使用,确认你的路由器所用的路由选择软件是否支持全0或全1的子网号这种较新的用法。
- 划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。
3.2,使用子网时分组的转发
在不划分子网的两级IP地址下,从IP地址得出网络地址是个很简单的事。在划分子网的情况下,从IP地址却不能唯一得出网络地址来,这是因为网络地址取决于那个网络所采用的子网掩码,但数据报的首部没有提供子网掩码的信息。因此分组转发也必须做相应的改动。
路由器分组转发算法:
(1)从收到的分组的首部提取目的 IP 地址 D。
(2)先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行(3)。
(3)若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行(4)。
(4)对路由表中的每一行,将子网掩码和 D 逐位相“与”。若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行(5)。
(5)若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行(6)。
(6)报告转发分组出错。
3.3,无分类编制CIDR(构造超网)
划分子网在一定程度上缓解了互联网在发展中遇到的困难。然而在 1992 年互联网仍然面临三个必须尽早解决的问题:
(1)B 类地址在 1992 年已分配了近一半,眼看就要在 1994 年 3 月全部分配完毕!
(2)互联网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个)。
(3)整个 IPv4 的地址空间最终将全部耗尽。
1987 年,RFC 1009 就指明了在一个划分子网的网络中可同时使用几个不同的子网掩码。
使用变长子网掩码 VLSM 可进一步提高 IP 地址资源的利用率。在 VLSM 的基础上又进一步研究出无分类编址方法,它的正式名字是无分类域间路由选择 CIDR
主要特点:CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
IP 地址从三级编址(使用子网掩码)又回到了两级编址。
CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。 128.14.32.0/20 表示的地址块共有 2^12 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。 -这个地址块的起始地址是 128.14.32.0。 -在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20 地址块”。 -128.14.32.0/20 地址块的最小地址:128.14.32.0 -128.14.32.0/20 地址块的最大地址:128.14.47.255 -全 0 和全 1 的主机号地址一般不使用。
路由聚合
一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。
路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。
路由聚合也称为构成超网 (supernetting)。
10.0.0.0/10 隐含地指出 IP 地址 10.0.0.0 的掩码是 255.192.0.0。此掩码可表示为:
网络前缀的后面加一个星号 * 的表示方法,如 00001010 00*,在星号 * 之前是网络前缀,而星号 * 表示 IP 地址中的主机号,可以是任意值。
网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。
CIDR 的一个好处是:可以更加有效地分配 IPv4 的地址空间,可根据客户的需要分配适当大小的 CIDR 地址块。
最长前缀匹配
使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。
应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配
网络前缀越长,其地址块就越小,因而路由就越具体
使用二叉线索查找路由表
为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索
IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
从二叉线索的根节点自顶向下的深度最多有32层,每一层对应于IP地址中的一位。一个IP地址存入二叉线索的规则很简单。先检查IP地址左边的第一位,如为 0,则第一层的节点就在根节点的左下方;如为 1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。依此类推,直到唯一前缀的最后一位。
4,网际控制报文协议ICMP
为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP
但 ICMP 不是高层协议(看起来好像是高层协议,因为 ICMP 报文是装在 IP 数据报中,作为其中的数据部分),而是 IP 层的协议。
4.1,ICMP报文的种类
会送请求和回答报文,时间戳请求和回答报文。
4.2,ICMP应用举例
PING
PING用来测试两个主机之间的连通性。
PING 使用了 ICMP 回送请求与回送回答报文。
PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP。
Traceroute
在 Windows 操作系统中这个命令是 tracert。
用来跟踪一个分组从源点到终点的路径。
它利用 IP 数据报中的 TTL 字段和 ICMP 时间超过差错报告报文实现对从源点到终点的路径的跟踪。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!



















