计算机网络 | 4.网络层

1.网络层提供的两种服务

网络层关注的是如何将分组从源端沿着网络路径送达目的端。

  • 关于传输可靠性的争论
    • 可靠性由网络 还是端系统 来负责?

    • 在上述例子中,主机A要和主机B通信。类比于从北京邮电大学A同学邮一箱苹果给郑州大学B同学。

      • 如果保证网络可靠,则等价于中间"北京海淀区"、"北京转运公司"、"郑州转运公司"、"郑州高新区"在收到快递后,打开包装,查看苹果个数是否正确,检查苹果是否坏掉。一切正常后才发往下一站,否则联系北京邮电大学A同学重发。(浪费时间)
      • 如果保证端到端可靠,则中间四个转运地拿到快递后,直接发往下一站,而不打开检查。快递到达郑州大学B同学手中时,B同学检查苹果,决定是否重发。
      • 在实际的网络通信中,由端系统保证可靠,而非网络。

(1)两种服务:网络层应该向运输层提供怎样的服务?

<1>虚电路服务

现在已经基本不用

  • 虚电路表示这只是一条逻辑上的连接,分组都沿着逻辑连接发送,而不是真正建立了一条物理连接。
  • 注意,电路交换的电话通信先建立了一条真正的连接。因此分组交换的虚连接和电路交换只是类似,但并不完全一样。

<2>数据报服务

现在广泛使用

  • 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
  • **网络在发送分组时不需要先建立连接。**每一个分组(即IP数据报)独立发送,与其前后的分组无关(不进行编号)。
  • **网络层不提供服务质量的承诺。**即所传送的分组可能出错、丢失、重复和失序(不按顺序到达终点),当然也不保证分组传送的时限。
  • 尽最大努力交付的好处
    • 由于传输网络不提供端到端的可靠传输服务,这就是网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。
    • 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络中主机的运输层负责(包括差错处理、流量控制等)。
    • 采用这种设计的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
    • 因特网能够发展到今日的规模,充分证明了当初采用这种设计思想的正确性。

<3>虚电路和数据报的对比

2.网际协议IP

(1)虚拟互联网

<1>网络互联的设备

  • 中间设备又被称为中间系统中继系统。
    • 物理层的中继系统:转发器
    • 数据链路层的中继系统:网桥和桥接器
    • 网络层中继系统:路由器
    • 网络层以上的中继系统:网关(现在认为是路由器的接口
  • 当中继系统是转发器和网桥时,一般不称为网络互连,因为实际上仅仅是把一个网络扩大了,而这仍然是一个网络。
  • 互联网都是使用路由器进行互联的网络。
    • 网关由于比较复杂,目前使用较少。
    • 由于历史的原因,许多有关TCP/IP的文献将网络层使用的路由器称为网关。

<2>网络互联的问题

  • 互连在一起的网络要进行通信,会遇到许多问题需要解决,如:
    • 不用的寻址方案
    • 不同的最大分组长度
    • 不同的网络接入机制
    • 不同的超时控制
    • 不同的差错恢复方法
    • 不同的状态报告方法
    • 不同的路由选择技术
    • 不同的用户接入控制
    • 不同的服务(面向连接和无连接服务)
    • 不同的管理与控制方式
  • 分组在网络中的传送

<3>互连网络与虚拟互连网络

  • 所谓虚拟互连网络也就是逻辑互联网络,它的意思就是互连起来的各种物理网络的异构型本来就是客观存在的,但是我们利用IP协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络。
  • 使用IP协议的虚拟互连网络可以简称为IP网络
  • 使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就好像在一个网络上进行通信一样,而看不见互连的各具体的网络异构细节。

<4>IP协议简介

  • 网际协议IP就是TCP/IP体系中的两个最主要的协议之一。与IP协议配套使用的还有四个协议:

    • 地址解析协议 ARP
    • 逆地址解析协议 RARP
    • 网际控制报文协议 ICMP
    • 网际组管理协议 IGMP
  • 网络层4个协议之间的层次

    • IP协议依赖ARP协议(ARP解析主机MAC地址)
    • ICMP负责报告网络故障,依赖IP协议。
    • IGMP依赖IP协议。

(2)IP地址

<1>层次化IP地址

  • 层次化IP地址将32位的IP地址分为网络ID主机ID
    • 网络号类似于打电话的区号,从网络号直接找到一个网段,而不关心直接到某台计算机怎么走。(打电话时,输入区号010,直接转到北京,区号不关心你具体打给北京的哪台电话)
    • 主机号可以找到具体某台计算机。

<2>IP地址的分类

  • 网络地址(也称为网络号)唯一指定了每个网络。同一网络中的每台计算机都共享相同的网络地址,并用它作为自己IP地址的一部份。
a.IP地址及其表示法
  • 我们把整个因特网看成一个单一个的、抽象的网络。IP地址就是给每个连接在因特网上的主机(或路由器)的每一个接口分配一个在全世界范围是唯一的32位标识符。
  • IP地址现在由因特网名字与号码指派公司ICANN进行分配。
  • IP地址的编址方法
    • **分类的IP地址。**这是最基本的编址方法,在1981年就通过了相应的标准协议。
    • **子网的划分。**这是对最基本的编址方法的改进,其标准[RFC 950]在1985年通过。
    • 构成超网。 这是比较新的无分类编址方法。1993年提出后很快得到推广应用。
b.分类IP地址
  • 1)分类IP地址介绍

    • 每一类地址都由两个固定长度和字段组成,其中一个字段是网络号,它标志主机(或路由器)所连接到的网络。
    • 另一个字段是主机号,它标志该主机(或路由器)。
    • 两级的IP地址可以表示为: IP地址::={<网络号>,<主机号>}
    • 主机号全0表示本网段,主机号全1表示广播地址
  • 2)IP地址中的网络号和主机号字段

    • 常用的A、B、C类IP地址

      (其中,A、B、C三类地址中,橙色为网络号,黄色为主机号)

    • A、B、C类IP地址的对比

    • 特殊的几个地址

      • 本地环回地址:127.0.0.1
      • DHCP获取失败后,随机获取地址:169.254.0.0(不能访问全网)
    • 保留的私网地址

      • A类:10.0.0.0
      • B类:172.16.0.0---172.31.0.0
      • C类:192.168.0.0---192.168.255.0

<3>子网掩码

计算机在和其他计算机通信时,先判断目标地址和自己是不是处在同一网段,以便决定将数据发给路由器(即网关)还是直接发送给目标IP地址。(子网掩码来实现)

  • 子网掩码的作用:
    • 屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
      • 假设主机A的IP:192.168.80.111,子网掩码:255.255.255.0,网关:192,168,80,1
      • 假设主机B的IP:192.168.80.222,子网掩码:255.255.0.0,网关:192,168,80,2
      • 假设主机C的IP:192.168.90.111,子网掩码:255.255.255.0,网关:192,168,90,1
      • 假设主机D的IP:192.168.90.222,子网掩码:255.255.0.0,网关:192,168,90,2
      • 主机A若要和主机C通信,主机A的IP和子网掩码做与运算 ,得到网段192.168.80.0;用目的主机C的IP和源主机A的子网掩码做与运算 ,得到网段192.168.90.0;判断出源主机A和目的主机C不在同一网段,将数据包交给网关转发。
      • 主机B若要和主机D通信,主机B的IP和子网掩码做与运算 ,得到网段192.168.0.0;用目的主机D的IP和源主机B的子网掩码做与运算 ,得到网段192.168.0.0;判断出源主机B和目的主机D在同一网段,直接把数据包给主机D。
    • 用于将一个大的IP网络划分为若干小的子网络。
      • 后续介绍。
  • 子网掩码与运算 举例
    • 以主机A的IP地址和子网掩码做与运算举例

(3)划分子网和构造超网

子网划分非常非常重要,理解之后对IP地址,子网掩码,网关有更深刻的认识

<1>等长子网划分(以C类地址为例)

  • 问题:某公司部门有一个C类地址192.168.8.0,该网段的子网掩码为255.255.255.0,连接局域网的路由器接口配置使用该网段的第一个可用IP地址192.168.8.1。该部门前端、后端、算法、运营四个团队,每个团队分配50台计算机,现要各自划分各自的网段,共4个网段。

  • 要进行等长子网划分,每个子网可容纳50台主机,因此子网掩码要从C类地址的子网掩码向后移动两位 (2位二进制可以等长表示4个值)

  • 在子网中,通常将第一个地址作为网关(并非必须)

  • IP地址的主机号不能全0(表示本网段)和全1(表示广播)

<2>变长子网划分

  • 问题:有一个C类地址192.168.8.0,该网段的子网掩码为255.255.255.0。现在要划分为4个子网,各需要容纳100台、50台、20台、10台主机,怎么划分?
    • 第一步,仍然是画图

    • 子网1(用来放100台主机):

      • 从图中可以看到,子网1只进行了一次折半 ,因此子网掩码后移一位
      • 此时,子网掩码为11111111 11111111 11111111 10000000,即255.255.255.128
      • 此时,主机号(后7为)范围为:(1)0000001-(1)1111110,即192.168.80.129-192.168.80.254
      • 此时,网关地址(默认为第一位)为:192.168.80.129
      • 此时,最大可容纳主机(除去网关)为125台
    • 子网2(用来放50台主机):

      • 从图中可以看到,子网2进行了两次折半 ,因此子网掩码后移两位
      • 此时,子网掩码为11111111 11111111 11111111 11000000,即255.255.255.192
      • 此时,主机号(后6为)范围为:(01)000001-(01)111110,即192.168.80.65-192.168.80.126
      • 此时,网关地址(默认为第一位)为:192.168.80.65
      • 此时,最大可容纳主机(除去网关)为61台
    • 子网3(用来放20台主机):

      • 从图中可以看到,子网3进行了三次折半 ,因此子网掩码后移三位
      • 此时,子网掩码为11111111 11111111 11111111 11100000,即255.255.255.224
      • 此时,主机号(后5为)范围为:(001)00001-(001)11110,即192.168.80.33-192.168.80.62
      • 此时,网关地址(默认为第一位)为:192.168.80.33
      • 此时,最大可容纳主机(除去网关)为29台
    • 子网4(用来放10台主机):

      • 从图中可以看到,子网4进行了四次折半 ,因此子网掩码后移四位
      • 此时,子网掩码为11111111 11111111 11111111 11110000,即255.255.255.240
      • 此时,主机号(后4为)范围为:(0001)0001-(0001)1110,即192.168.80.17-192.168.80.30
      • 此时,网关地址(默认为第一位)为:192.168.80.17
      • 此时,最大可容纳主机(除去网关)为13台

      子网划分小总结:

      1.对子网划分时,只能进行除2操作,用来把 子网掩码 向后移位。

      (例如,若要将一个C类地址划分为两个子网,分别容纳150台、50台主机。不可行,因为一次折半最大容纳小于128台主机)

      2.网关地址通常为一个网段的第一个地址,并非必须

      3.主机号不能全0(网段地址)和全1(广播地址)

      4.子网掩码的两种写法:

      (1)网段:192.168.80.0,子网掩码:255.255.255.0

      (2)192.168.80.0/24 其中,/24代表子网掩码共24个1

<3>C类地址点到点网络的子网掩码最好为252

  • 点到点网络,两个路由器(可认为一个网段内只有两个主机)
  • 按照之前的画图方法,共需要折半6次,即子网掩码后移6为,此时为11111111 11111111 11111111 11111100,此时子网掩码的点分十进制为255.255.255.252

<4>超网

a.合并两个C类网络
  • 问题:如果一个公司400台主机要连接在同一个网段,那么一个C类网络无法实现(一个C类网络最大连接254台)。那么两个C类网络怎么合并为一个网段呢?
  • 假设两个C类地址,分别为192.168.0.0/24和192.168.1.0/24
    • 网段1:11000000 10101000 00000000 00000000
    • 网段2:11000000 10101000 00000001 00000000
    • 根据上述二进制,将主机号向前左移1位,因此,此时的子网掩码为11111111 11111111 11111110 00000000,点分十进制为255.255.254.0
    • 此时,网段1的IP为192.168.1.0/25,网段2的IP为192.168.1.0/25。公共网关为192.168.0.1/25
    • 此时,网段1中的主机和网段2中的主机通信时,不通过网关(路由器)。
b.合并的规律
  • 网段192.168.1.0和192.168.2.0不能合并
    • 网段1:11000000 10101000 00000001 00000000
    • 网段2:11000000 10101000 00000010 00000000
    • 如果要合并,则至少要左移两位,此时,将192.168.0.0和192.168.3.0也合并进去了,不满足要求。
  • 合并4个子网
    • 网段192.168.0.0和网段192.168.1.0和网段192.168.2.0和网段192.168.3.0可以合并
    • 子网掩码(主机号左移两位)为:255.255.252.0
  • 合并子网的规律总结图
    • 合并两个子网时,偶数为小,奇数为大可合并
      • 例如:192.168.2.0和192.168.3.0可合并
      • 例如:192.168.1.0和192.168.2.0不可合并
      • 推测:192.168.117.0和192.168.118.0不可合并

(4)IP地址与MAC地址

<1>IP地址与MAC地址

  • 两主机通信时IP地址和MAC地址图

  • 在传输中,数据段+源IP地址+目的IP地址保持不变

  • MAC地址一直在变,指向下一跳地址(使用ARP协议)

  • 注意三条数据帧中,源MAC地址和MAC地址的区别

<2>ARP地址解析协议

a.ARP工作流程
  • ARP作用

    • 地址解析协议,即ARP,是根据IP地址获取MAC物理地址的一个TCP/IP协议。
    • 主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址
    • 收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源
  • ARP地址解析协议流程图(重要)

b.ARP地址安全
  • ARP地址欺骗
    • 在数据链路层了解过,交换机(不同于集线器)内部通过MAC连通主机A与主机B,因为主机A和主机B通信时,主机D无法抓包
    • 在上图中,主机D安装一个黑客软件。
    • 主机A要与外界通信时,发送一个ARP广播,需要传回网关的MAC地址
    • 主机D收到广播后,将自己的MAC地址假装为网关的MAC地址传给主机A
    • 主机A将主机D的虚假MAC地址封装成帧,发送数据帧
    • 主机D收到数据帧之后,将MAC地址换为网关的MAC地址,发送出去
    • 网关拿到外界的返回数据,发送给主机D(因为主机D通过网关发送的请求,因此网关返回数据给到主机D的MAC地址)
    • 主机D再将数据发送给主机A
      • 此时,主机A并不知道,自己和外界的通信通过了主机D
      • 主机D截获了主机A和外界通信的所有数据包
  • P2P终结者限制带宽
    • 上图中,主机D安装P2P终结者软件
    • 主机A、B、C与外界通信时,发送ARP广播寻找网关的MAC地址
    • 主机D将自己的MAC地址伪装为网关MAC地址,发送给主机A、B、C
    • 类似上述"ARP地址欺骗"过程,主机A、B、C与外界的所有数据交换都需要通过主机D,再通过网关,因此主机D可以对其他主机进行限速。
  • 网络执法官
    • 网络执法官软件可以控制本网段那些计算机可以相互通信
    • 安装防火墙没有用,因为主机D在本网段之内
    • 主机D安装网络执法官软件
    • 当某主机要与外界通信时,主机D伪装路由器返回一个不存在的MAC地址。要通信的主机发送多次ARP广播得不到返回,网络中断。
  • 防止ARP地址欺骗的方法
    • 安装ARP防火墙
    • 手动配置网关的MAC地址

<3>RARP协议

通过MAC地址找到IP地址

(5)IP数据报

<1>数据报首部的两个组成部分

  • 一个IP数据报由首部和数据两部分组成
    • 首部的前一部份是固定长度,共20字节,是所有IP数据报必须具有的。
    • 在首部的固定部分的后面是一些可选字段,其长度是可变的。

<2>IP数据报首部详解

a.版本
  • 占4位,指IP协议的版本。指定IPv4或IPv6.
b.首部长度
  • 占4位,表示的最大数值是15个单位(一个单位为4字节),因此IP的首部长度最大为16字节。
c.区分服务
  • 占8位,为解决服务质量问题在网络上将用户发送的数据流按照它对服务质量的要求划分等级的一种协议。
  • 简单说,区分服务是区分不同数据的重要性(重要的传输速度快)
d.总长度
  • 占16位,指首部和数据之和的长度,单位是字节,因此数据报的最大长度是65535字节。总长度必须不超过最大传送单元MTU。
e.标识
  • 占16位,它是一个计数器,用来产生数据报的标识,不是序号,每生产一个数据报,就增加1.
f.标志
  • 占3位,目前只有前两位有意义。
    • 标志字段的最低位是MF。
      • MF=1,表示后面还有"分片"
      • MF=0,表示最后一个"分片"
    • 标志字段的中间一位是DF。
      • 只有当DF=0时,才允许切片
g.片偏移
  • 占13位,较长的分组在分片后,某片在原分组中的相对位置。片偏移以8个字节为偏移单位。

  • IP数据报分片举例

h.生存时间TTL
  • 占8位,用来标注该数据报经过路由器中转的最大时间(最大中转次数)
    • 防止找不到目的主机时,发送的IP数据报在网络中无限兜圈子浪费(占用)带宽资源
    • 假设将生存时间设置为128,则数据报传送时,每经过一个路由器时,将其减1,当TTL=0时,数据报超时丢弃。
    • 注意区分,请求时,是源主机的TTL,当接受时,是目的主机(返回数据)的TTL
      • 使用ping百度举例

      • 合理猜测(不一定对):百度服务器使用Linux系统,TTL设置为64。由于图中TTL=55,从百度服务器返回数据到我的电脑,共经过了9个路由器。

i.协议
  • 占8位,指出此数据携带的数据使用了何种协议,以便目的主机的IP层将数据部分上交给哪个处理进程。
  • 常用协议号举例:
    • 6 TCP协议
    • 17 UDP用户数据报
    • 121 简单邮件协议
j.首部校验和
  • 占16位,只检验数据报的首部,不检验数据部分。
  • 这里不采用CRC校验码而采用简单的计算方法。
  • 首部校验和的计算举例:
k.源地址
  • 占32位,即源主机的IP地址
l.目的地址
  • 占32位,即目的主机的IP地址
m.可变部分
  • IP首部的可变部分是一个选项字段,用来支持排错,测量以及安全等措施,内容很丰富。
  • 选项字段的长度可变,从1字节到40个字节不等,取决于所选择的项目。
  • 增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度变为可变的,这就增加了每一个路由器处理数据包的开销。
  • 实际上这些选项很少被使用。

(6)IP转发分组的流程(重要)

<1>前提

  • 数据路由
    • 路由器在不同网段转发数据报
  • 网络畅通的条件(能去能回)
    • 沿途的路由器必须知道到目标网络下一跳给哪个接口
    • 沿途的路由器必须知道到源网络下一跳给哪个接口

<2>IP转发分组与静态路由

a.IP转发分组图
b.IP转发分组详解及配置静态路由
  • 上图中,共有5个网段
    • 网段1:192.168.0.0/24
    • 网段2:172.16.0.0/24
    • 网段3:172.16.1.0/24
    • 网段4:172.16.2.0/24
    • 网段5:192.168.1.0/24
  • 网关
    • 路由器Router0
      • 网关A:192.168.0.1/24
      • 网关B:172.16.0.1/24
    • 路由器Router1
      • 网关C:172.16.0.2/24
      • 网关E:172.16.1.1/24
    • 路由器Router2
      • 网关F:172.16.1.2/24
      • 网关G:172.16.2.1/24
    • 路由器Router3
      • 网关H:172.16.2.2/24
      • 网关I:192.168.1.1/24
  • 直连的网络不需要配置路由表就知道怎么走
    • 对于路由器Router0
      • 网关A和网关B直连,因此知道网段1:192.168.0.0到网段2:172.16.0.0怎么走
    • 对于路由器Router1
      • 网关C和网关E直连,因此知道网段2:172.16.0.0到网段3:172.16.1.0怎么走
    • 对于路由器Router2
      • 网关F和网关G直连,因此知道网段3:172.16.1.0到网段4:172.16.2.0怎么走
    • 对于路由器Router3
      • 网关H和网关I直连,因此知道网段4:172.16.2.0到网段5:192.168.1.0怎么走
  • 不直连的网络需要配置路由表才能知道下一跳给谁
    • 例如网段1:192.168.0.0和网段3:172.16.1.0通信,路由器Router0不知道下一跳给谁。
    • 举例:主机PC0使用ping命令测试主机PC0与网关C的通断,ping 172.16.0.2
      • 去的时候,目的IP地址为172.16.0.2,不在同一网段,因此PC0将数据交给网关A,而目的IP地址恰巧和网关B在同一网段,并且网关A和网关B直连 ,因此路由器Router0通过网关B将数据交给网关C(因为目的网关C和网关B的IP在同一网段)。因此,数据可以去到网关C
      • 回的时候,数据报的目的IP为PC0的IP,即192.168.0.2,路由器Router1根据目的主机的IP地址不知道要将数据报交给谁。因此,数据不能从网关C回到主机PC0
      • 若想ping通,需要在路由器Router1添加路由表:将网段192.168.0.0的数据交给路由器Router0的网关A:172.16.0.1。
  • 主机0(192.168.0.2)要和主机1(192.168.1.2)通信,需要静态配置路由表
    • 路由器Router0
      • 到网段3:172.16.1.0,下一跳为网关B:172.16.0.1。
      • 到网段4:172.16.2.0,下一跳为网关B:172.16.0.1。
      • 到网段5:192.168.1.0,下一跳为网关B:172.16.0.1。
    • 路由器Router1
      • 到网段1:192.168.0.0,下一跳为网关C:172.16.0.2。
      • 到网段4:172.16.2.0,下一跳为网关E:172.16.1.1。
      • 到网段5:192.168.1.0,下一跳为网关E:172.16.1.1。
    • 路由器Router2
      • 到网段1:192.168.0.0,下一跳为网关F:172.16.1.2。
      • 到网段2:172.16.0.0,下一跳为网关F:172.16.1.2。
      • 到网段5:192.168.1.0,下一跳为网关G:172.16.2.1。
    • 路由器Router3
      • 到网段1:192.168.0.0,下一跳为网关H:172.16.2.2。
      • 到网段2:172.16.0.0,下一跳为网关H:172.16.2.2。
      • 到网段3:172.16.1.0,下一跳为网关H:172.16.2.2。
c.负载均衡
  • 如图所示,PC0和PC1通信,中间有两条线路,按照图中方框所示,配置Router3、Router0、Router1、Router2,即可实现双向通信
  • 问题:如果要实现上边线路完成PC0到PC1传输,下边线路完成PC1到PC0,怎么配置路由器?
    • 对于Router3(PC0到PC1):
      • 到网段192.168.3.0/24,下一跳给192.168.1.2
    • 对于Router0(PC0到PC1):
      • 到网段192.168.3.0/24,下一跳给192.168.2.2
    • 对于Router2(PC1到PC0):
      • 到网段192.168.0.0/24,下一跳给192.168.4.2
    • 对于Router1(PC1到PC0):
      • 到网段192.168.0.0/24,下一跳给192.168.5.1
  • 考虑一台主机配两个网卡(两个网关),一个连接Internet,一个连接公司内网的情况。(外网另一台主机ping该主机,会丢包。因为该主机发数据包的时候,会认为两个网关是等价的。要想解决该问题,要对该主机进行静态路由配置,规定数据报的发送方向)
d.IP转发分组与静态路由总结
  • 关于下一跳
    • IP数据报的首部中没有地方可以用来指明"下一跳路由器的IP地址"。
    • 当路由器收到待转发的数据报,不是将下一跳路由器的IP地址填入IP数据报,而是交给下层的网络接口软件
    • 网络接口软件使用ARP负责将下一跳路由器的IP地址转换为硬件地址,并将此硬件地址放在链路层的MAC帧首部,然后根据这个硬件地址找到下一跳路由器。
  • 分组转发算法
    • 1)从数据报的首部提取出目的主机的IP地址D,得出目的网络地址为N
    • 2)若网络N与此路由器直接相连,则把数据报直接交付目的主机D;否则是间接交付,执行3)。
    • 3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器。否则,执行4)。
    • 4)若路由表中有到达网络N的路由,则把数据报传送给路由表指明的下一跳路由器。否则,执行5)。
    • 5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器,否则,执行6)。
    • 6)报告转发分组出错。

<3>动态路由协议

动态路由是指路由器能够自动地建立自己的路由表,并且能够根据实际情况的变化适时地进行调整。

a.RIP协议(内部网关协议)

用于自治系统(AS)内的路由信息的传递。RIP协议基于距离矢量算法,使用"跳数"来衡量到达目标地址的路由距离。这种协议的路由器只关心自己周围的世界,只与自己相邻的路由器交换信息,范围限制在15跳(15度)之内,再远,它就不关心了。

  • 把自己知道的所有网段周期性的发广播告诉其他路由器

  • 工作原理

    • 假如路由器1连接网段1,则每隔30秒,路由器1发送广播,告诉路由器2、路由器4,如果要往网段1,将数据报发给它,并且计数经过1个路由器。
    • 以路由器3为例,介绍流程:
      • 隔30s,路由器2告诉路由器3,如果要往网段1,将数据报发给它,并且计数经过2个路由器。
      • 隔30s,路由器4告诉路由器5,如果要往网段1,将数据报发给它,并且计数经过2个路由器。
      • 隔30s,路由器5告诉路由器6,如果要往网段1,将数据报发给它,并且计数经过3个路由器。
      • 隔30s,路由器6告诉路由器3,如果要往网段1,将数据报发给它,并且计数经过4个路由器。
      • 此时,路由器3收到两个路由路径。然后路由器3根据"距离优先(根据跳数)",选择从路由器2--到路由器1--到网段1 这条路径。
      • 假如使用途中,路由器2宕机,选择 路由器6--路由器5--路由器4--路由器1--网段1路径。
  • 工作特点:

    • 周期性广播 30s
      • 上述例子中,假如路由器1宕机,路由器2和路由器4在3个30s之内,没有收到路由器1的广播,则认为路由器1宕机。并在下次30s的广播时将其告诉路由器3、路由器5。
    • 跳数 15跳
      • 范围限制在15跳(15度)之内,再远,它就不关心了。
      • 根据跳数选择的方法有缺陷,如果6跳到达,带宽为100M;3跳到达,带宽1M。则选择6跳速度更快。
b.OSPF协议:开放式最短路径优先(内部网关协议)
  • 向本自治系统中所有路由器发送信息,这里使用的是洪范法。
  • 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知信息的部分信息。
  • 只有当链路状态发生变化时,路由器才用洪范法向所有路由器发送此信息。
  • 工作特点

    • 度量值:带宽(不同于RIP的跳数)
    • 支持多区域
    • 触发式更新
    • 三个表
      • 邻居表
      • 链路状态表
      • 路由表
  • 工作原理

    • 邻居表
      • 每隔2s,向邻居路由器发送hello包(很小),收到回应,表示邻居健在且链路没有改变。
    • 链路状态表
      • 将相邻的链路状态表交换一下
      • 例如:路由器1的初始表中:1-2;1-4
      • 路由器2的初始表中:2-1;2-3;2-4
      • ......不再写
      • 交换之后,每个路由器都有整个自治系统内所有的完整的链路状态(都相同)
      • 当链路状态发生改变时(增加或减少),链路状态表进行更新
    • 路由表
      • 路由器根据链路状态表,依据带宽,计算出要选择的路由。(路由是计算出来的)
      • 通过加权计算选择出最佳路由。
      • 路由路径,没有环(是树形结构,类似于通过数据结构连通图画出最小生成树)
  • OSPF划分两个不同的区域

  • OSPF的其他特点

    • OSPF不用UDP而是直接用IP数据报传送
    • OSPF对不同的链路可根据IP分组的不同服务类型而设置成不同的代价。因此,OSPF对于不同类型的业务可计算出不同的路由。
    • 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫做多路径的负载均衡。
    • 所有在OSPF路由器之间交换的分组都具有差别的功能。
    • 支持可变长度的子网划分和无分类编址CIDR。
    • 每一个链路状态都带上一个32位的序号,序号越大链路就越新。
c.BGP协议:边界网关协议(外部网关协议)
  • BGP协议

    • BGP协议是不同自治系统的路由器之间交换路由信息的协议,BGP较新版本是BGP-4。
    • 边界网关协议BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
    • 每一个自治系统的管理员要选择至少一个路由器作为本自治系统的"BGP发言人"。
  • BGP发言人和自治系统AS的关系

  • BGP发言人交换路径向量

  • BGP协议的特点

    • BGP协议交换路由信息数量不是很多
    • BGP发言人数目不多,路由选择相对简单
    • BGP协议支持CIDR
    • BGP建立时,交换整个路由表;此后只交换变化部分

<3>VPN虚拟专用网络

虚拟专用网络的功能是:在公用网络上建立专用网络,进行加密通讯。在企业网络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。VPN可通过服务器、硬件、软件等多种方式实现。

a.VPN的功能
  • 外网怎么访问三类地址中的私有地址???

  • 问题:在家怎么访问校园网内网?(或者在家访问公司内网)

  • 正如上图,VPN技术 相当于 把外网的PC放入了企业内网中

    • 公司的VPN服务器分配给外网PC一个私网IP(外网PC通过VPN拨号)
    • 外网PC访问内网时,广域网信息内增加了 私网源IP(VPN服务器分配的)和目的私网IP。实现通信。(可以远程连接公司VPN,通过连接到公司局域网的打印机打印文件)
b.举例VPN解决三种情况
  • VPN可解决情况1:外网PC通过内网的VPN服务器 连接到控制内网PC

    • 问题:如果内网的主机希望外网的PC协助解决问题,怎么办?

    • 此时,外网PC连接内网的VPN服务器,相当于外网PC和内网PC同处在内网

    • 此时,如果使用远程连接的默认网关 ,则此时,如果PC1访问PC3时,不是直接通过Internet访问。而是先将数据交到内网,内网网关再访问PC3,PC3返回数据到内网,再由内网返回到PC1(跨链路长)。因此通常不使用远程默认网关。

  • VPN可解决情况2:内网1 的PC通过内网1的VPN服务器 连接到内网2 的2PC

    • 问题:如果内网1的PC1希望内网2的PC2协助解决问题,但是内网1没有VPN服务器怎么办?
    • 那么让内网1的PC1连接到内网2的VPN服务器,相当于PC1和PC2同处内网2。再将内网2的VPN服务器分配给内网1的PC的私网IP地址(内网2的),内网2的PC2直接连接到分配给PC1的这个私网IP地址。
  • VPN可解决情况3:内网1 的PC通过内网3的VPN服务器 连接到内网2 的PC

    • 问题:假如内网1和内网2都没有VPN服务器,怎么办?
    • 内网1和内网2的PC1和PC2都连接到内网3的VPN服务器,此时相当于PC1和PC2同处内网3。互相告诉内网3分配的私网IP地址即可通信。
c.VPN技术实现虚拟专用网

<4>NAT和PAT

  • 外网不转发私有地址的数据报,那么私网怎么连接到外网呢?
    • (所有主机享用一个合法IP地址来实现互联网的访问,最大限度的节约公网IP资源。)
a.地址转换技术NAT
  • 网络地址转换NAT方法于1994年提出
  • 需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球地址IPG
  • 所有使用本地地址的主机在和外界通信时都要在NAT路由器上将其本地地址转换成IPG才能和因特网连接。
  • 网络地址转换的过程
    • 内部主机X用本地地址IPX和因特网上主机Y通信所发送的数据报必须经过NAT路由器。
    • NAT路由器将数据报的源地址IPX转换成全球地址IPG,但目的地址IPY保持不变,然后发送到因特网。
    • 主机Y返回数据时,数据报中的源地址是IPY,目的地址是IPG。
    • NAT路由器收到主机Y发回的数据报后,根据NAT转换表,NAT路由器将目的地址IPG转换为IPX,转发给最终的目的主机X。
    • 私网中所有主机都用同一个公网IP地址(IPX)转换。在外网中,不知道私网的存在,都以为是IPG在网络上通信。
b.PAT端口地址转换
  • 端口地址转换PAT是对网络地址转换NAT的扩展,它允许本地网LAN上的多个设备映射到一个单一的公共IP地址。
  • 私网和外网通信时,不仅使用NAT,还使用PAT。
    • 实际上是计算机的不同端口在通信,例如WEB的默认端口80,MySQL默认端口3306。
c.虚拟机的网络设置
  • 虚拟机设置网络时,大多选择NAT模式
    • 物理机装上VMware之后,选择NAT模式。相当于物理机虚拟出来了一个网段,物理机的IP地址相当于公网地址,虚拟机里边的主机使用的为私有IP地址,虚拟机上网时做了虚拟地址转换。
  • VMware虚拟机创建时,可以选择三种网络模式
    • 桥接模式(主机和虚拟机处在同一局域网,地位均等。局域网内其他主机知道 虚拟机的存在)
      • VMware 桥接模式,也就是将虚拟机的虚拟网络适配器与主机的物理网络适 配器进行交接,虚拟机中的虚拟网络适配器可通过主机中的物理网络适配 器直接访问到外部网络。简而言之,这就好像局域网中添加了一台新的、独 立的计算机一样。因此,虚拟机也会占用局域网中的一个 IP 地址,并且可 以和其他终端进行相互访问。桥接模式网络连接支持有线和无线主机网络 适配器。
    • NAT模式(物理机的IP相当于NAT的公网IP,局域网内其他主机不知道 虚拟机的存在)
      • NAT 模式网络连接时,VMware 会在主机上建立单独的专用网络,用以在主 机和虚拟机之间相互通信。虚拟机向外部网络发送的请求数据"包裹",都会 交由 NAT 网络适配器加上"特殊标记"并以主机的名义转发出去,外部网络 返回的响应数据"包裹",也是先由主机接收,然后交由 NAT 网络适配器根 据"特殊标记"进行识别并转发给对应的虚拟机("特殊标记:地址转换")。 因 此,虚拟机在外部网络中不必具有自己的 IP 地址。从外部网络来看,虚拟 机和主机在共享一个 IP 地址,默认情况下,外部网络终端也无法访问到虚 拟机。
    • 仅主机模式(默认情况下不能联网)
      • 仅主机模式,是一种比 NAT 模式更加封闭的的网络连接模式,它将创建完 全包含在主机中的专用网络。仅主机模式的虚拟网络适配器仅对主机可见, 并在虚拟机和主机系统之间提供网络连接。(默认情况下不能联网)

3.ICMP协议 和 IGMP协议

(1)ICMP协议

<1>ICMP协议简介

  • 为了提高IP数据报交付成功的机会,在网络层使用了网际控制报文协议ICMP。
  • ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。
  • ICMP不是高层协议,是网络层的协议
  • ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。

<2>ICMP报文格式

(2)IGMP协议

Internet 组管理协议称为IGMP协议,是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。IGMP协议共有三个版本,即IGMPv1、v2 和v3。

  • IP组播通信的特点是报文从一个源发出,被转发到一组特定的接收者。

  • 组播通信模型中,发送者不关注接收者的位置信息,只是将数据发送到约定的目的组播地址。

  • 要使组播报文最终能够到达接收者,需要某种机制使连接接收者网段的组播路由器能够了解到该网段存在哪些组播接收者,同时保证接收者可以加入相应的组播组中。

  • IGMP是用来在接收者主机和与其所在网段直接相邻的组播路由器之间建立、维护组播组成员关系的协议。

  • 应用场景:视频会议

    • 北京的领导讲话,音视频数据报使用主机A通过路由器R0发送一个多播数据报。
    • 在路由器R1处,多播数据报可以复制为两份,发送到郑州和上海。
    • 郑州(上海和郑州相同)的路由器扫描郑州公司的网段中,有没有主机的IP地址属于多播地址。
      • 如果主机的IP地址属于多播地址,向上游路由器请求多播数据报。
      • 如果该网段没有一个主机属于多播地址,则通知上游路由器R1,不再向R2发送多播数据报。
相关推荐
野蛮的大西瓜几秒前
Java+FreeSWITCH 开源呼叫系统详解
java·开发语言·语言模型·自然语言处理·机器人·开源·信息与通信
夜半被帅醒5 分钟前
C# 开发探索与实践 第一个C#程序
开发语言·c#
湫ccc11 分钟前
Python连接MySQL数据库教程
开发语言·python·mysql
精神病不行计算机不上班12 分钟前
[C++]多态
开发语言·c++
冷子夜31 分钟前
PHP排序算法:数组内有A~E,A移到C或者C移到B后排序,还按原顺序排序,循环
php·排序算法
liuweni35 分钟前
Next.js流量教程:如何在 Next.js 中使用 React Helmet 管理 SEO Meta 标签
开发语言·javascript·经验分享·前端框架·创业创新·媒体·程序员创富
Evand J1 小时前
平方根无迹卡尔曼滤波(SR-UKF)的MATLAB例程,使用三维非线性的系统
开发语言·matlab
好奇的菜鸟1 小时前
如何为IntelliJ IDEA配置JVM参数
开发语言·后端
陌上花开࿈1 小时前
用户登录认证
java·开发语言·前端
揽月随风醉1 小时前
golang 判断一个点是否在一个多边形内
开发语言·后端·golang