04.*网络层、IP(三层)
网络层又叫IP层:
主要的解决问题:
- 数据包的转发,
IP to IP
- 路由选择
- IP地址的分配
- 分片和重组
IP地址:
分类:

CIDR
(Classless
Inter-Domain Routing):
- CIDR是一种更灵活的网络划分方法,它将IP地址和子网掩码写在一起。将IP
地址被划分为两部分:
网络号
+主机号
- CIDR 表示形式 a.b.c.d/x
- 其中 /x 表示前 x 位属于网络号,x 属于[0, 32] e.g. 10.100.122.2/24, 表示前24位是网络号,后8位是主机号,子网掩码为/24
子网掩码:
- 掩码的意思就是掩盖掉主机号,剩余的就是网络号
- 将子网掩码和IP地址
按位计算AND
,就可得到网络号 - CIDR中 /24,即子网掩码255.255.255.0
- 作用:路由器通过计算目标地址网络号,与路由表比较
IP层协议:
协议解析:
*
版本
:IPv4、IPv6 *
服务类型(ToS):包的优先级 *
标识
:当分片发生时,用于分片重组 *
标志(Flags)
: *
第二个bit位:DF
,为1表示路由器不能对该上层数据包分段。(如果不分段无法转发,则路由器会丢弃该上层数据包并返回一个错误信息)
*
第三个bit位:MF
,DF为1时有效,对上层数据包做分段时,最后一个值为0,其他为1
*
经验:一般UDP由IP层分片,TCP自己根据MSS自行分段,不需要IP层分片
*
片偏移:当IP层做了分片后,接收端根据该字段将IP分片重组,但分片数据可能丢失,导致无法重组</font> *
生命周期(TTL): * 每一跳减1,为0时丢弃 *
协议: * 1 ICMP * 2 IGMP * 6 TCP * 17 UDP * 88 IGRP * 89 OSPF #### MTU(第三层中的概念): * 含义:Maximum Transmission Unit,
最大传输单元,定义了这些数据包在
网络层传输的最大大小 * 标准MTU值为
576(因特网),最大值为
1500`(以太网)
* 超过 MTU 大小、且设置了DF时,会发生数据分片,
TCP 协议:
- 见传输层
UDP 协议:
- 见传输层
ICMP 协议:
即 Internet Control Message Protocol,互联网控制报文协议
查询报文类型:
- 8:主动查询
- 0:主动查询回显
差错报文类型:
- 3:终点不可达(地址不可达)
- 4:源抑制(让源站放慢发送速度)
- 5:重定向(让下次发给另一个路由器)
- 11:超时(也就是超过网络包的生存时间还是没到)
具体应用:
ping
:主动发送查询报文,获得查询回显报文traceroute
:发送udp数据包,做网络探测:- 探测沿途的路由(超时类型):
- 使用特殊的TTL,将TTL逐个累增,逐个获取链路上的路由器 IP
- 探测目的主机(不可达类型):
- 使用不可能UDP端口号,收到端口不可达回应,则表示成功到达目的主机
- 确定整条路径的MTU(分片错误类型):
- 故意设置为不分片,每次收到该差错报文,则调小MTU,直到到达目的主机
- 探测沿途的路由(超时类型):
三层设备:网关(gateway)设备
网关设备作用:负责不同网络之间的通信,
三层转发的设备
主机访问另一个IP的过程:
- 判断是否同一个网段,基于
CIDR
和子网掩码
,计算出目标IP网络号,和自己网络号做对比 - 如果同网段:
- 先封装目标IP头,再基于MAC地址表或者根据ARP协议获取
目标IP的MAC地址
封装MAC头,直接发送到目标机器
- 先封装目标IP头,再基于MAC地址表或者根据ARP协议获取
- 非同网段:
- 先封装目标IP头,基于MAC地址表或者ARP协议
获取网关MAC地址
,再封装网关MAC
,将数据先发给网关
- 网关收到包后,解开MAC头发现是自己的,再解开IP头,发现不是自己的,继续通过路由表找到下一个网关的IP地址。
- 转发规则见下面
- 先封装目标IP头,基于MAC地址表或者ARP协议
- 例子:
- 主机 A 发送 源地址是
10.1.1.30
和目标地址是10.1.2.10
的IP包。由于没有在主机 A 的路由表找到与目标地址10.1.2.10
的网络地址,于是包被转发到默认路由(路由器1
) - 路由器
1
收到 IP 包后,尝试在自己的路由表匹配与目标地址相同的网络号,发现匹配到了,于是就把 IP 数据包转发到下一跳地址10.1.0.2
这台路由器2
- 路由器
2
收到IP包,对比自身的路由表,发现匹配到,将IP包转发到下一跳10.1.2.1
,最终通过交换机(通过ARP协议)把 IP 数据包转发到了目标主机 - 如果主机/路由器中没有匹配到目标IP的网络号,则会转给默认路由/网关
- 主机 A 发送 源地址是
- 判断是否同一个网段,基于
网关转发/路由转发:
- 基于路由表:多条规则的集合
- 路由(转发)的三要素:
目的网络
:这个包想去哪儿出口设备
:将包从哪个口扔出去下一跳网关
:下一个路由器(网关)的地址 #### 路由表分类:
- 静态路由:
- 在网关上,配置一条一条规则,基于规则判断下一跳是哪里
- 动态路由:
动态路由器
根据路由协议算法
生成动态路由表
:路由协议算法
(计算路由的方式):距离矢量路由算法
(基于 Bellman-Ford 算法)- 具体实现:每个路由器都保存一个全局路由表
- 问题:
- 同步成本高:更新时需要发送整个路由表信息
- 更新不及时:路由器故障,只能被动发现
链路状态路由算法
(基于 Dijkstra 算法)- 具体实现:当自己链路状态发生变化,将自己和邻居之间的链路状态包广播给其他路由器,每个路由器在自己本地构建一个完整的图,然后针对这个图使用 Dijkstra 算法,找到两点之间的最短路径。
- 优点:
- 同步成本低:只广播改变的链路状态,广播量小
- 更新及时:任意路由出现故障,会引起相邻路由的多个广播。 #### 动态路由协议:
- 用于实现路由信息交换和更新的协议 #####
OSPF/IGP
: - 即
Open Shortest Path First
,开放式最短路径优先 - 基于
链路状态路由算法
实现 - 基于
IP
协议同步路由信息 - 应用:广泛应用在数据中心内部(即内网),所以又叫内部网关协议(Interior
Gateway Protocol,即
IGP
)
BGP
:
- 即
Border Gateway Protocol
,外部网关协议 - 基于
距离矢量路由算法
实现 - 基于
TCP
协议同步信息 - 应用:用于
数据中心
跟外部其他边界路由器
之间的路由 - BGP 又分为两类:
eBGP
:- 自治系统间,边界路由器之间使用 eBGP 广播路由
iBGP
:- 内部网络也需要访问其他的自治系统。边界路由器通过运行 iBGP,使得内部的路由器能够找到到达外网目的地的最好的边界路由器。
网关系统相关设备:
核心路由器/骨干路由器
:- 待补充
边界路由器
:- 待补充
AS 自制系统
:- Stub AS:对外只有一个连接。这类 AS 不会传输其他 AS
的包。例如
个人或者小公司的网络
- Multihomed AS:可能有多个连接连到其他的 AS,但是大多拒绝帮其他的 AS
传输包。例如一些
大公司的网络
- Transit AS:有多个连接连到其他的 AS,并且可以帮助其他的 AS
传输包。例如
主干网
- Stub AS:对外只有一个连接。这类 AS 不会传输其他 AS
的包。例如
- NAT路由器:
- NAT:网络地址转换
- 两个客户端192.168.1.10:1025 和 192.168.1.11:1025 同时与服务器 183.232.231.172 进行通信
本文作者:navyum
本文链接:https://www.cnblogs.com/navyum/p/18509333
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)