浅谈网络层(1)

网络层的一些概念对理解整个计算机网络起着承上启下的作用,所以将其中的一些重点花时间整理如下。

 

1.IP数据报

 

一个ip数据报由首部数据两部分组成,首部的前一部分是固定长度(这是所有ip数据报必须要有的),共20字节,是所有ip数据报必须具有的,而首部的固定部分的后面试一些可选字段,其长度是可变的,如下图所示:

我们来看看其中固定部分的各个字段是什么意思

  1. 版本:占4位,指IP协议的版本。目前IP、协议的版本号大多数还是4(即IPv4)
  2. 首部长度:占4位,可表示的最大数值是15个单位(一个单位为4字节),因此IP的首部长度的最大值是60字节。
  3. 区分服务:占8位,用来获得更好的服务。只有在使用区分服务(DiffServ)时,这个字段才起作用,在一般的情况下都不使用这个字段
  4. 总长度:占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为65535字节。总长度必须不超过最大传送单元MTU
  5. 标识:占16位,它是一个计数器,用来产生IP数据报的标识。
  6. 标志:占三位,目前只有前两位有意义。标志字段的最低位是MF(More Fragment),MF=1表示后面“还有分片”;MF=0表示最后一个分片。标志字段中间一位是DF(Don`t Fragment),只有当DF=0时才允许分片。
  7. 片偏移:占13位,指出较长的分组在分片后某片在原分组中的相对位置(片偏移以8个字节为偏移单位)
  8. 生存时间:占8位,记为TTL(Time to Live),指示数据报在网络中可通过的路由器数的最大值。
  9. 协议:占8位,指出此数据报携带的数据使用何种协议(TCP,UDP、ICMP、IGMP等),以便目的主机的IP层将数据部分上交给那个处理过程
  10. 首部检验和:首部检验和的计算采用16位二进制反码求和算法
  11. 原地址:占四字节
  12. 目的地址:占四字节

 

注7:假设一个数据报的总长度为3820字节,其数据部分的长度为3800字节(使用固定首部),需要分片为长度不超过1420字节的数据报片。因为固定首部的长度为20字节,因此每个数据报片的数据部分长度不能超过1400字节。于是这个数据报可以分为3个数据报片,其数据部分的长度分别为1400,1400,1000字节(原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值)

 

注10:

 

 

2. 路由器分组转发算法(未划分子网)

  1. 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N
  2. 网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行 3
  3. 若路由表中有目的地址为 D 特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行 4
  4. 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行 5
  5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行 6
  6. 报告转发分组出错。

解释下上面的一些专业名词

1.特定主机路由:虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例,即为特定的目的主机指明一个路由(这种方式方便管理人员控制网络和测试网络,同时也可以在需要考虑某种安全问题时采用这种特定主机路由)。

2.默认路由:此方式可以减少路由表所占用的空间和搜索路由表所用的时间,这种转发方式在一个网络只有很少的对外连接时是很有用的(如一个主机连接在一个小网络上,而这种网络只用一个路由器和互联网连接)。

注意:IP 数据报的首部中没有地方可以用来指明“下一跳路由器的 IP 地址”。当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件。网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。 

 

 

3.子网与三级IP

 

3.1 三级IP

1985年前,我们都是用的2级IP,即采用网络号net-id + 主机号host-id组成,但是这种ip带来了一些问题(ip地址空间利用率低,不灵活,给每个物理网络分配一个网络号会使路由表变得太大因而使网络性能性能变坏等)使得人们在IP地址中增加了一个“子网号字段”,变成了三级IP地址,这种做法也叫做划分子网(subnetting)

怎么划分呢,就是从主机号借用若干位作为子网号subnet-id,而主机host-id也就相应减少若干位。划分子网只是把 IP 地址的主机号 host-id 这部分进行再划分,而不改变 IP 地址原来的网络号 net-id

凡是从其它网络发送给本单位某个主机的ip数据报,仍然是根据ip数据报的目的网络号net-id,先找到连接在本单位网络上的路由器。然后此路由器在收到ip数据报后,再按照目的网络号net-id和子网号subnet-id找到目的子网号。最后就将ip数据报直接交付目的主机。

 

3.2 子网掩码

从一个IP数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分,而使用子网掩码可以找出ip地址中的子网部分。

 

子网掩码是一个网络或一个子网的重要属性。路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。

虽然根据已成为互联网标准协议 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. 报告转发分组出错

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值