网络层

功能
- 路由器的两个功能:
- 路由选择:定期与相邻的路由器交换信息,获取最新的网络拓扑,然后更新路由表,根据路由表确定分组到达目的的最优路线
- 分组转发:根据转发表选择合适的端口将分组转发出去
转发表是根据路由表得出来的,虽然不是一个东西,但是讨论的时候可以互相代替
- 网络层提供两种服务:
- 虚电路:两台计算机通信时先建立网络层连接即虚电路,通信分虚电路建立、数据传输、虚电路释放三阶段。建立时分配虚电路号,之后分组首部只需携带该编号。
- 工作原理:
- 数据传输前,主机 A 发 “呼叫请求” 分组给主机 B,主机 B 同意则发 “呼叫应答” 分组确认。
- 虚电路建立后,主机 A、B 相互传送数据分组。
- 传送结束,主机 A 发 “释放请求” 分组拆除虚电路。
- 特点:
- 建立和拆除有时间开销,对交互式和少量短分组浪费,对长时间频繁数据交换效率高。
- 路由选择在连接建立阶段,之后传输路径确定。
- 提供可靠通信,保证分组正确有序到达,可控制端点流量。
- 网络结点或链路故障会破坏经过的虚电路。
- 分组首部含虚电路号不含目的地址,开销小。
- 工作原理:
- 数据报:
- 分组构成与发送:发送分组前无需建立连接,源主机高层协议将报文拆成小数据段,加上地址等控制信息构成分组,直接发往相连交换结点。
- 交换结点转发:交换结点缓存分组,查找转发表转发。因网络状态时刻不同,不同分组转发路径可能不同。
- 传输过程:网络中其他结点类似转发分组,直至到达目的主机。分组传输时不占用网络其他部分资源,主机可同时双向发送分组。
- 数据报服务特点
- 无连接性:发送分组前无需建立连接,发送方和网络结点可随时收发分组。
- 尽力交付:网络尽最大努力交付,不保证可靠性,分组可能出错、丢失,且不一定按序到达。
- 完整地址:分组包含发送方和接收方完整地址,以便独立传输。
- 存储转发时延:分组在交换结点存储转发需排队,带来时延,网络拥塞时更明显,结点还可能丢弃分组。
- 冗余路径与故障适应:网络有冗余路径,结点或链路故障时,可更新转发表找替代路径,对故障适应能力强。
- 资源利用率高:收发双方不独占链路,资源利用率较高。
- 数据报服务特点
- 虚电路:两台计算机通信时先建立网络层连接即虚电路,通信分虚电路建立、数据传输、虚电路释放三阶段。建立时分配虚电路号,之后分组首部只需携带该编号。
数据报和分组转发越看越像一个东西,数据报是宏观的的服务,分组转发是具体的行为,应该可以这样描述:“数据报服务是通过分组转发技术实现的”。
- SDN软件定义网络:把网络比作城市的交通系统,传统的网络就是按着固定的红绿灯倒计时进行交通控制,SDN就像是有一个掌控全局的幕后大佬控制着每个路口的交通信号灯,根据各个方向车辆的多少来控制各个方向的倒计时
- 拥塞控制:
- 拥塞控制是指对整个网络中的分组进行控制,网络能承载的流量是有限的,网络中的分组太多就会造成阻塞,所以拥塞控制是全局的行为、流量控制是俩主机之间点对点的行为
- 拥塞控制的两种方法:
- 开环控制:是一种静态预防方法,在设计网络时就将拥塞相关因素考虑周全。系统启动运行后中途无需修改,手段包括确定接收新流量、丢弃分组的时机及对象,以及调度策略等,决策时不考虑当前网络状态。
- 闭环控制:事先不考虑拥塞因素,通过监测网络系统来监视拥塞发生位置,然后将拥塞信息传至合适地方,以调整网络系统运行并解决问题,是基于反馈环路概念的动态方法。
IPv4
IPv4分组的格式
- 格式:
- 版本:v4还是v6
- 首部长度:表示首部的长度,最常用的是20B,这时候不使用任何可选字段,最长表示60B
- 区分服务:用于表示这个分组的特殊要求,比如延迟、优先级这种,根据这个字段提供不同的处理
- 总长度:表示这个分组的全部长度,一定不能超过下一层(数据链路层)的MTU(最大传输单元)的长度,以太网帧的最大传送单元(MTU)为1500B
- 标识:用于表示这个分组属于哪个数据报,用于最后重组数据报的时候通过这个字段判断
- 标志:表示这个分组能不能分片,DF=0(Don’t Fragment)表示可以分片,MF=1(More Fragment表示这一片后边还有分片,MF=0表示这一片是最后一个分片
- 片偏移:表示这个分组在数据报中的位置
- 生存时间:分组经过一个路由器生存时间减一,减到零的时候丢弃这个分组,避免这个分组在网络中无限循环
- 协议:表示这个分组应该给上层的哪个协议处理,值为6表示TCP,值为17表示UDP
- 首部检验和:经过一个路由器,都要重新计算首部检验和看这个分组的首部出错了没有
- 源地址:发送这个分组的主机IP
- 目的地址:接受这个分组的主机IP
warning题中经常出现这几个长度之间的加减运算
基本单位长度:
首部4B
总长度1B
片偏移8B
基本单位长度的含义:比如,若首部长度字段的值为 5,那么首部实际长度就是 5×4 = 20 字节。
IPv4与NAT
- 特殊IP的用途:
- 主机号全为0表示本网络,eg:202.98.174.0//前三个部分是网络号
- 主机号全为1表示广播地址
- 127.x.x.x是环回自检地址,意思就是本主机,这个地址永远不会出现到互联网
震惊,原来除了127.0.0.1只要是127开头的都是,我才知道
- 0.0.0.0表示本网络的本主机
GOD!!!,0.0.0.0竟然也可以
- 255.255.255.255表示整个网络的广播地址,但是因为路由器对广播域的隔离作用,实际等效为本网络的广播地址
- 常用的三类IP适用范围:
- A类网络最大可用网络数-2的原因:
- 一个全为零的IP,0.0.0.0
- 一个127开头的地址
- 最大主机数-2的原因:
- 一个主机号全为零表示网络号
- 主机号全为1表示广播地址
- A类网络最大可用网络数-2的原因:
现在这种分类的网络已经被淘汰了(无语了,淘汰了还考屁啊)
- NAT中私有地址的网段:
- 一个A类地址:10.0.0.0~10.255.255.255(我学校的局域网就是这个网段)
- 16个B类地址:172.16.0.0~172.31.255.255
- 256个C类地址:192.168.0.0~192.168.255.255(我家是这个)
- NAT的实现原理:
- 内网的主机以【端口1(eg:3345)】发送web请求
- 路由器接受该请求然后从【端口2(eg:5001)】发送web请求
- 服务器相应80端口的web请求
- 路由器接受【端口2】的数据
- 最后把数据转发到到内网主机的【端口1】
划分子网与路由聚合
- 划分子网的IP地址的结构:
{<网络号>,<子网号>,<主机号>}其实就是把主机号分成两部分再划分网段,方便内部管理
- 子网掩码:和IP地址长度一样,用1表示网络号和子网号,0表示主机号
- A类地址的默认子网掩码:255.0.0.0
- B类地址的默认子网掩码:255.255.0.0
- C类地址的默认子网掩码:255.255.255.0
- ABC分类的地址早都淘汰了,现在是CIDR(我读:赛der(#^.^#))(无分类编址,Classless Inter-Domain Routing)的天下
IP地址的格式:{<网络前缀>,<主机号>}- 可以用子网掩码来表示网络前缀
- 也可以用“x.x.x.x/20”这种方法表示
- 路由聚合也叫构成超网,举例说明这个东西:
网络1和网络2的掩码一样,都是17位,然后聚合之后在R1看来就是两个网络都是16位的掩码,这就是聚合,两网络聚合成一个网络
- 路由器分组转发的方法:使用CIDR之后网络号变得不一样长,所以在转发的时候要越具体越好,选择最长匹配的网络号进行转发
为了减少查询的时间,可以在路由器中按前缀的长短由长到短排序
- 路由器分组转发的方法:使用CIDR之后网络号变得不一样长,所以在转发的时候要越具体越好,选择最长匹配的网络号进行转发
- CIDR的应用:208.115.21.0/24,划分三个部门,各部分的主机数为50、20、5
- 除了要分配对应主机数的IP地址之外还要给每个部门分配一个路由器接口地址,也就是51、21、6个IP
- 总共三个部分,所以要用2个比特位表示3个部门,后边的主机号只要够用就好
- 也就是208.115.21.0000 0000\26
- 208.115.21.0100 0000\26
- 208.115.21.1000 0000\26。
- 除了这样按网络号分配(每个部门都剩下了可多IP)之外,还可以按主机分配(这样可以减少IP的浪费),直接把掩码拉到IP刚好够主机数
网络层转发分组的过程
- 路由表中的两条特殊路由:
- x.x.x.x/32:对于特定的主机专门弄一条路由,子网掩码全是1,这样可以方便管理员控制和测试网络,确保这个流量优先传送
- 0.0.0.0/0:这个是默认路由,路由表最后一个表项,随便一个分组都能与它匹配,这个用于前边没有表项与分组匹配。默认路由通常用于路由器到互联网的路由
- 路由器分组转发的过程:
- 提取出分组目的IP
- 把IP和子网掩码AND运算
- 把结果与表项逐一比较
- 找到之后交付到本网络的主机,或者交付到下一个网络
- 没有匹配的就转发到默认路由,否则报错
warning
第四步中得到目的IP地址之后不能直接转发,还要解封MAC帧,通过ARP协议得到下一跳的MAC地址封装到MAC帧中
IP是全局的,MAC是局部的,每经过一个网络,MAC帧的源地址和目的地址都要更新,IP地址始终不变
地址解析协议ARP
- ARP的工作原理:
- 缓存查询:主机A欲向主机B发送IP数据报时,先在其ARP高速缓存中查找主机B的IP地址。
- 缓存命中处理:若缓存中有主机B的IP地址,则查出对应的硬件地址(MAC地址),将其写入MAC帧,通过局域网将该MAC帧发往此硬件地址。
- 缓存未命中处理:若缓存中无主机B的IP地址,主机A使用目的MAC地址为FF - FF - FF - FF - FF - FF的帧来封装并广播ARP请求分组,使得同一个局域网里的所有主机都能收到此ARP请求。
- 响应发送:主机B收到ARP请求后,向主机A发出ARP响应分组(单播发送),分组中包含主机B的IP地址与MAC地址的映射关系。
- 缓存更新与数据发送:主机A收到ARP响应分组后,将主机B的IP - MAC映射关系写入ARP缓存,然后按查询到的硬件地址发送MAC帧。
如果两个主机不在一个局域网中,A主机把分组发给路由器,让路由器把分组转发到目的网络
动态主机配置协议DHCP
- DHCP的工作流程:
- 客户主机向服务器发送“DHCP发现”消息,想找到网络上的DHCP服务器。源地址:0.0.0.0,目标地址:255.255.255.255
- 服务器收到这个消息,然后发送“DHCP提供”消息,这个消息里边还有提供的IP地址。源地址为服务器IP地址(不是0.0.0.0),目的地址是255.255.255.255
- 客户机收到这个消息,如果接受了这个IP就广播“DHCP请求”消息,请求提供IP。源地址:0.0.0.0,目标地址:255.255.255.255
- 服务器广播“DHCP确认”消息,把第2步发出去的IP分配给这个主机。源地址为服务器IP地址,目的地址是255.255.255.255
第二步表示我提供这个IP,第三步表示我要用这个IP,第四步表示服务器确认
网际控制报文ICMP
- ICMP有两种
- ICMP差错报告报文:五种类型
- 终点不可达报文
- 源点抑制(网络拥塞而丢弃数据报就发送这个报文,现在已经弃用)
- 时间超过:TTL减到0路由器丢弃数据报就发送这个
- 参数问题:数据报首部有字段不正确发送这个
- 改变路由(重定向):发送这个让主机知道下次发给别的路由器,这个路由器有更好的路由路径
- 对下边情况不发送ICMP差错报告报文
- 对于ICMP报文不再发送ICMP差错报文(禁止套娃!!!)
- 对于分片的数据报,除了第一个,后续的所有报片都不发送
- 多播地址不发送
- 特殊地址不发送(127.x.x.x,0.0.0.0这种)
- ICMP询问报文:
- 回送请求和回答报文
- 时间戳请求和回答报文
- 地址掩码请求和回答报文
- 路由器请求和通告报文
啥!啥!啥!这四个都是啥!
- ICMP差错报告报文:五种类型
- ICMP的应用是ping和tracert命令,butping工作在应用层,tracert工作在网络层
IPv6
IPv6格式
- IPv6的数据报首部格式:
- 版本:6
- 通信量类:用来区分不同IPv6的类别或优先级
- 流标号:把从特定源点到特定终点的一系列数据报称作流,这种数据报都有实时性要求 ,应该是为这种流量设的字段,传统的非实时性的流量用不上,可以设置为0
- 有效载荷长度:指明除了基本首部的数据长度(包括扩展首部)
- 下一个首部:这个数据报没有扩展首部时:这个字段指明本数据报装的是什么协议的数据;有扩展首部时:这个字段指明第一个扩展首部的类型
- 跳数限制:最大TTL值为255
因为IPv6有128位,所以虽然基本首部减少到8个字段,但是还是比IPv4长
IPv6地址类型
- IPv6地址类型:
- 单播:点对点通信
- 多播
- 任播:任播的终点是一组计算机,但是数据报只交付其中距离最近的一个主机
- 地址分类:
- 未指明地址:用作未分配IPv6地址的主机作为源地址(DHCP那里也是这,0.0.0.0作为源地址)
- 环回地址:IPv6的环回地址就这一个,不像IPv4一样只要127开头都可以
- 多播地址:前八位都是1
- 本地链路单播地址:IPv6的局域网地址
- 全球单播地址:分成三部分
- IPv6 淘汰了传统 ARP 协议,其地址解析功能由 NDP(基于 ICMPv6) 实现。
- 若 IPv6 地址的接口标识符基于 MAC 地址(如 EUI-64),可直接从地址中提取硬件信息,无需额外解析。
- 对于非 MAC 地址生成的接口标识符(如随机化地址),仍需通过 NDP 的 NS/NA 交互完成地址解析。
IPv4向IPv6过渡的策略
- 双协议栈:在一台主机上同时装有IPv4和IPv6两个协议栈,主机发送的DNS请求返回的是IPv4就用IPv4地址,返回的是IPv6就用IPv6地址
- 隧道技术:这个数据包进入IPv4网络的时候将IPv6的数据包封装到IPv4里边作为数据部分,离开这个网络的时候再解封
路由算法和路由协议
路由算法
- 静态路由与动态路由:
- 静态路由算法:由网络管理员手动配置路由表
- 动态路由算法:根据网络流量负载和拓扑结构动态调整路由表
- 距离向量路由算法:点这里
- 初始状态:每个节点只知道直接邻居的路径费用
- 第一次信息交换:所有节点把自己的路径表广播给邻居,收到邻居的路径表后,更新自己的路径
- 第二次信息交换:
- 只有路径表有变化的节点再次广播新路径表。
- 其他节点检查后,发现没有更优路径,不再更新。
- 算法停止:当所有节点的路径表不再变化时,算法结束,网络进入稳定状态,每个节点都知道全局最优路径。
RIP协议就是这个算法,RIP使用路由器的跳数作为路径费用
- 链路状态路由算法:只执行两项任务
- 主动测试所有相邻节点的状态
- 定期地将链路状态传播给所有其他节点
这应该就是泛洪法这样就可以让每个节点知道全网的结点分布,就可以通过Dijkstra算法得到其他节点的最短路径
典型的链路状态路由算法是OSPF算法
- 内部网关协议(interior gateway protocol ,IGP):自治系统里边使用的协议,RIP、OSPF这种
- 外部网关协议(external gateway Protocol,EGP):自治系统之间使用的协议,目前最多使用的是BGP-4
自治系统是一组路由器集合
RIP
- 路由表跳数那一栏的值为16表示这一栏的目标网络不可达,可以防止数据报在网络中打转
- 封装RIP的协议是UDP(端口520)
RIP是应用层协议!!!,无语,放在网络层讲
- RIP两个特点:
- 好消息传播快:a图中R1到N的距离变成了1,R1更新自己的路由表然后把自己的路由表发给R2,R2也进行更新,完成!
- 坏消息传播慢:那一段距离变成了16,R1更新自己的路由表,但是R2的路由表还没更新,然后R1惊奇的发现通过R2到N距离是5,傻嘚得的更新了自己路由表然后发给了R2,R2也更新自己的路由表到N的跳数为6,R1蒙圈了,又接着更新……直到16
开放最短路径优先(OSPF)协议
- 这个算法虽然使用Dijkstra算法可以得出完整的路径,但是路由表中不会存储完整的路径,只有下一跳地址,分组到达下一跳就知道接着该往哪里去了
- OSPF是网络层协议,不使用UDP、TCP,直接用IP数据报发送
- 工作流程
边界网关协议BGP
- BGP的工作流程:
- 每个AS里边选择一个路由器作为边界路由器
- 发言人之间建立TCP连接
- 在TCP连接的基础上再建立BGP会话,完成初始化(关键报文有OPEN报文和KEEPALIVE报文)
- 然后交换路由信息(通过UPDATE报文交换路由信息)
- BGP发言人还要运行内部网关协议,确保AS数据报能在本AS里边正确转发
- BGP在刚运行的时候与邻站交换整个路由表,但是之后就交换有更新的路由部分
IP多播
- 多播时源主机只发了一份数据,在传输路径分叉时,在分叉口进行复制,然后再分发数据
IP多播地址
- IP多播地址就是IPv4的D类地址,前四位是1110,每一个D类IP标志一个多播组,一台主机可以随时加入离开一个多播组(其实这都不用说,看直播的时候都知道能随便进去退出)
- 多播数据报的目标地址是D类地址,而且协议字段为2,表明是IGMP
在局域网上进行硬件多播
- 局域网支持硬件多播,所以可以将IP多播地址映射成MAC地址多播,但是D类IP和MAC不是一一对应的关系
D类IP除去前四位1110,还剩28位,MAC除去01:00:5e:0xxx(这个0是2进制那个数的最高位)前25位,还剩23位
解决办法就是:主机收到多播MAC帧后还要检查目标IP地址,只有IP地址属于本机加入的多播组才接受这个数据帧
IGMP与多播路由选择协议
- IGMP的工作流程:
- 第一阶段:主机加入多播组,向多播路由器发送IGMP报文声明,本地多播路由器收到之后通过多播路由选择协议将组成员关系转发给其他的多播路由器
- 第二阶段:路由器定期询问局域网内的主机还在不在这个多播组里边,在的话就接着工作,不在的话就不在向这个主机发送消息
麻蛋,呜啦的啥啊,不说人话
- 多播路由选择协议:找出以源主机为根节点的多播转发树,确保每个分组在只转发一次,总的来说:不同多播组对应不同多播转发树,同一多播组对不同源点也有不同多播转发树。
移动IP
- 维基解释
- 我自己的理解:移动IP是移动设备在不同网络切换的时候不会产生明显的割裂感的技术
在不同网络切换的时候IP不变,举个例子:- 我在家正在和小明发消息
- 我妈喊我出去一下,但是我不能停(移动节点)
- 我出去的时候,数据报仍然发送到我家里边(本地代理,归属地址,归属代理)
- 然后由我家里边的路由器发送给另一个网络的路由器(通过隧道封装)
- 另一个路由器再发送给我(外部代理)
网络层设备
- 冲突域和广播域:
- 冲突域是广播域的一部分
- 冲突域在物理层,广播域在数据链路层
形象理解:
广播域是一个村,村长用大喇叭一喊交电费了!!,村里人都能听见,外村人不理会
每几个村户是冲突域,我和我邻居都想通过家门口的十字路口开车出去,但是只能一个一个出去
- 标题: 网络层
- 作者: lele
- 创建于 : 2025-01-25 13:13:00
- 更新于 : 2025-02-22 18:28:22
- 链接: https://letongzhuo.cn/posts/20250125131300.html
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。