计算机网络-网络层

445 阅读11分钟

1.概述

因为网络层时整个互联网的核心,因此应当让网络层可能简单网络层。网络层向上只提供简单灵活的、无连接的和尽最大努力交互的数据报服务

使用ip协议,可以把异构的物理网络连接起来,使得网络层看起来好像时一个同一的网络

image.png

与IP协议配套使用的还有三个协议

  • 地址解析协议ARP(Address Resolution Protocol)
  • 网际控制报文协议ICMP(Internet Control Message Protocol)
  • 网际组管理协议IGMP(Internet Group Management Protocol)

2.IP数据报格式

image.png

  • 版本: 有IPv4和IPv6两个值;
  • 首部长度: 占4位,因此最大值为15。值为1表示的是1个32位字的长度,也就是4字节。因为固定部分长度位20字节,因此该值最小为5。如果可选字段的长度不是4字节的整数倍,就用尾部的填充部分来填充
  • 区分服务: 用来获得更好的服务,一般情况下不适用
  • 总长度: 包括首部长度和数据部分长度
  • 生存时间: TTL,他的存在是为了防止无法交付的数据包在互联网中不要兜圈子。以路由器跳数为单位,当TTL为0时就丢弃数据报
  • 协议: 指出携带的数据应该上交给哪个协议进行处理,例如ICMP,TCP,UDP等
  • 首部检验和: 因为数据报没经过一个路由器,都要清新计算检验和,因此检验和不包含数据部分可以减少计算的工作量
  • 标识: 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符
  • 片偏移: 和标识符一起,用于发生分片的情况。片偏移的单位为8字节

image.png

3.地址偏移方式

IP地址的编址方式经历了三个历史阶段:

  • 分类
  • 子网划分
  • 无分类

3.1 分类

由两部分组成,网络号和主机号,其中不同分类具有不同的网络号长度,并且时固定的

  • ip地址 ::={<网络号>,<主机号>}

image.png

3.2 子网划分

通过在主机号字段中拿一部分作为子网号,把两级IP地址划分为三级IP地址

  • IP地址 ::= {<网络号>,<子网号>,<主机号>}

  • 要使用子网,必须配置子网掩码

    • 一个B类地址的默认子网掩码为255.255.0.0,如果B类地址的子网占两个bit,那么子网掩码为 11111111 11111111 11000000 00000000 , 也就是255.255.192.0
  • 注意,外部网络看不到子网的存在

3.3 无分类

无分类编制CIDR消除了传统A类,B类和C类地址以及划分子网的概念,使用网络前缀和主机号来对IP地址进行编码,网络前缀的长度可以根据需要变化

  • IP 地址 ::= {<网络前缀号>,<主机号>}
  • CIDR的记法上采用在IP地址后面加上网络前缀长度的方法
    • 例如 128.14.35.7/20 表示前20位为网络前缀
  • CIDR的地址掩码可以继续称为子网掩码,子网掩码首1长度为网络前缀的长度
  • 一个CIDR地址块中有很多地址,一个CIDR表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也成为构成超网
  • 在路由表中的项目由"网络前缀"和"下一跳地址"组成,在查找时可能会得到不止一个匹配结果,应当采用最前缀匹配来确定应该匹配哪一个

4.地址解析协议ARP

网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP数据报的源地址和目的地址始终不变,而MAC地址随着链路的改变而改变

image.png

  • ARP实现由IP地址得到MAC地址

image.png

  • 每个主机都有一个ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址到MAC地址的映射表

如果主机A知道主机B的IP地址,但是ARP高速缓存中没有该IP地址到MAC地址的映射,此时主机A通过广播的方式发送ARP请求分组,主机B收到该请求后会发送ARP相应分组给主机A告知其MAC地址,随后主机A向其告诉缓存中写入主机B的IP地址到MAC地址的映射

image.png

5.网际控制报文协议ICMP

ICMP是为了更有效地转发IP数据报和提高交付成功的机会。它封装在IP数据报中,但是不属于高层协议

image.png

  • ICMP报文分为差错报告报文和询问报文

image.png

5.1 Ping

Ping是ICMP的一个重要应用,主要用来测试两台主机之间的连通性

  • Ping的原理是通过向目的主机发送ICMP Echo请求报文,目的主机收到后会发送Echo回答报文
  • Ping会根据时间和成功相应的次数估算出数据包往返时间以及丢包率

5.2 Traceroute

Traceroute是ICMP的另一个应用,用来跟踪一个分组从源点到终点的路径

Traceroute发送的IP数据报封装的是无法交付的UDP用户数据报,并由目的主机发送终点不可达差错报告报文

  • 源主机向目的主机发送一连串的IP数据报。第一个数据报P1的生存时间TTL设置为1,当P1到达路径上的第一个路由器R1时,R1收下它并把TTL减一,此时TTL等于0,R1就把P1丢弃,并向源主机发送一个ICMP超时过差报告报文
  • 源主机接着发送第二个数据报P2,并发TTL设置为2。P2先到达R1,R1收下后把TTL减一再转发给R2,R2收下后也把TTL减一,由于此时TTL等于0,R2就丢弃P2,并向源主机发送一个ICMP时间超市差错报文
  • 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把TTL值减一。但是因为数据报封装的时无法交付的UDP,因此目的主机要向源主机发送ICMP终点不可达差错报告报文
  • 之后源主机知道了到达目的主机所经过的路由器IP地址以及到达每个路由器的往返时间

6.虚拟专用网 VPN

由于IP地址的紧缺,一个结构能申请到的IP地址数往往小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的IP地址(专用地址)

有三个专用地址块:

  • 10.0.0.0 ~ 10.255.255.255
  • 172.16.0.0 ~ 172.31.255.255
  • 192.168.0.0 ~ 192.168.255.255

VPN使用公用的互联网作为本机构各专用网之间的通信载体。专用指机构内的主机只与本机构内的其他主机通信;虚拟指好像是,而实际上不是,它是经过公用的互联网

下图中,场所A和B的通信经过互联网,如果场所A的主机X要和另一个场所B的主机Y通信,IP数据报的源地址时10.1.0.1,目的地址10.2.0.3。 数据报先发送到互联网项链的路由器R1,R1对内部数据进行加密,然后重新加上数据报的首部,源地址是路由器R1的全球地址125.1.2.3,目的地址是路由器R2的全球地址194.4.5.6。路由器R2收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为10.2.0.3,就交付给Y

image.png

7.网络地址转换NAT

专用网内部的主机使用本地IP地址又想和互联网上的主机通信时,可以使NAT将本地IP转换为全球IP

在以前,NAT将本地IP和全球IP一一对应,这种方式下拥有n个全球IP地址的专用网内最多只可以同时有n台主机接入互联网。为了更有效地利用全球IP地址,现在常用的NAT转换表把传输层的端口号也用上了,使得多个专用网内部的主机共一个全球IP地址。使用端口号的NAT也叫做网络地址与端口转换NAPT

image.png

8.路由器

8.1 路由器的结构

路由器从功能上划分为: 路由选择和分组转发

分组转发结构由三个部分组成: 交换结构,一组输入端口和一组输出端口

image.png

8.2 路由器分组转发流程

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

image.png

8.3 路由选择协议

路由选择协议都是自适应的,能随着网络通信量和拓扑结构的变化而自适应地进行调整

  • 互联网可以划分为许多较少的自治系统AS,一个AS可以使用一种和别的AS不同的路由选择协议
  • 可以把路由选择协议划分为两大类
    • 自治系统内部的路由选择: RIP 和 OSPF
    • 自治系统间的路由选择:BGP

8.3.1 内部网关协议RIP

RIP是一种基于距离向量的路由选择协议。距离是指跳数,直接相连的路由器跳数为1。跳数最多为15,超过15表示不可达

RIP按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址

距离向量算法:

  • 对地址为X的相邻路由器发来的RIP报文,先修改报文中的所有项目,把下一跳字段中的地址改为X,并发所有的距离字段加1
  • 对修改后的RIP报文中的每一个项目,进行一下步骤
  • 若原来的路由表中没有目的网络N,则把该项目添加到路由表中
  • 否则:若下一跳路由器地址是 X,则把收到的项目替换原来路由表中的项目;否则:若收到的项目中的距离 d 小于路由表中的距离,则进行更新(例如原始路由表项为 Net2, 5, P,新表项为 Net2, 4, X,则更新);否则什么也不做。
  • 若三分钟还没有收到相邻路由器的更新路由表,则把该相邻路由器标为不可达,即把距离置为16

RIP协议实现简单,开销小,但是RIP能使用的最大距离是15,限制了网络的规模,并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器

8.3.2 内部网关协议 OSPF

开放最短路径优先 OSPF , 是为了克服RIP的缺点开发出来的

开放表示OSPF不受某一家厂商控制,而是公开发表;最短路径优先表示使用了Dijkstra提出的最短路径算法SPF

OSPF具有一下特点:

  • 向本自治系统中的所有路由器发送消息,这种方法是洪泛法
  • 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。
  • 只有当链路状态发生变化时,路由器才会发送消息

所有路由器都具有全网的拓扑结构图,并且时一致的。相比于 RIP,OSPF 的更新过程收敛的很快。

8.3.3 外部网关协议 BGP

Border GateWay Protocol

AS之间的路由选择很困难,主要是由于:

  • 互联网规模很大
  • 各个AS内部使用不同的路由选择协议,无法准确定义路径的度量
  • AS之间的路由选择必须考虑有关的策略,比如有些AS不愿意让其他AS经过

BGP只能寻找一条比较好的路由,为不是最佳路由

每个AS都必须配置BGP发言人,通过两个相邻BGP发言人之间建立TCP连接来交换路由信息

image.png