liujijiang

计算机网络4:网络层

2020.04.07

网络层

重点:网际协议IP,网际控制报文协议ICMP,IPv6特点

网际协议IP

与IP协议配套使用的三个协议:

  • ARP:地址解析协议
  • ICMP:网际控制报文协议
  • IGMP:网际组管理协议

iShot2020-04-07下午09.12.08-7a3c7cc6646e49e0be4d447b0f0e1ca3

ICMP和IGMP使用IP协议,IP协议使用ARP协议

虚拟互联网络

网络有很多种,要将这些不同的网络连接起来需要使用中间设备:

  • 物理层:转发器
  • 数据链路层:网桥
  • 网络层:路由器
  • 网络层以上:网关

分类的IP

IP:给全球的所有电脑或路由器的每一个端口分配一个32位的全球唯一的标识符

IP编码方式三个阶段:

  • 分类的IP地址
  • 子网的划分
  • 构成超网

iShot2020-04-10下午02.43.00-9cbfe782d8184f31849d2a3a613ca65e

IP是在操作系统的定义的

IP={网络号,主机号}

iShot2020-04-08上午08.54.44-2a660a071579468cbacfc28285b6d38e

A,B,C类用于计算机

网络号 或主机号 全零全1不能用
网络号127本地测试用

默认网关:你的网络要跟外网通信,你的网络进入的第一个路由器的端口IP就是你的网络的网关

IP地址与硬件地址

  • IP地址:IP地址是网络层以上各层使用的逻辑地址
  • 物理地址:数据链路层和物理层使用的地址

iShot2020-04-11上午08.29.05-fe62cd622650438898d061f84eb493cc

网络层屏蔽了硬件不同造成的影响,只要使用相同的IP地址协议就能够实现通信

划分子网

从两级IP地址到三级IP地址

两级IP地址问题:

  • IP得知空间利用率低
  • 给每个物理网络分配一个网络号会造成路由表变化太大是网络性能变坏
  • 两级IP地址不灵活

解决办法:在IP地址中加入了子网号字段

三级IP:
iShot2020-04-11上午08.35.23-7cc10c969d4c49719cdc6d016310fedb

子网掩码

解决的问题:怎么把目的IP145.13.3.10分配到145.13.3.0的子网中

解决办法:把目的IP和255.255.255.0进行运算,结果就是子网IP

其中255.255.255.0就是子网掩码

iShot2020-04-11上午08.38.44-091d54a7a10e4287aeb231c2aec2f265

默认子网掩码:

  • A类:255.0.0.0
  • B类:255.255.0.0
  • C类:255.255.255.0

iShot2020-04-11上午08.40.27-31a98da776a547aaa68f1840633b3e95

使用子网后分组的转发

路由表中包含三项内容:

  • 目的网络地址
  • 子网掩码
  • 下一跳地址

路由器中与运算工作方式:

  • 从数据包首部提取目的IP
  • 判断直接交付:与路由器直接相连的网络进行检查,把目的IP与路由器中每个网络号对应的子网掩码进行与运算,判断结果是否与路由器中的网络号一致,一致即可确定下一跳的端口
  • 判断间接交付:路由表中有目的地址为目的IP的主机路由,确定下一跳的路由器
  • 对路由表中的每一行进行检查,把目的IP与每一行的子网掩码进行与运算,判断结果是否与这一行的网络地址一致,确定下一跳的地址
  • 如果路由表中有默认路由,确定下一跳地址
  • 报告分组转发出错

ARP

局域网协议
ARP:从IP地址解析出MAC地址
网络中的每个设备都有两个地址:IP地址和MAC地址
从一个主机到另一个主机通信:
要经过多个局域网,从始至终IP地址不变,但是在每个局域网传输时的MAC地址是变的,这是就要查找每个主机的ARP(高速缓存表)得知下一个的MAC地址

第一种情况:
当源主机和目的主机在同一个网络(网络地址相同)

  • 源主机运行ARP协议,通过广播的方式广播自己的IP和MAC以及要找的IP和MAC
  • 目的主机发现他要找的MAC地址和自己的MAC地址相同,就发一个响应信息

iShot2020-04-15上午08.44.16-66bce9cd22584da68b50c7adfedd0293

第二种情况:
当源主机和目的主机不在同一个网络
源主机使用ARP解析自己的默认网关的IP地址

第三种情况:
路由器运行ARP协议找到下一跳的路由器

第四种情况:
路由器运行ARP协议找到目的主机

ARP高速缓存表不断更新

IP数据报格式

iShot2020-04-15上午09.17.38-493ac139428248bcb30e4010a1df5dbc

首部长度:20-60字节,一般为20
IP数据报各个字段:

  • 版本:4位,指IP协议的版本,主要是4或者6
  • 首部:4位,最小值5,最大值15
  • 区分服务:8位,区分服务时才使用
  • 总长度:16位,因此数据报的最大长度是65535字节
  • 标识:16位,计数器,产生一个计数器,计数器加一
  • 标志:3位
    • MF=1:后面还有分片
    • MF=0:这是最后一片
    • DF:不能分片
    • DF=0:允许分片
  • 片偏移:13位,

iShot2020-04-15上午09.39.43-65c311757ebe4f12b54dd1b35338dfa9

  • 生存时间(TTL):8位,表示数据报在网络中能通过的路由器数
  • 协议:8位,指明数据部分是什么协议封装的
    常见协议:

iShot2020-04-15上午09.48.01-9c042a02e8144a2285dc56a86c9a1a83

  • 首部校验和:16位,

iShot2020-04-15上午09.49.42-9067646461804304966d35267a713150

  • 源地址:32位
  • 目的地址:32位

超网

CIDR:无分类域间路由选择
IP:{网络前缀,主机号}

CIDR使用斜线记法:主机号后面加一个/,后面写上网络前缀所占的位数
可以使用子网掩码或者地址掩码
地址掩码:斜线后面的数字就是1的个数,剩下的都是0

主机号不能全0或全1
全0表示源IP,全1表示目的IP

地址块:主机号全0到全1

最长前缀匹配

路由表由网络前缀和下一跳地址组成,如果有如果有多个网络前缀的下一跳多能到达目标IP,应该匹配最长的网络前缀
匹配的网络前缀越长,地址号范围就越小,去地址块中查找就容易找到

网际控制报文协议ICMP

ICMP协议的作用就是在IP发送出错时给源主机报告错误
发送出错后丢弃IP数据报,并向源主机发送ICMP报告错误

ICMP格式

iShot2020-04-24上午09.07.20-84b29dda381046d59aadcb046d20e8b6

ICMP种类

两种:

  • ICMP差错报告报文
  • ICMP询问报文

iShot2020-04-24上午09.11.08-89fdb96938fc4838a715682941b173ad

四种差错报告报文:

  • 终点不可达:路由器或者主机不能转发IP时
  • 时间超时:TTL问0时IP还没有到达
  • 参数问题:当路由器或者主机IP的首部参数有错误
  • 改变路由(重定向):路由器给源主机发送ICMP告诉源主机应该给另一个路由器发送IP数据报

iShot2020-04-24上午09.15.45-18697bd626664ffe8efa5b8dd107eaec

应用

ping命令主要使用的就是ICMP协议
traceroute:Unix命令,通过使TTL为1向路由器发送错

路由选择协议

两大类:

  • 静态路由选择:人工配置每一条路由,可以用于小网络,无法使用网络的变化
  • 动态路由选择:复杂,开销大,可以适应外部网络的变化,适用于大网络

分层路由选择协议

对动态路由选择进行探讨
自治系统(AS):把互联网分成多个较小的AS,一个AS对其他的AS表现出单一的路由选择策略
大的自治系统(ISP):

AS的路由选择协议分为两大类:

  • 内部网关协议(IGP):AS内部使用的路由选择协议,包括RIP和OSPF
  • 外部网关协议(EGP):AS之间交换路由信息时使用的协议,包括BGP-4

iShot2020-04-24上午11.11.08-1f378d9b6f5d450680605f4d2d3aed3f

内部网关协议RIP

分布式的基于距离向量的路由选择协议,使用广泛,并且简单
使用RIP协议:要求每个路由器维护自己到其他网络的距离

距离(跳数):与路由器直接相连的网络距离为1,不直接相连就是路由器个数加1,最大为15,16就是不可达的。

RIP协议只选择最短的距离,即使他的时延高

RIP和OSPF都是分布式协议

分布式协议:不断地跟其他的路由器交换信息

RIP的分布式协议特点:

  • 只跟相邻的路由器交换信息
  • 交换自己的全部的路由信息
  • 固定时间间隔交换路由信息

一开始路由器的路由表中是空的,然后通过与相邻的路由器交换路由信息一点点的完善自己的路由信息

路由表中重要的信息就是距离,每次更新的目的也是找出最短的距离

距离向量算法

采用Bellman-For算法:a到b之间有一个c,如果a到b是最短的,那么a到c和c到b也是最短的

处理相邻路由器X发过来的RIP报文:

  • 修改RIP报文:把所有的下一跳地址改为X,所有的距离加一,使得每一项RIP报文包括三个关键数据:
    目的网络N,距离d,下一跳路由X

  • RIP中的数据与路由器自己的数据对比:

    • RIP中目的网络N自己没有,直接加进来
    • RIP中目的网络N自己有并且下一跳X相同,替换
    • RIP中目的网络N自己有但是下一跳X不同,如果d比自己的小,替换
  • 三分钟没有收到相邻路由器的RIP,把相邻路由器标记为不可达(d=16)

  • 返回

内部网关协议OSPF

使用最短路径算法:SPF
使用分布式的链路状态协议
与RIP比三个特点:

  • 向AS中所有的路由器发送信息
  • 发送的信息是:本路由器与相邻的所有的路由器的链路状态
  • 只有链路状态发生变化时才会发送信息

最终:OSPF把一个AS分成多个区域,每个区域所有的路由器都相同的全网的拓扑结构图

iShot2020-04-30上午11.00.27-350434e2540e465a912f91ee3db83c68

AS分成一个主干区域和其他的区域,每个区域有一个区域边界路由器,主干区域有多个区域边界路由器,R3,R4,R7为区域边界路由器

OSPF采用IP数据报传送信息

iShot2020-04-30上午11.03.22-93cbdbacf7574365bfcf14e5849051e9

外部网关协议BGP

AS之间的通信使用BGP

每个AS有多个BGP发言人与外部AS通信

iShot2020-04-30上午11.07.47-49ec8668b9554cc09b946418d00fbb76

四种报文:

  • OPEN报文
  • UPDATE报文
  • KEEPALIVE报文
  • NOTIFICATION报文

路由器构成

两大部分:

  • 分组转发:输入,交换,输出
  • 路由选择(控制部分):制造路由表,和周围的路由器交换路由信息维护路由表

iShot2020-04-30上午11.11.59-3af30cfdd2124b359950c044a279133f

IPv6

  • 地址由32位增大到128位
  • 数据报首部与IPv4不兼容,首部长度固定
  • 允许协议继续扩充
  • 支持自动配置

IPv6数据报格式:

iShot2020-05-13下午07.27.50-f8cedc1091524140b6745a2a7928a112

记法:
128位分成8段,每段16位,16进制表示,用 :分开

VPN和NAT

内网IP:互联网不转发的IP

iShot2020-05-13下午07.37.22-768e71f10e5940bb8db04cd83839cbcc

这些IP是在本地网内部使用的专网IP

VPN

VPN:虚拟专用网
路由器必须至少有一个合法的外网IP,如果这个局域网中发出的消息是外网的IP,那么就交给这个路由器封装一层外网IP向外发送

iShot2020-05-13下午07.41.30-02ad677eb4324067a967c7101707dda6

对外界来说与这个这个内网IP通信其实都是与这一个路由器的外网IP通信

NAT

NAT:网络地址转换

专用网内部的主机可以不具有外网IP实现与外网通信,节约全球互联网IP

路由器有一个或多个外网IP,如果专网IP需要与外网通信,通过路由器外网IP与互联网通信,在经过路由器时源IP换成路由器的外网IP并且在路由器中的NAT地址转换表中记录IP转换,用于在路由器收到一个IP时查找表找到内网IP

如果在记录转换过程时也记录端口号,如果是TCP协议,这个端口号就是TCP的端口号,如果是UDP协议,这个端口号就是UDP的端口号,这样就可以实现多个内网IP使用同一个外网IP,叫做NAPT