应用层 产生报文,传输层分段为报文段,网络层加首部为IP数据报(又称分组), 首部中有源IP地址,目的IP地址等,实现了主机到主机的传输
网络层功能
分为:
- 异构网络互联 不同网络拓扑结构不同,物理层,链路层实现不同,主机类型不同,路由(Router)器将不同网络互联
- 路由与转发
- 不同路由器相互配合,规划IP数据报(分组)的最佳转发路径,运行路由协议,最终生成各自的路由表
- 一台路由器,根据转发表将IP数据报从合适的接口转发出去
- 拥塞控制
- 原因:过量分组,超负荷,网络性能下降
- 分组增加,吞吐量却下降(拥塞)
- 开环控制:预设方法,一旦运行不再修改
- 闭环控制:动态监视,拥塞调整(ICMP)
虚电路
IP分组
IP协议是互联网的核心,承载传输层协议TCP,UDP等等
IP数据报的格式
分为首部和数据部分,其中首部分为固定部分(20B)和可变部分(0-40B),可变部分基本不考察,所以首部是20B
数据报格式:
其中,初始4bit用于区分网络层使用的IP协议版本,接着4bit首部长度(必须是4的整数倍),8bit区分服务,16bit数据报总长度
虽然理论上数据报长度范围很广,实际上由于其作为MAC帧中的数据部分,受到链路层的最短最长帧长限制(以太网中为 46~1500),一个链路层能承载的最大数据量称为 最大传送单元(MTU)
如果太长,则需要分片
- 分片就是将长的数据报拆成短的数据报
- 拆分发送要求每个分片小于MTU,拆分之后可以走不同的路由,发送快
- ==但是走不同的路由就难以区分分片的先后顺序,所以需要在首部中标记片偏移,其以 8B 为单位,所以除了最后一个分片外,其余分片数据部分必须是8B的整数倍==
关于分片:
- 标识字段,16bit,是源主机生成的自增序列,如果数据报源地址相同,标识相同,则属于一个数据报的分片
- 标注字段,3bit,MF(More Fragment),DF(Don’t Fragment),MF(1说明还有分片,0说明最后一个分片)DF(1不允许分片,0表示允许分片)
- 片偏移,13bit,被分片之间所处的位置
其他:
- TTL 生存时间 8bit IP数据报在网络中可通过的路由器最大值(每次过一个路由器就减一),如果减到0,就丢弃,发送ICMP报文
- 协议 8bit 如果是TCP 设置为6,如果是UDP设置为17
- 首部校验和 16bit 校验首部,该字段设为0,不用校验,校验和计算方法与UDP相同,但是不用加伪首部 ,也不考虑数据部分
- 源地址 32bit
- 目的地址 32bit
IP地址
IP地址分类
- 单播地址
- A类(1~126)
- 网络号8bit,主机号24bit
- B类(128~191)
- 网络号16bit,主机号16bit
- C类(192~223)
- 网络号24bit,主机号8bit
- A类(1~126)
- 多播地址
- D类(224~239)
- 今后使用(实验)
- E类(240~255)
路由器和路由器连接的接口可以不分配IP地址,其余接口必须分配IP地址
默认网关:其实就是默认路由器,配置一个往外发送IP数据报的默认路由器接口
转发表:目的网络号,转发接口
一些特殊的IP地址
- 主机号全0,网络本身,不可用于做IP地址,只能用于路由表,转发表等
- 主机号全1,可以做目的地址,向目的地址广播
- 网络号 0, 主机号Y,可以做分组源地址,作为本网络主机号为Y的主机
- 网络号0,主机号0,可做源地址,本网络上的主机(在DHCP协议中作为分配的服务器)
- 网络1,主机1,广播分组
- 网络号127,主机号非全0,或非全1 ,可做源地址,目的地址,做为环回自检地址,表示一台主机本身,用于本地软件环回检测
子网划分和子网掩码
子网划分旨在提高网络利用率,将IP地址划分为三级结构:网络号,子网号,主机号
但是这样一来需要分辨IP地址属于哪个子网,引入子网掩码,与IP地址相与得到网络号和主机号,网路号与目的地址对比,如果网络号一致,则发给对方
默认路由(0, 0, 0, 0),因为都是0,子网掩码也是全0,相与之后都是0,保证了有匹配
发送IP数据报的过程:
- 判断目的主机与本机是否属于同一个网络
- 检查本机IP地址和目的IP地址网络前缀是否相同
- 若相同,说明同属于一个网络,否则不同
- 将IP数据报封装成MAC帧发送到链路上
- 同一网络,就ARP找到目的主机的MAC地址然后发送
- 否则就ARP找到默认网关的MAC协议,在将IP数据报封装成帧,发给默认网关
路由器转发IP数据报过程:
- 接口收到IP数据报
- 首部校验,找到目的IP
- 查转发表,包含目的网路号,子网掩码,转发接口
- 检查目的IP与每项是否匹配,将目的IP地址、子网掩码相与,匹配目的网络号
- 至少默认路由能匹配成功
- 转发,根据查表转发结果,将IP数据报从匹配的接口转发出去
CIDR 无分类编制
为什么提出? 当时IP地址的利用率太低,提出一种的新的划分方法
其分为
-
定长子网划分 指的是子网的大小一致,实际划分方法和子网掩码方法基本一致
-
变长子网划分 给一个网络IP,其中网络号固定,主机号随意,子网号长度不固定,按需求划分,记得 全0和全1不能划分
使用类似从根到叶构建二叉哈夫曼树的技巧划分子网,每个叶子节点是一个子网(按 0 1 划分,画出n个子节点 ,划分了几位就说明了每个子网有几位子网号
如图,最小子网是最下的节点,一共用了4bit,所以网络号剩下 12-4=8 bit
路由聚合
路由中可能存在多个目的网络经过一个转发接口,且网络之间存在相同的前缀的情况,可以将这种路由聚合成一项,这就是路由聚合,也称为构成超网
- 查询更快
- 路由表变小
- 但是可能引入无效地址
- 使得目的IP与多个表项匹配 采用最长前缀匹配原则 匹配最长的子网号
帧发送全流程
- 给出源地址和目的地址
- 看目的地址是否与自己是一个网络(子网掩码与地址相与,查看高位是否相同)
- 不同就发给默认网关(通过ARP找到目的接口的MAC地址)
- 一直到路由器,路由器查表,遵循最长匹配原则,发送数据报
- 再到目的地址
NAT
端口号:传输层概念,只有IP地址无法精确到某一个特定的进程,所以引入端口号(每台主机相互独立),得到一个 IP+端口号 的组合,这标志了某个特定进程
NAT就是实现让同一个局域网下的多台主机共用唯一一个IP地址(称为外网IP,公网IP),具体一点就是利用端口号+IP地址来对应到某个特定进程
引入私有IP地址概念:
可以复用,局域网内唯一
使用NAT需要使用支持NAT技术的路由器,将局域网内的IP地址转换为公网IP(用NAT表维护信息)
Note
发送时会TCP等会发送端口号,怎么知道对方的端口号?
按理说是通过服务器来查找实现
因为端口号是传输层功能,说明NAT路由器具有传输层功能
ARP
基础概念:
- 作用:局域网内部,通过ARP协议查询到一个IP地址对应的MAC地址
- ARP表(存储在ARP缓存)
- 记录IP地址与MAC地址关系
- 每台主机、路由器都有的数据结构
- 定期更新
- 基本流程
- 发送广播,标记源IP,MAC地址
- 指定查找对象的IP地址
- 封装成帧
- 响应IP地址和MAC地址
- 封装成帧(单播接收)
ARP协议与IP协议同级别,是网络层的协议之一,ARP协议用于查询同一网络中的IP地址与MAC地址之间的映射关系
当知道目的IP地址但不知道其MAC地址时,无法发送MAC帧,需要广播查找IP地址对应的MAC地址
Note
另外还有ICMP协议,IGMP协议
ICMP用于网络层实体之间相互通知异常事件 IGMP协议用于是实现IP组播
ARP分组也会有数据链路层封装成 MAC帧,如果是IP数据报,MAC帧中类型是 0x0800
,如果是ARP协议,那么类型是 0x0806
,目的地址全1
DHCP
其实属于应用层
- 基于UDP
- 给接入网络的主机动态分配IP地址、默认网关,子网掩码
- 客户/服务器模型(C/S)
过程
- 客户 - 服务器(DISCOVER):
- 客户主机发送 携带本机MAC地址的信息,请求分配
- 源地址IP地址为
0.0.0.0
,目的IP地址为255.255.255.255
广播 - 链路层源地址为客户的MAC地址,目的MAC为全1
- 服务器 - 客户(OFFER):
- 给客户分配IP地址、租用期、子网掩码和默认网关
- 源IP为服务器IP,广播IP
- MAC为服务器MAC,目的为客户MAC(单播)
- 客户 - 服务器(REQUEST):
- 确定要使用的IP地址,告知接收的地址
- 源IP全0,到目的IP 全1广播
- 源MAC,客户MAC,目的MAC 全1
- 服务器 - 客户(ACOKNOWLEGE):
- 携带信息与报文2类似
- 源IP为服务器IP,目的IP全1,广播
- 源MAC为服务器MAC,目的MAC为客户MAC(单播
Note
为什么要告知接收的IP地址,且是广播形式
因为一个网络可能不止一台DHCP服务器,如果多台,那么一开始的广播可能被多个服务器回应,此时需要广播告知本机最后接受了哪个IP地址
具体来说,每个DHCP服务器可以分配的是本机IP地址池中所有的IP地址,地址池就是设置为 子网掩码 之后的所有可用 网络IP(需要给自己分配一个)
因为每次都是广播,网络中每台主机都会收到这个广播信号,而在其拆包解析过程中,会发现UDP协议中使用了目的地址是 67,这个端口号是特殊的端口号,无法被网络中主机的某个进程所占用,所以到这一步非服务器的主机会发现不是自己的信号而丢弃这个信号
除了上述的内容外,DHCP服务器发送的报文中还会写明提供地址的租用期
路由算法和协议
路由分为:
- 静态路由(人工配置)和动态路由(通过路由选择协议自动获取)
- 分配动态路由(配置路由转发表)算法有距离-向量路由算法,链路状态路由算法
- 分别对应了两种协议RIP路由协议,和OSPF路由协议 ,用于自治系统内部
- 另外还有 BGP路由协议,用于自治系统外部
RIP 协议
路由信息协议(Routing Inoformation Protocol,RIP) 是内部网关协议(IGP) 中最先得到广泛使用的协议之一
要求自治系统AS内的每一个路由器维护从自己到AS内其他每个网络的距离记录,称为 距离向量
使用跳数作为度量来衡量到达目的网络的距离
- RIP将路由器到直连网络的距离定义为1
- 到非直连网络的距离定义为所经过的路由器数+1
- 仅允许一条路径最多只能包含15个路由器,距离等于16相当于不可达,因此RIP只适用于小型互联网
- 协议规定距离短(经过路由器少)的路由为优先
- 如果有距离相同,可以进行等价负载均衡,通信量均匀分配给多条等价路径上
RIP仅与相邻路由器交换信息,进行周期性交换,交换内容是自己的路由表,当网络拓扑改变时也要交换,称为触发更新
更新算法
- 路由器C的路由表发送给D
- D将表中下一跳都改为C(因为要经过C到达目的地址)
- 距离都加1(同理)
- 查看D本身的路由表,有下列几种情况:
- 有一个表项与C路由表中的表项对比,目的网络相同且下一跳为C,那么要更新,说明这个目的网络的路径更新了
- 对比发现有新的目的网络,加入D的路由表
- 目的网络相同,下一跳不同,C表中距离近,说明路径更优,更新
- 目的网络相同,下一跳不同,距离相同,说明可以等价负载均衡,加入
- 目的网络相同,下一跳不同,C表中距离远,说明路径差,不更新
另外还有:
- 30s 一更新
- 180s 没更新则设置 16 无效
- 再过一段时间还没更新,就删掉
优点
- 实现简单
- 好消息传播快
缺点
-
坏消息传得慢 由于邻居之间传递,且规定周期,如果一个路由表发生改变,那么很慢才可以反映到其他表中,也可能被其他表的信息反过来误导
假设N1故障,R1打算将N1清除路由表,但是其对R2的更新报文先达到R2
如上述一直到更新到16才知道N1是不可达的
“坏消息传播得慢”的问题又被称为路由环路或RIP距离无穷计数问题。这是距离向量算法的一个固有问题。可以采取以下多种措施减少出现该问题的概率或减小该问题带来的危害:
- 限制最大RIP距离为15(16表示不可达)。
- 当路由表发生变化时就立即发送路由更新报文(即“触发更新),而不仅是周期性发送。
- 让路由器记录收到某个特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即”水平分割”)。
使用上述措施仍无法彻底解决问题。因为在距离向量算法中,每个路由器都缺少到目的网络整个路径的完整信息,无法判断所选的路由是否出现了环路。
RIP其实使用了UDP(端口520),这说明其实属于应用层
OSPF协议
开放最短路径优先为了克服路由信息协议RIP缺点所提出
- 基于链路状态
- 采用Dijkstra算法计算路由,保证不会产生环路
- 不限制网路规模,效率高,收敛速度快
链路状态是指:本路由器都和哪些路由器相邻,以及相应链路的代价,代价由管理人员决定
OSPF路由器之间通过交互问候分组来建立和维护邻居关系,问候封装在IP数据报中,发往组播地址224.0.0.5,IP数据报协议号为 89
这说明OSPF协议属于网际层协议,而RIP属于应用层,核心都是网际层
问候分组周期为10s,40s未收到问候回应说明邻居不可达,每个路由器都会建立邻居表
链路状态通告(LSA):
- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
LSA封装在链路状态更新(LSU)中,采用可靠的洪泛法
- 洪泛法是向自己所有的邻居路由器发送链路状态更新分组,收到分组的路由器将分组又转发给自己所有的邻居路由器
- 可靠是指收到链路状态更新分组后要发送确认,收到重复更新分组后无需再次转发(但是要发送确认)
每个路由器都有一个链路状态数据库(LSDB),用于存储链路状态通告LSA,通过个路由器洪泛法发送封装各自链路状态通告的链路状态更新分组LSU,各路由器链路状态数据库LSDB最终达到一致
OSPF计算步骤
BGP
边界网关协议BGP
属于外部网关协议(EGP),是用于自治系统AS之间的路由选择协议
并非寻找最佳路由,而是比较好的路由
使用TCP连接交换路由信息的两个BGP发言人,称为彼此的邻站,或者对等站,发言人之间交换可达信息,也就是要达到某个网络要经过的一系列自治系统,根据所用策略,找到各自治系统的较好的路由,构造出树形,不存在环路的自治系统连通图
其中BGP-4是目前使用最多的版本,规定了四种报文
ICMP报文
- 差错报告
- 终点不可达
- 源点抑制(拥塞而丢弃IP数据报)
- 时间超过(TTL减到0,就给源点发送时间超过报文)
- 参数问题(不正确的数值)
- 改变路由
- 询问报文
- 测试目的站是否可达以及了解有关状态
- 始终同步和测量时间
另外可用于跟踪路由