网络层概述
解决的问题:主机间通信 每个主机和路由器都运行网络层服务
网络层服务模型
无连接服务 数据报网络 连接服务 虚电路网络
虚电路网络
虚电路(VC):Virtual circuits
虚电路组成 从源主机到目的主机的一条路径 虚电路号(VCID),路径中每一段链路一个编号,同一条VC,每段链路的VCID通常不同 路径中每个网络层设备,利用转发表记录经过的每条虚电路 虚电路如何工作 通过虚电路信令协议建立、维护、拆除虚电路 虚电路中传输的分组,携带虚电路的VCID,而不是目的地址 网络设备转发表维护了虚电路信息(体现在转发表中),可以将分组沿固定的虚电路路径交付
数据报网络
数据报网络工作模式 无连接 每个分组携带目的地址 路由器根据分组的目的地址根据转发表转发分组,每个分组独立选路 转发表 通过路由协议/算法维护转发表 最长前缀匹配有限
数据报网络 VS 虚电路网络
数据报网络
弹性服务,没有任何承诺 智能,自适应(流量分配等),可以自我管理(路由更新) 简化网络,复杂边缘 Internet目前使用数据报网络
VC网络
严格的时间、可靠性保障 简化边缘,复杂网络
网络层核心功能
宏观
转发 将分组从输入端口转发到合适的输出端口 路由 局部:确定每一次转发合适的输出端口 全局:去定分组从源主机到目的主机的路径
具体
路由协议 路径选择 协议:RIP、OSPF、BGP IP协议 寻址规约 数据报(分组)格式 分组处理规约 ICMP协议 差错报告
IP协议
数据报格式

固定部分 4byte(32位) x 5(行) = 20 byte 首部长度 以4字节为单位 说明了填充的必要性 总长度 16位最大表示65535byte IP首部固定20byte,所以IP分组最大可携带的数据部分大小为 65535-20 = 65515byte 标识+标识位+片便宜 IP分片用,专门开一小节说 TTL 生存时间,IP分组在网络中可以通过的路由器数(跳步数) 路由器转发一次分组,TTL减1 如果TTL=0,路由器丢弃该分组
IP分片
分片必要性
网络链路MTU:最大传输单元,链路层数据帧可封装的数据上限 不同链路的MTU不同 大IP分组向小MTU链路转发时,需要分片
标识+标志位+片偏移
标识 标识一个IP分组 IP协议利用计数器产生,每产生IP分组该计数器+1,作为该IP分组的标识 标志位 3位:保留:DF:MF DF是否允许分片,DF=1禁止分片,DF=0允许分片 MF是否时最后一片,MF=0最后一片,MF=1非最后一片 片偏移 一个IP分组分片封装原IP分组数据的相对偏移量 片偏移以8字节为单位 组装IP分片时用
分片过程
分片标识使用原IP分组标识 除最后一个分片,其它分片均为MTU允许的最大分片 最后一个分片的MF=0,标志最后一个分片
IP编址
IP地址概述
IP地址占32位,4组8位,用点分十进制表示,0.0.0.0表示00000000 00000000 00000000 00000000
IP地址与每个接口关联
路由器有多个接口,每个接口的IP地址是不同的
IP地址分配
Ip地址如果随意分配,则会增加路由复杂度,按照一定策略层次性分配可以降低路由的复杂度
将高比特为定义为网络号,低比特为定义为主机号,这样一个IP地址就可以表示为网络号:主机号
如果用IP网络号就可以代表全部网络号相同的IP地址,可以降低路由复杂度,出于这样的思路就有了子网的概念
IP子网
不跨越路由器(第三及以上层网络设备)可以彼此无力联通的接口
IP地址具有相同的网络号
这样分配ip地址时有了一个规则,不跨越路由器联通的接口,要分配相同的网络号
有类IP地址

将所有IP地址,根据网络号和主机号所占位数不同,分成不同类别的IP地址,这样可以通过一个IP地址就可以知道子网规模 网络号位长度决定支持的的子网数,主机号位长度决定了单个子网的主机数
特殊IP地址
特殊IP地址有特殊用处,不可以分配给具体接口 如127.0.0.1,用于本地软件环回测试,称为环回地址 其它不列举
私有IP地址
私有IP地址只能用于内部网络,在公共互联网上无效,地址为私有IP地址的分组会被路由器丢弃 在不同的内网上是可以被重用的,在一定程度上解决了IP地址不够用的问题 A类 10,1个子网 B类 172.16 to 172.31,16个子网 C类 192.168.0 to 192.168.255,256个子网
子网划分
什么叫子网划分 将子网划分为多个更小的子网 更小的子网之间通过路由器联通 为什么需要子网划分 有类IP地址不灵活,会出现IP浪费的情况,比如一个公司分配一个B类网络,会有大量的IP浪费,如果为100家公司分配一个B类网络,然后在这个B类网络上,再划分成100个子网,也可以满足需求,并且减少99个B类网络分配 按照子网的定义,现实中一个大型网络(如B类网络或者C类网络)中所有设备不经过路由器物理联通是不现实的 如何划分 借用部分主机号的高位,作为子网号 如何识别子网划分 是否划分了子网?利用多少位划分子网? 子网掩码 子网掩码 网络号+子网号全部置为1,主机号全部置为0 A类网络(高8为网络号,低24为主机号)默认子网掩码(不进行子网划分) 255.0.0.0 子网掩码如何工作 路由器转发表除了要存储子网地址,还要存储该子网对应的子网掩码 将目的IP地址和子网掩码进行按位与运算(网络号+子网号被保留,主机号全部置为0),得到的子网地址如果和对应存储的子网地址匹配,说明要路由到该子网
CIDR路由聚集
CIDR
Classless InterDomain Routing 用a.b.c.d/x,x表示前缀长度来表达子网 消除传统的有类IP地址的地址界限,即a.b.c.d不按照有类IP地址的规则分类了 融合了子网地址和子网掩码,前缀长度可以决定子网掩码,/24表示子网掩码为255.255.255.0
CIDR的意义
提高IPV4的地址空间分配效率,可以根据实际主机数量,分配合适大小的子网,避免IP地址浪费(子网划分在一定程度上也能解决这个问题,但是CIDR显然更加灵活) 提高路由效率 路由聚合,简化路由复杂度
NAT网络地址转换
解决如何使用私有IP地址,与外界通信的问题 私有IP地址在公共网络不可用 内部网络的私有IP地址主机如何与互联网其它主机通信 NAT工作机制 NAT路由器维护转换表,维护私有IP地址+端口号到NAT路由器IP地址+端口号的映射关系 私有地址IP主机向外部发送分组时,经过NAT路由器,将分组的原IP地址和端口替换为NAT路由器IP地址+NAT路由器端口号,NAT路由器维护映射关系 外部分组发送到NAT路由器的分组,NAT通过映射关系,找到私有IP地址+端口号,将分组转发到对应主机 NAT主要争议 NAT由于需要替换端口号,所以需要具备网络层以上的功能,这和路由器应该只处理网络层功能冲突 NAT实际解决的是IP地址短缺的问题,应该由IPv6来解决
DHCP协议
Dynamic Host Configuration Protocol 动态主机配置协议
解决主机如何动态获取网络配置的问题
网络配置包括IP地址、子网掩码、默认网关、DNS服务器名称和IP地址 DHCP在应用层实现,使用UDP+IP+链路层广播
动态获取过程
DHCP client发起DHCP discover报文 DHCP发现报文 源IP地址:0.0.0.0(表示本机),端口号:68(DHCP协议客户端端口) 目的IP地址:255.255.255.255,受限广播地址,端口号:67(DHCP协议服务端端口号) DHCP server发送DHCP offer报文 源IP地址:server ip地址 目的IP地址:255.255.255.255,因为client目前还没有IP地址 提供欲分配的IP地址,client还不能使用 DHCP client向DHCP server发送DCHP request 报文 源IP地址:0.0.0.0(client还没有确认的IP地址) 目的IP地址:255.255.255.255,仍然使用广播IP地址,是为了通知可能存在的其它DHCP server,已经有DHCP server向我分配IP地址,让其它DHCP server回收资源 DHCP server发送DHCP ACK报文 目的IP地址:255.255.255.255 同时包含子网掩码、默认网关、DNS服务器信息
ICMP 互联网控制报文协议
ICMP: Internet Control Message Protocol
主要功能
差错报告报文
差错报告 网络探寻 目的不可达
网络 主机 端口不可达 源抑制
速率控制,当前未应用 超时/超期
TTL超时 参数问题
重定向
网络探寻报文(2组)
回声请求与应答报文 ping 时间戳请求与应答报文
ICMP报文格式

ICMP内容封装在IP数据报中进行传输
ICMP差错报文内容

强调这里说的是差错报文
包含出差错的IP数据报的完整的IP首部
另外:传输层协议的前8个字节内容
对于UDP来说 8个字节包含完整的UDP头 对于TCP来说 8个字节包含关键的源端口号 目的端口号信息(这样看来每种协议协议内容的顺序也是有意义的)
类型、代码唯一确认报文类型

0,0 8,0:ping 3,3:目的端口不可达 11,0:TTL超期
ICMP应用
Traceroute
源主机目的主机发送一系列的UDP数据报
TTL=1,TTL=2。。。 目的端口号为不可能使用的端口号 当数据报未到达目的主机之前
路由器一次丢弃数据报 向源主机发送ICMP差错报文:TTL超期(11,0) ICMP差错报文携带路由器名称和IP信息 当数据报到达目的主机时
由于端口不可用,返回ICMP差错报文:目的端口号不可用(3,3)
IPv6
动机
主要动机 32位IPv4地址分配殆尽 其它动机 IP数据报的快速处理和快速转发 支持qos(支持区分服务质量)
IPv6数据报个格式

首部长度固定40字节 没有IPv4的选项字段 提供扩展首部支持 扩展首部和数据部分都属于载荷 流标签 从一个特定主机到特定目的主机的一些列数据报具有相同的流标签 IPv6支持根据不同的流标签提供不同质量的服务 下一个首部 首部的下一个首部指向第一个扩展首部 每个扩展首部中也包含下一个首部字段,指向下一个扩展首部 最后一个扩展首部的下一个首部,指向上一层协议的首部(如UDP,TCP) 不支持IP数据报分片 如果需要分片由源主机来分配 目的减少对IP数据报的处理,增加处理和转发速度 彻底移除校验和 不再进行校验和计算校验和 提升效率
IPv6地址表示形式
128位分为8个16位,每个16位用16进制数表示,用:连接 如 1:0:0:0:0:0:0:1 多个0可以用 :: 表示,用以压缩 如1:0:0:0:0:0:0:1 可以压缩为 1::1 ::压缩只能使用一次,使用两次的话无法判断压缩了多少个0 兼容IPv4的ip地址 固定前缀 0:0:0:0:0:FFFF:,拼接IPv4地址,用以兼容IPv4地址 IPv4地址a.b.c.d,IPv6的地址形式为0:0:0:0:0:FFFF:a.b.c.d,16*6 + 32(IPv4地址长度) = 128 IPv6不再使用子网掩码的概念 统一使用 +前缀,来表示一个子网大小 例如 1:0:0:0:0:0:0:1/36 URLS,为了避免歧义,URL中的IPv6地址用[]括起来 http://[1:0:0:0:0:0:0:1]:8080 IPv6过度 隧道:IPv6数据报经过IPv4网络时,将IPv6数据报封装到IPv4数据报中,IPv6数据报整体作为IPv4数据报的数据部分
路由算法
路由算法分类
静态路由VS动态路由
静态路由 手工配置 更新慢,需要人工更新 优先级高,优先使用静态路由信息 动态路由 路由更新快 自治,能够及时响应链路费用或网络拓扑变化
全局信息VS分散信息
全局信息 路由器需要掌握整个网络拓扑信息,才能够计算出路由信息 链路状态(LS)路由算法 分散信息 路由器只掌握邻居以及邻居的路由信息,用以计算自己的路由信息 路由信息变化以后,会通知邻居,更新路由信息 距离向量(DV)路由算法
链路状态(LS)路由算法
Link-State 全局信息 Dijkstra算法
距离向量(DV)路由算法
Distance Vector 动态规划 当一个路由器知道它所有邻居到某个目的主机的距离也知道自己到邻居的距离时,这里的距离指的是费用,他就知道到目的主机最近的距离
层次路由
网络规模问题决定了,对网络整体计算路由信息不可行 分层,这个用了太多次了,自治系统+自治系统间 自治系统(AS)内路由 autonomous systems 聚合路由器为一个区域 自治系统内部使用相同的路由算法(协议) 自治系统间路由 网关路由器,每个AS边缘的路由器,可能有多个 通过链路连接其它AS网关路由器 AS网关路由器通过与其它AS网关路由器交换信息,得到可达性信息 AS网关路由器向AS内路由器传播可达性信息 如果某个AS内部路由器学习到多个网关路由器可达某个AS,会选择哪个网关路由器呢?热土豆原则,谁距离近选谁,谁距离近可以用AS内路由算法计算出来的
路由协议
AS内部路由协议
也称为 IGP(interior gateway protocols),内部网络协议
路由信息协议,RIP(Routing Information Protocol) 距离向量路由算法 开放最短路径优先协议,OSPF(Open Shortest Path First) 链路状态路由算法 支持OSPF报文认证,安全性更高 允许使用多条费用相同的路径(RIP只能选一条) 支持设置链路费用 支持AS内部再分层 总的来说OSPF牛逼很多
AS间路由协议
边界网关协议BGP
Border Gateway Protocol 事实上的标准域间路由协议 BGP为每个AS提供了一种手段 eBGP 从邻居AS获取子网可达性信息,包含路径信息和下一跳信息 iBGP 向所有AS内部路由器传播可达性信息 基于可达性信息与策略,确定到其它网络的距离最近的路径 BGP路由选择,策略优先 策略更多的是跟路由本身无关的外部因素,如公司利益、国家政策等 策略是路由选择最高优先级因素 也就是说BGP提供了定制化的能力,可以配置使用或者不使用哪些路由路径,提供了对外部因素决定路由的支持 这自治系统内部路由就完全不需要考虑外部因素 这也是为什么单独设计AS间路由协议的一个原因
为什么采用不同的AS内和AS间路由协议
自治系统间侧重策略 RIP、OSPF是纯粹的,无法满足定制化需求 自治系统内侧重性能
总结
IP协议
IP数据报如何处理 IP源地址、目的地址 分片(标识,标志位,偏移量) TTL:IP数据报过期时间 IP子网 子网划分(子网掩码) CIDR(路由聚集) 简化路由复杂度 NAT 支持内部网络使用私有IP地址 解决IPv4 IP地址资源分配殆尽的问题 NAT路由器维护NAT路由器IP地址+端口号和私有IP地址+端口号转发表
ICMP协议
差错报告 配合IP协议使用 Traceroute
DHCP
如何动态获取一个IP地址,包括子网掩码、网关路由器地址、DNS域名解析服务器地址
IPv6
解决IPv4 IP地址资源分配殆尽的问题 首部长度固定40字节,移除首部选项字段,使用扩展首部 移除校验和 不支持分片
路由
路由算法 静态、动态 链路状态LS(全局)、距离向量DV(邻居) 路由策略 分层路由 AS内路由、AS间路由 路由协议 RIP OSPF BGP
网络层完结~撒花
文章转载自JAVA咸鱼日记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




