计算机网络系列笔记(四) - 网络层

概述

网络层从发送主机向接收主机传送数据段(segment)
发送主机:将数据段封装到数据报(datagram)中
接收主机:向传输层交付数据段
每个主机和路由器都运行网络层协议, 路由器检验所有穿越它的ip数据报的头部域决策如何处理ip数据报
网络层的核心功能是转发(forwarding)和路由(routing), 连接建立

  • 转发: 将分组从路由器的输入端口转移到合适的输出端口
  • 路由: 确定分组从源到目的经过的路径, 依赖路由算法
  • 连接建立: 某些网路的重要功能, 比如ATM,帧中继, X.25, 数据分组传输之前两端主机需要首先建立虚拟/逻辑连接

网络层连接与传输层连接对比: 网络层连接两个主机之间, 路径上的路由器等网络设备都参与其中, 传输层连接, 两个应用进程之间, 对中间网络设备透明

网络层为发送端主机到接收端主机的数据报传送通道提供的服务模型:

  • 无连接服务(connection-less service): 不事先为系列分组的传输确定路径, 每个分组独立确定传输路径, 不同分组可能传输路径不同, 例如数据报网络
  • 连接服务(connection service): 首先为系列分组的传输确定从源到目的经过的路径(建立连接), 然后沿该路径传输系列分组, 系列分组传输路径相同, 传输结束后拆除连接, 例如虚电路网络

虚电路和数据报

类似于传输层的无连接服务(UDP)和面向连接服务(TCP), 但网络层服务是主机到主机服务, 网络核心实现

虚电路网络(Virtual Circuits)

虚电路: 一条从源主机到目的主机, 类似于电路的路径(逻辑连接), 使用分组交换, 每个分组的传输利用链路的全部带宽, 源到目的的路径经过的网络层设备共同完成虚电路功能
通信过程: 呼叫建立, 数据传输, 呼叫拆除
每个分组携带虚电路标识(VC id), 而不是目的主机地址, 虚电路经过的每个网络设备, 维护每条经过它的虚电路连接状态, 链路/网络设备资源可以面向VC进行预分配
每条虚电路包括从源主机到目的主机的一条路径, 虚电路号, 沿路每个网络层设备, 利用转发表记录经过的每条虚电路
同一条VC, 在每段链路上的VC id通常不同, 路由器转发分组时依据转发表改写虚电路号
虚电路信令协议(signaling protocols), 用于VC的建立,维护和拆除, 目前的internet不采用

数据报网络

网络层无连接, 每个分组携带目的地址, 路由器根据分组的目的地址转发分组, 基于路由协议构建转发表, 检索转发表, 每个分组独立选路
路由算法确定通过网络的端到端路径, 转发表确定在本路由器如何转发分组, 转发表聚合地址范围减小数据量, 检索转发表时优先选择与分组目的地址匹配前缀最长的入口

数据报网络, 计算机之间的数据交换, 没有严格时间需求, 链路类型众多, 智能端系统, 简化网络, 复杂边缘
虚电路网络, 电话网络演化而来, 核心业务是实时对话, 严格的时间, 可靠性需求, 需要有保障的服务, 哑端系统, 电话机传真机, 简化边缘, 复杂网络

IP协议

主机,路由器网络层主要功能:
路由协议(路径选择)->转发表->ip协议(寻址规约,数据报格式,分组处理规约),icmp协议(差错报告,路由器信令)

IP数据报格式

IP数据报格式

1
2
3
4
5
6
7
8
9
10
11
12
13
版本号: 4位, IP协议版本号, IPv4或IPv6
首部长度: 4位, IP分组首部长度, 以4字节为单位
服务类型: 8位, 期望获得哪种类型服务, 一般情况下不使用, 只有在网络提供区分服务时使用
总长度: 16位, IP分组的总字节数(首部+数据)
标识: 16位, 标识一个IP分组, IP协议利用一个计数器, 每产生IP分组计数器加1, 作为该IP分组的标识
标志位: 3位, 保留位|DF|MF, DF(dont fragment),1禁止分片,0允许分片, MF(more fragment),1非最后一片,0最后一片/未分片
片偏移: 13位, 一个IP分组分片封装原IP分组数据的相对偏移量, 片偏移以8字节为单位
生存时间: 8位, IP分组在网络中可以通过的路由器数/跳步数, 路由器转发一次分组, ttl减1, 如果ttl=0则路由器丢弃该IP分组
协议: 8位, IP分组封装的是哪个协议的数据报, 6为TCP, 17为UDP
首部校验和: 16位, 实现对IP分组首部的差错检测
源IP地址,目的IP地址: 各32位, 分别标识发送分组的源主机/路由器和接受分组的目的主机/路由器的IP地址
选项字段: 长度可变, 范围在1-40B之间, 很少被使用, 携带安全,源选路径, 时间戳和路由记录等内容
填充字段: 长度可变, 范围在0-3B之间, 目的是补齐整个首部, 符合32位对齐, 保证首部长度是4字节的倍数

IP分片与重组

网络链路存在MTU(最大传输单元), 链路层数据帧可封装数据的上限, 不同链路的MTU不同
大IP分组向较小MTU链路转发时, 可以被分片, 一个IP分组分为多片IP分组, IP分片到达目的主机后进行重组, 路由器只拆分不重组,避免重组后又需要拆分
IP首部的相关字段用于标识分片以及确定分片的相对顺序, 总长度, 标识, 标志位和片偏移

IP编址和子网

IP分组: 源地址(SA), 目的地址(DA)
接口: 主机/路由器与物理链路的连接, 路由器通常有多个接口, 主机通常只有一个或两个接口(有线以太网和无线的802.11接口)
IPv4版本IP地址32比特, 每8位换算10进制, 标识主机, 路由器的接口
IP地址高位比特作为网络号, 低位比特作为主机号
IP子网: IP地址具有相同网络号的设备接口, 不跨越路由器可以彼此物理联通的接口
IP地址被分为5类, ABCDEF
IP地址
还有特殊地址和私有地址
特殊地址
私有地址

子网划分

子网划分, 区分一个比IP子网更小范围的网络
高比特位网络号, 原网络主机号部分比特作为子网号, 低位比特主机号
子网掩码, 形如IP地址32位, 点分十进制形式, 子网地址+子网掩码确定子网大小, 网络号子网号全取1, 主机号全取0
A网默认子网掩码, 255.0.0.0, b网, 255.255.0.0
借用3比特划分子网的b网子网掩码255.255.224.0
子网掩码的应用, 将IP分组的目的IP地址与子网掩码按位与运算, 得出子网地址

CIDR与路由聚集

无类域间路由(CIDR, Classless Interdomain Routing)
消除传统A类,B类地址界限, 融合子网地址与子网掩码, 方便子网划分, 无类地址格式, a.b.c.d/x, x为前缀长度
例如201.2.3.64, 255.255.255.192 -> 201.2.3.64/26
优点, 提高IPv4地址空间分配效率, 提高路由效率, 将多个子网聚合为一个较大的子网 称为路由聚合, 可简化路由转发表

DHCP协议

主机获取IP两种方式

  • 静态配置
  • 动态主机配置协议(DHCP, Dynamic Host Configuration Protocol)

从服务器动态获取IP地址, 子网掩码, 默认网关, DNS服务器, 即插即用, 允许地址重用, 支持在用地址续租, 支持移动用户加入网络
DHCP工作工程:

  • 主机广播DHCP discover报文
  • DHCP服务器利用DHCP offer报文进行相应
  • 主机请求IP地址, DHCP request报文
  • DHCP服务器分配IP地址, DHCP ack报文

DHCP协议在应用层实现, DHCP服务器内建于路由器中
主机通过广播和DHCP服务器通信, 其他主机也能收到, 但不响应

网络地址转换(NAT)

一个本地网络, 公用一个NAT IP地址, 所有离开本地网络去往Internet的数据报的源IP地址替换为相同的NAT IP地址以及不同的端口号
动机: 只需从ISP申请一个IP地址, 本地网络设备IP地址的变更, 无需通告外界网络, 变更ISP时, 无需修改内部网络设备IP地址, 内部网络设备对外界网络不可见, 安全
实现方法

  • 替换, 利用NAT IP地址和新端口号, 替换每个外出IP数据报的源IP地址, 源端口号
  • 记录, 将每对替换信息存储到NAT转换表中
  • 替换, 根据NAT转换表, 再把进入内网的数据报替换回来

端口号字段16比特, 最多同时支持6w多并行连接
NAT争议, 路由器应该只处理第三层功能, 违背端到端通信原则, 地址短缺问题应该由IPv6解决
NAT穿透方案

  1. 静态配置NAT, 将特定端口请求转发给服务器
  2. 利用UPnP互联网网关设备协议自动配置
  3. 中继服务器, 内部客户与中级服务器建立连接, 外部客户也与中继服务器建立连接

互联网控制报文协议(ICMP)

ICMP, Internet Control Message Protocol
ICMP支持主机/路由器进行差错报告, 网络探询, 所以ICMP报文分两类

  • 差错报告报文(5种): 目的不可达,源抑制,超时,参数问题,重定向
  • 网络探询报文(2组): 回声请求与应答报文, 时间戳请求与应答报文

ICMP报文封装到IP数据报中传输

IPv6

改进了首部格式, 固定长度的40字节基本首部, 可选的扩展首部, 不允许分片, 只能源主机分片
校验和彻底移除, 以减少每跳处理时间
一般形式, 8个16进制, 全是零可压缩成::, FF01:0:0:0:0:0:0:43 -> FF01::43
嵌入IPv4格式, 0:0:0:0:0:FFFF:13.1.68.3::FFFF:13.1.68.3
取消了子网掩码, 采用斜杠的地址前缀, url里需要把ip用中括号扩起来
地址类型分为, 单播, 多播和任意播
v4向v6过渡采用隧道进行兼容, v6数据报作为v4的载荷进行封装, 穿越v4网络

路由算法

路由算法需要确定去往目的网络的最佳路径
网络通常被抽象成图G, G=(N,E)G=(N, E), N是路由器集合, E是链路集合
每段链路都有费用, 可能是1, 或者带宽的倒数, 拥塞程度等, 所以路由算法负责寻找最小费用路径
路由算法分类

  • 静态路由, 手工配置, 路由更新慢, 优先级高
  • 动态路由, 更新快, 及时响应链路费用变化
  • 全局信息, 所有路由器掌握完整网络拓扑和链路费用信息, 例如链路状态路由算法(LS)
  • 分散信息, 路由器只掌握物理相连的邻居以及链路费用, 邻居间信息交换, 运算的迭代过程, 例如距离向量路由算法(DV, Distance Vector)

链路状态路由算法(LS)

Dijkstra算法

  • 所有路由器掌握网络拓扑和链路费用, 通过链路状态广播, 所有结点拥有相同信息
  • 计算从一个结点到达所有其他结点的最短路径
  • 迭代n次后, 得到到达n个目标的结点的最短路径

细节略, 时间复杂度O(n2)O(n^2), 可优化到O(nlogn)O(nlogn), 存在震荡可能

距离向量路由算法

Bellman-Ford方程(动态规划)
每个结点不定时的将自身的DV估计发送给其邻居, 当x接收到邻居的新DV估计时, 依据BF更新其自身的距离向量估计, x到y的距离Dx(y)Dx(y)最终收敛于实际的最小费用
好消息传播快, 坏消息传播慢

层次路由

将任意规模网络抽象为一个图计算路由, 过于理想化, 实际网络规模过大
聚合路由器为一个区域, 称为自治系统AS(autonomous systems)
同一AS内的路由器运行相同的路由协议, 自治系统内部路由协议
网关路由器: 位于AS边缘, 通过链路连接其他AS
AS互连: 由AS内部路由算法与AS间路由算法共同配置转发表

路由协议

  • RIP协议
  • OSPF协议
  • BGP协议

略了

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2017-2023 王丹鹏
  • Powered by Hexo Theme Ayer
  • 冀ICP备15029707号

请我喝杯咖啡吧~

支付宝
微信