网络层传输
1.IP协议头格式
IP协议组成部分分析:
1. 4位版本号:
指定IP协议的版本, 对于IPv4来说, 就是4
2. 4位首部长度
IP头部的⻓度是多少个32bit, 也就是 length * 4 的字节数.
4bit表⽰最 ⼤的数字是15, 因此IP头部最⼤⻓度是60字节
3. 8位服务类类型(TOS)
决定了IP协议的工作状态
8位服务类型(Type Of Service): 3位优先权字段(已经弃⽤), 4位TOS字段, 和1位保留字段(必须置为
0). 4位TOS分别表⽰: 最⼩延时, 最⼤吞吐量, 最⾼可靠性, 最⼩成本. 这四者相互冲突, 只能选择⼀个.
对于ssh/telnet这样的应⽤程序, 最⼩延时⽐较重要; 对于ftp这样的程序, 最⼤吞吐量⽐较重要
4. 16位总长度(字节数)
一个IP数据包=报头+载荷 的长度
所以一个IP数据包的最大内存就是 64kb
IP协议中内置的拆包操作 ,假设一个TCP数据报,IP协议就会自动拆分成多个,通过多个IP数据报共同传输一个TCP数据包
5.IP协议中的拆分(在下面的IP分片和组装中有详细的讲解)
16位标志:
拆包:将相同第一个IP数据报拆包的时候,分配相同的标识
组包:将相同标识的数据报组合在一起
3位标识:
一位没有用
一位标识是否发生了拆包操作
一位标识这个包是否是最后一个数据报
13位片偏移:
用于标识数据包所在的位置,靠前偏移量较小,靠后偏移量较大
6. 8位生存时间(TTL)
假设此时我发送了一个IP错误的数据报,此时这个数据报就会一直到达不了目的地,但是也不能一直传输下去,TTL就此引入
TTL:
一个数据报在节点中传输的最大限度,单位是次数,进行一次传输,TTL就进行 -1,当TTL减到0 的时候就表示传输失败,此报就会被丢弃。
TTL的初始值范围是0~225可以是64,也可以是128,下面就是128
问题:如果IP正确,但是没有到达目的地TTL就耗尽了怎么办?
六度空间理论(Six Degrees of Separation) 是一个社会学和网络科学中的经典假说,其核心思想是:世界上任意两个陌生人之间,平均最多通过六个中间人就能建立联系。这一理论揭示了人类社会网络的紧密性和“小世界”特性。
虽然六度空间理论没有实质的帮助我们减少TTL的消耗,但是也告诉我们TTL的消耗没有那么高
7. 8位协议
标识传输层使用哪种协议
分用的时候,IP 协议解析 IP 数据报的时候,拿到载荷,
交给上层处理此处 8 位协议编号,就能起到区分效果(记录上层是TCP协议还是UDP协议)
类似于:
传输层到应用层 =>端口号
网络层到传输层=>8 位协议
数据链路层到网络层 =>也有一个类似的协议编号的
8. 16位首部校验和
载荷部分是TCP或者是UDP数据包,所以载荷部分它们自己会校验
9. IP地址
IP协议中最主要的部分
ip地址的本质是通过32位的整数来表示的
由于 32位整数不方便阅读,通常会把IP写作 点分十进制 来表示
其实就是用三个点将32的bit位分成四部分,每部分8个bit'位,再将每一部分转换成十进制来表示
1.1.IP分片和组装
为什么要进行IP分片?
MTU 限制
当一个|P 数据报的大小超过了网络的 MTU(最大传输单元)限制时,就需。要进行分片。MTU 是数据链路层对IP层数据包进行封装时所能接受的最大数据长度。
分片造成的影响和TCP协议中序号和窗口产生的由来。
网络通信的过程中,如果过多分片,就会导致丢包概率,
如果一个分片丢了,那就要整个原IP报进行重传,大大的降低效率,那么减少分片的源头就是传输层的数据载荷的大小
所以这就是为什么TCP协议中序号和窗口产生的由来,减少数据载荷的大小
一、分片的触发条件 ——MTU 限制
不同的网络链路(比如以太网链路默认 MTU 是 1500 字节 ),能承载的最大数据帧(包含头部)大小不同,这个最大值就是 MTU(Maximum Transmission Unit,最大传输单元) 。当 IP 数据报(包含 IP 头部)的长度超过当前链路的 MTU 时,为了让数据能在该链路传输,路由器就会对 IP 数据报进行分片处理。
二、分片过程与三个字段的作用
所以此时有下面几个问题:
甄别特定报文是否被分片了?
1.更多分片是否是1,1就是分片
2.更多分片是1的报文丢了但是更多分片0,但是片偏移>0,
2.怎么保证自己把分片收全了?
à.相同的标识的分片,聚合在一起!
b.怎么保证你收全了
有下面三种丢失的情况:
1.第一片丢失:边偏移为0
2.中间丢失:把收到的所有的分片,按照片偏移进行升序排序!
片偏移 + 自身报文长度 = 下一个分片的片偏移数字
3.结尾丢失了:没有“更多分片是0的分片”
2.网段划分
IP地址分为两个部分, ⽹络号和主机号
• ⽹络号: 保证相互连接的两个⽹段具有不同的标识;
• 主机号: 同⼀⽹段内, 主机之间具有相同的⽹络号, 但是必须有不同的主机号;
• 不同的⼦⽹其实就是把⽹络号相同的主机放到⼀起.
• 如果在⼦⽹中新增⼀台主机, 则这台主机的⽹络号和这个⼦⽹的⽹络号⼀致, 但是主机号必须不能和 ⼦⽹中的其他主机重复.
• 有⼀种技术叫做DHCP, 能够⾃动的给⼦⽹内新增主机节点分配IP地址, 避免了⼿动管理IP的不便.
• ⼀般的路由器都带有DHCP功能. 因此路由器也可以看做⼀个DHCP服务器
子网划分的本质:
本质就可以淘汰其他网络可以在全网中提高查找目标主机的效率!
2.1.子网划分的方案
介绍两种子网划分的方案:一种是已经淘汰了的(五类划分法),另一种:CIDR
1. 淘汰的网段划分机制:
每一个类网络号号主机号都是固定的
A类 0.0.0.0到 127.255.255.255
B类 128.0.0.0到 191.255.255.255
C类 192.0.0.0到 223.255.255.255
D类 224.0.0.0到 239.255.255.255
E类 240.0.0.0到 247.255.255.255
随着 Internet 的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B 类网络地址,导致 B类地址很快就分配完了,而 A类却浪费了大量地址;
例如,申请了一个B类地址,理论上一个子网内能允许6万5千多个主机.A类地址的子网内的主机数更多.
然而实际网络架设中,不会存在一个子网内有这么多的情况.因此大量的 IP 地址都被浪费掉了
针对这种情况提出了新的划分方案,称为 CIDR(Classless Interdomain Routing)
2.CIDR:和子网掩码搭配使用
引入子网掩码:
用于区分主机号和网络号
子网掩码的特点:不会出现01交替的现象,1都在左边,0都在右边
子网掩码存在的意义就是:将分类划分的ip资源进行充分的利用
例如:
只有后四位是0,其余都是1,
那么前28位都是网络号,后四位是主机号
例子 1:基础子网划分(无进一步子网细分)
已知:
- IP 地址:
140.252.20.68
(二进制:10001100 11111100 00010100 01000100
) - 子网掩码:
255.255.255.0
(二进制:11111111 11111111 11111111 00000000
)
步骤 1:理解子网掩码的作用
子网掩码的二进制中,1
表示对应位参与网络号计算,0
表示对应位属于主机号。
这里掩码 /24
(255.255.255.0)意味着前 24 位是网络位,后 8 位是主机位。
步骤 2:计算网络号(IP 地址与子网掩码按位与)
按位与规则:1 & 1 = 1
,0 & 任意 = 0
IP地址二进制: 10001100 11111100 00010100 01000100
子网掩码二进制: 11111111 11111111 11111111 00000000
按位与结果: 10001100 11111100 00010100 00000000
转换为十进制:140.252.20.0
(即表格中的网络号)
步骤 3:确定子网地址范围
- 网络号是子网的基准地址,主机位全
0
时为网络号本身。 - 主机位全
1
时为子网广播地址(最大地址)。
由于掩码 /24
,主机位是最后 8 位(00000000
~ 11111111
):
- 最小地址(网络号):
140.252.20.0
(主机位全0
) - 最大地址(广播地址):
140.252.20.255
(主机位全1
)
因此,子网地址范围:140.252.20.0 ~ 140.252.20.255
例子 2:进一步子网细分(子网掩码 /28)
已知:
- IP 地址:
140.252.20.68
(二进制:10001100 11111100 00010100 01000100
) - 子网掩码:
255.255.255.240
(二进制:11111111 11111111 11111111 11110000
)
步骤 1:分析子网掩码
掩码 /28
(255.255.255.240)表示前 28 位是网络位,后 4 位是主机位。
步骤 2:计算网络号(IP 地址与子网掩码按位与)
IP地址二进制: 10001100 11111100 00010100 01000100
子网掩码二进制: 11111111 11111111 11111111 11110000
按位与结果: 10001100 11111100 00010100 01000000
转换为十进制:140.252.20.64
(即表格中的网络号)
步骤 3:确定子网地址范围
主机位是最后 4 位(0000
~ 1111
),但需注意:
- 主机位全
0
→ 网络号(140.252.20.64
) - 主机位全
1
→ 广播地址(140.252.20.79
,计算:64 + 15 = 79
)
因此,子网地址范围:140.252.20.64 ~ 140.252.20.79
特殊的IP 地址
1.将 IP 地址中的主机地址全部设为 0,就成为了网络号,代表这个局域网;
2.将 IP 地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;
3.127.*的 IP 地址用于本机环回(loop back)测试,通常是 127.0.0.1
3.地址管理
3.1.IP的数量限制
上面提到32位的ip地址,最多有42亿多个IP地址,这个地址数量是远远不够的,
有三种解决方法
1.动态分配IP地址
有设备使用就分配,休眠状态下就释放IP地址
2.升级为IPV6
由128个bit位构成,ip地址的个数是一个天文数字,但是ipv4和ipv6是不兼容的,这样的话就需要将跟换所有的设备,这个成本是很大的
3.NAT网络地址转换
现在的主力方法
3.2.私有IP地址和共有IP地址
如果一个组织内部组建局域网,P 地址只用于局域网内的通信,而不直接连到Internet 上理论上 使用任意的IP 地址都可以,但是 RFC 1918 规定了用于组建局域网的私有IP 地址
1.10.*,前8位是网络号,共 16,777,216 个地址
2.172.16.*到 172.31.*,前 12 位是网络号,共 1,048,576 个地址
3.192.168.*,前 16 位是网络号,共 65,536 个地址
包含在这个范围中的,都成为私有 IP,其余的则称为全局 IP(或公网 IP):
网络宏观上被分为:
公网 :内网(子网,局域网)=1:n
在网络通信的过程中,私有IP不能出现在公网上
所以 我们普通人,直接接触的,根本不是公网,我们直接接触的是,都是内网,局域网、子网
3.3.从运营商的角度理解公网和私网
路由器:分为家用路由器和运营商路由器(区别其实就是容纳主机号数量大小的区别)
路由器本身就具有构建子网的能力,给子网内所有主机分配IP的能力。
一个路由器有俩个IP,一个WAN 一个LAN
路由器的功能就是将两个局域网连接在一起
标签一就是WAN
标签二和三都是LAN
传输背景:其中的一个内网IP想要访问图中的公网IP
1. 终端判断:是否同一网段?(子网掩码定边界)
终端 192.168.1.201/24
要访问目标 122.77.241.3/24
,先通过 子网掩码 /24
(即 255.255.255.0
) 计算网段:
- 终端网段:
192.168.1.0
(IP & 掩码:192.168.1.201 & 255.255.255.0 = 192.168.1.0
) - 目标网段:
122.77.241.0
(IP & 掩码:122.77.241.3 & 255.255.255.0 = 122.77.241.0
)
→ 网段不同(一个内网、一个公网),终端需把请求发往 默认网关(家用路由器 LAN 口 192.168.1.1/24
)。
2. 家用路由:第一次 NAT 转换(内网→运营商分配 IP)
家用路由器收到请求,做两件事:
(1)子网掩码确认转发方向
家用路由 LAN 口 192.168.1.1/24
,通过掩码 /24
识别终端在 192.168.1.0/24
内网;目标 122.77.241.3
是公网,需从 WAN 口(如 10.1.1.2/24
)转发。
(2)NAT 转换:私有 IP → 运营商过渡 IP
路由启动 NAT(网络地址转换) ,把数据的 源 IP(192.168.1.201
)替换成自己 WAN 口 IP(10.1.1.2
) ,同时记录映射关系(NAT 表:192.168.1.201:端口 ↔ 10.1.1.2:端口
),用于返回数据识别。
→ 此时数据:源 IP = 10.1.1.2
(家用路由 WAN 口),目标 IP = 122.77.241.3
,发往运营商路由器。
3. 运营商路由:公网转发(可能二次 NAT 或直接路由)
运营商路由器 WAN 口(如 122.77.241.4/24
)是公网 IP ,收到数据后:
- 若家用路由 WAN 口
10.1.1.2
是运营商内网 IP(私有 / 过渡性质),运营商路由会二次 NAT ,把10.1.1.2
换成自己公网 WAN 口122.77.241.4
; - 若
10.1.1.2
已是公网 IP ,则直接通过公网路由表转发。
→ 最终数据通过广域网(公网) ,基于目标公网 IP 122.77.241.3
,精准送达目标设备。
4. 返回路径:NAT 反向转换,数据回家
目标设备响应数据,源 IP = 122.77.241.3 ,目标 IP = 家用路由 WAN 口 IP(可能是 10.1.1.2
或运营商公网 IP 122.77.241.4
) :
- 运营商路由收到响应,根据路由表转发给家用路由;
- 家用路由查 NAT 表 ,找到映射关系
10.1.1.2:端口 → 192.168.1.201:端口
,把目标 IP 替换回192.168.1.201
,转发给终端。
→ 终端收到响应,完成一次跨网访问。
3.4.NAT机制
NAT 技术当前解决 IP 地址不够用的主要手段,是路由器的一个重要功能;
1.NAT 能够将私有 IP 对外通信时转为全局 IP.也就是就是一种将私有 IP 和全局IP 相互转化的技术方法:
2.很多学校,家庭,公司内部采用每个终端设置私有 IP,而在路由器或必要的服务器上设置全局 IP;
3.全局 IP 要求唯一,但是私有 IP 不需要;在不同的局域网中出现相同的私有 IP是完全不影响的;
NAT IP 转化过程:
1.NAT 路由器将源地址从 10.0.0.10 替换成全局的 IP 202.244.174.37;
2.NAT 路由器收到外部的数据时,又会把目标IP 从 202.244.174.37 替换回10.0.0.10;
3.在 NAT路由器内部,有一张自动生成的,用于地址转换的表;
4.当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系,
NAPT :
此时转化表中:包括一对键对值,
一个是对内的:主机(这个局域网中真实的主机)+端口号(主机上的进程)
一个是对外的:主机(路由器的公网IP)+端口(标识局域网中的主机)
NAT背景下的网络通信:
1.同一个局域网下,设备A 访问设备B
由于 IP 本身不允许重复,自然不受任何影响,NAT 不起到作用
2.公网设备 A 访问公网设备 B
由于 公网 |P 本身也不重复,也不受到影响,NAT 不起作用
3.不同局域网,设备 A 访问设备 B
不允许的
NAT 机制禁止这样的访问方式
但是也是一种保护机制,这样你的ip就不会被放在大街上一样被随意访问
4.公网设备 A 访问私网设备 B
不允许的
需要特殊手段的
你在你电脑上搭一个能让外网访问的服务器
比如,通过内网穿透,通过 VPNL(点拟私人网络)
内网穿透:
5.局域网设备 A 访问公网设备 B
这里涉及到 “网络地址映射”
1.当这些设备向服务器发送请求的时候,先经过公网ip的路由器,此时在这个路由器中,会创建一个类似于hash表一样的键对值,将私网ip和端口号一一对应并记录下来。
其实端口号NAT设备也可以是随意更改的
2.此时路由器再将这些私网ip改成自己的ip,端口号不变发送给服务器。
3.服务器进行反应的时候,首先发个公网路由器,在根据之前创建的“哈希表“,一一对应进行返回
4.3.路由选择
在复杂的⽹络结构中, 找出⼀条通往终点的路线
路由的过程, 是⼀跳⼀跳(Hop by Hop) "问路" 的过程.
所谓 "⼀跳" 就是数据链路层中的⼀个区间. 具体在以太⽹中指从源MAC地址到⽬的MAC地址之间的帧 传输区间.
IP数据包的传输过程也和问路⼀样.
• 当IP数据包, 到达路由器时, 路由器会先查看⽬的IP;
• 路由器决定这个数据包是能直接发送给⽬标主机, 还是需要发送给下⼀个路由器;
• 依次反复, ⼀直到达⽬标IP地址;
那么如何判定当前这个数据包该发送到哪⾥呢? 这个就依靠每个节点内部维护⼀个路由表;
• 路由表可以使⽤route命令查看
• 如果⽬的IP命中了路由表, 就直接转发即可;
• 路由表中的最后⼀⾏,主要由下⼀跳地址和发送接⼝两部分组成,当⽬的地址与路由表中其它⾏都不 匹配时,就按缺省路由条⽬规定的接⼝发送到下⼀跳地址。
4.代理服务器
4.1.正向代理服务器
正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。
工作原理:
1.客户端将请求发送给正向代理服务器
2.正向代理服务器接收请求,并根据配置进行处理,如缓存查找、内容过滤等
3.正向代理服务器将处理后的请求转发给目标服务器
4.目标服务器处理请求,并将响应返回给正向代理服务器
5.正向代理服务器将响应返回给客户端。
功能特点:
1.缓存功能:正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资源时,可以直接从缓存中获取,提高访问速度
2.内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告阻止恶意网站等。
3.访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作时间访问娱乐网站。
4.隐藏客户端身份:正向代理可以隐藏客户端的真实IP 地址,保护客户端的隐私。
5.负载均衡:在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠性
应用场景
1.企业网络管理:企业可以通过正向代理实现对员工网络访问的管理和控制,确保员工在工作时间内专注于工作,避免访问不良网站或泄露公司机密。
2.公共网络环境:在公共场所如图书馆、学校等提供的网络环境中,通过正向代理可以实现对网络资源的合理分配和管理,确保网络使用的公平性和安全性。
3.内容过滤与保护:家长可以通过设置正向代理来过滤不良内容,保护孩子免受网络上的不良信息影响。
4.访问速度:对于经常访问的网站或资源,正向代理可以通过缓存机制提高访问速度,减少网络延迟。
5.跨境电商与海外访问:对于跨境电商或需要访问海外资源的企业和个人,正向代理可以帮助他们突破网络限制,顺畅地访问海外网站和资源。
4.2.反向代理服务器
概述:
反向代理服务器是一种网络架构模式,其作为Web 服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。这种架构模式可以提升网站性能、安全性和可维护性等
基本原理:
反向代理服务器位于客户端和 Web服务器之间,当客户端发起请求时,它首先会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的Web服务器,并将Web 服务器的响应返回给客户端。在这个过程中,客户端并不知道实际与哪个 Web 服务器进行了交互,它只知道与反向代理服务器进行了通信。
应用场景
1.负载均衡:反向代理服务器可以根据配置的负载均衡策略,将客户端的请求分发到多个后端服务器上,以实现负载均衡。这有助于提升网站的整体性能和响应速度,特别是在高并发场景下。
2.安全保护:反向代理服务器可以隐藏后端Web服务器的真实IP地址,降低其被直接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL)等安全策略对客户端的请求进行过滤和限制,以保护后端服务器的安全。
3.缓存加速:反向代理服务器可以缓存后端 Web服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,而无需再次向后端服务器发起请求。这可以大大减少后端服务器的负载,提升网站的响应速度。
4.内容过滤和重写:反向代理服务器可以根据配置的规则对客户端的请求进行过滤和重写,例如添加或删除请求头、修改请求路径等。这有助于实现一些特定的业务需求,如 URL 重写、用户认证等。
5.动静分离:在大型网站中,通常需要将静态资源和动态资源分开处理。通过将静态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应而无需再次向后端服务器发起请求。这可以大大提升静态资源的访问速度。(contentDeliveNNetwork,内容分发网络)就是采用了反向代理的原理
5.内网穿透
图里的内网穿透逻辑(用 frp 举例)
云服务器(公网 “中转站”):
- 云服务器有公网 IP ,所有人都能直接访问。图里它装了 frp 的服务端(frps),负责 “转发” 流量。
- 你在云服务器上配置好,比如开放 6888 端口,用来接收外面(公司 / 学校)发过来的请求。
家里的内网设备(被访问端,frp 客户端 frpc ):
- 家里电脑 / 服务器装 frp 客户端(frpc ),它主动连云服务器的 frps ,相当于 “告诉” 云服务器:“我在内网,想让外面能访问我,把公网请求转发给我呀~”
- 配置里会设:“把家里设备的 22 端口(SSH 常用),通过 frp 映射到云服务器的某个端口(比如 8888 )” 。这样,云服务器收到公网对 8888 端口的请求,就会转发给家里的 22 端口。
公司 / 学校访问家里设备(走公网→云服务器→家里内网):
- 公司电脑想连家里的 Linux 设备(22 端口 SSH 登录),直接访问云服务器的 6888 端口(图里步骤 2 逻辑类似,可能是简化示意)。因为云服务器和家里 frpc 已打通,请求就会被转发到家里设备的 22 端口,实现 “穿透内网” 访问。
6.内网打孔
内网打孔的核心逻辑(以 UDP 打洞为例,结合图里云服务器辅助)
云服务器当 “中间人”:
- 公司电脑、家里电脑先都主动连云服务器(比如通过一个服务,告诉云服务器 “我在线,我的内网信息是啥” )。这一步是让双方知道彼此的 “网络位置” ,包括各自路由器给的内网 IP 、路由器对外的公网映射信息(NAT 类型)。
模拟 “请求”,让路由器开 “通道”:
- 云服务器会告诉公司电脑:“家里电脑的公网 IP + 它路由器可能开放的端口” ;同时告诉家里电脑:“公司电脑的公网 IP + 它路由器可能开放的端口” 。
- 然后,公司电脑主动给家里电脑发一个 UDP 数据包(目标是家里的公网 IP + 对应端口)。此时,公司的路由器看到 “内网设备要往外发数据到这个地址”,会临时开一个 “通道”(记录这个映射:公司内网 IP + 端口 → 公网 IP + 端口 )。
- 同理,家里电脑也主动给公司电脑发一个 UDP 数据包,家里路由器也会开一个 “通道”。
直接通信,跳过云服务器转发:
当两边路由器都开了 “通道”,后续公司和家里的设备,就能通过这些通道直接收发数据,不用再让云服务器当 “中转站”。比如传文件、远程控制,数据直接走两台设备的点对点连接,延迟低、速度快~
和内网穿透(比如 frp )的区别
- 内网穿透:依赖公网服务器持续转发数据,所有流量都走服务器,适合简单访问、对延迟要求不高的场景(比如远程 SSH 、看小文件)。
- 内网打孔:通过 “打洞” 让设备直接连,后续数据不绕服务器,适合大流量、低延迟需求(比如传大文件、视频通话、游戏联机),但实现更复杂(得处理路由器 NAT 类型、网络波动等问题)。
7.DNS
hosts文件:
TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序.但是 IP 地址不方便记忆.
于是人们发明了一种叫主机名的东西,是一个字符串,并且使用 hosts 文件来描述主机名和 IP 地址的关系.
DNS的由来:
1.最初,通过互连网信息中心(SRI-NIC)来管理这个 hosts 文件的.
2.如果一个新计算机要接入网络,或者某个计算机 IP 变更,都需要到信息中心申请变更 hosts 文件.
其他计算机也需要定期下载更新新版本的 hosts 文件才能正确上网
这样就太麻烦了,于是产生了 DNS 系统,
1.一个组织的系统管理机构,维护系统内的每个主机的IP 和主机名的对应关系如果新计算机接入网络,将这个信息注册到数据库中;
2.用户输入域名的时候,会自动查询 DNS 服务器,由 DNS 服务器检索数据库,得到对应的IP地址
域名简绍:
1.com:一级域名.表示这是一个企业域名.同级的还有"net"(网络提供商),"org"(非盈利组织)等.
2.baidu: 二级域名,公司名
3.www: 只是一种习惯用法. 之前人们在使用域名时,往往命名成类似于ftp.xxx.xxx/www.xxx.xxx 这样的格 式,来表示主机支持的协议.
域名解析的过程:
步骤 1:浏览器本地缓存查询
- 做什么:浏览器先查自己的DNS 缓存,看看之前有没有解析过
www.baidu.com
。 - 原理:为了加速,浏览器会把近期解析过的域名 - IP 存起来(类似 “小本本” 记答案)。
- 结果:
- ✅ 找到:直接用缓存的 IP 发起访问,跳过后续步骤。
- ❌ 没找到:去系统缓存查。
步骤 2:操作系统缓存查询
- 做什么:如果浏览器没缓存,会查操作系统的 DNS 缓存(Windows 叫 “本地 DNS 解析器缓存”,Linux/macOS 类似)。
- 原理:系统也会存常用域名的解析结果,比浏览器缓存更 “全局”。
- 结果:
- ✅ 找到:用系统缓存的 IP 访问,结束解析。
- ❌ 没找到:去 “本地 DNS 服务器” 查(你家路由器 / 运营商指定的 DNS)。
步骤 3:本地 DNS 服务器查询
- 角色:本地 DNS 服务器(可能是你家路由器,或运营商提供的 DNS,如
114.114.114.114
223.5.5.5
)。 - 做什么:
- 先查自己的缓存(存了大量域名的解析结果,覆盖常用网站)。
- 如果缓存没有,就帮你去 “根 DNS 服务器” 问答案。
- 原理:本地 DNS 是你和外网 DNS 通信的 “代理”,帮你转发查询,还能缓存结果加速后续访问。
步骤 4:根 DNS 服务器查询
- 角色:根 DNS 服务器(全球只有 13 组,负责管理顶级域名,如
.com
.cn
.org
)。 - 做什么:根服务器不存具体域名的 IP,但知道:
→www.baidu.com
是.com
后缀,该去com 顶级域名服务器问。 - 返回:告诉本地 DNS 服务器:“去联系 com 顶级域名服务器,它们知道更多!”
步骤 5:顶级域名服务器(TLD)查询
- 角色:顶级域名服务器(如
.com
服务器,管理所有 com 后缀的域名)。 - 做什么:查
www.baidu.com
属于哪个权威 DNS 服务器管理(每个域名注册时,会设置自己的权威 DNS)。 - 返回:告诉本地 DNS 服务器:“去联系
baidu.com
的权威 DNS 服务器,它们有最终答案!”
步骤 6:权威 DNS 服务器查询
- 角色:权威 DNS 服务器(由域名持有者配置,比如百度自己的 DNS 服务器,存了
baidu.com
旗下所有域名的精确解析记录)。 - 做什么:查
www.baidu.com
对应的真实 IP(可能是多组 IP,实现负载均衡)。 - 返回:把
www.baidu.com
→180.101.50.212
这样的映射,告诉本地 DNS 服务器。
步骤 7:结果返回与缓存
- 本地 DNS 服务器:拿到权威 DNS 的 IP 后,一方面返回给你的电脑(浏览器 / 系统),另一方面自己缓存这份结果(下次再有人查
www.baidu.com
,可以直接用缓存,不用再走完整流程)。 - 你的电脑:拿到 IP 后,浏览器就可以用这个 IP 发起 HTTP 请求,真正访问百度服务器啦!
8.RIP协议
RIP 是一种经典的内部网关协议(IGP),用于自治系统(AS)内的路由信息交换,属于距离矢量路由协议(Distance-Vector Protocol)。
一,作用:
在自治系统(AS)内,让所有路由器动态学习网络拓扑,计算到达各网段的 “最佳路径”(以跳数为度量),最终生成统一的路由表。
二、基础概念
1. 自治系统(AS)
- 指由同一机构管理、使用统一路由策略的网络集合(如企业内网、运营商的一个区域网)。
- RIP 专注于 AS 内部的路由(内部网关协议,IGP)。
2. 距离矢量(Distance-Vector)
- 距离:路径开销的度量(RIP 中为跳数,即经过的路由器数量)。
- 矢量:到达目标网络的 “方向”(下一跳路由器)。
- 路由器通过周期性交换 “距离 - 矢量” 信息,逐步收敛到一致的路由表。
三、工作原理(4 个核心流程)
1. 路由表初始化
- 每个路由器启动时,先初始化本地直连网络:
- 直连网段的跳数为
0
(直接可达),下一跳为 “自身”。 - 非直连网段的路由条目为空,需通过 RIP 学习。
- 直连网段的跳数为
2. 路由信息交换(周期性更新)
- 更新周期:默认每
30秒
,路由器向所有邻居(通过 RIP 配置的相邻路由器)发送完整路由表。 - 更新内容:包含路由器已知的所有 “目标网络 + 跳数 + 下一跳” 信息。
- 传输协议:基于 UDP 520 端口(RIP 报文封装在 UDP 中发送)。
3. 路由表更新(贝尔曼 - 福特算法)
路由器收到邻居的路由更新后,执行贝尔曼 - 福特算法(Bellman-Ford Algorithm) 计算最优路径:
步骤 1:判断新路径是否更优
对于邻居发来的 “目标网络 N,跳数 H,下一跳为邻居 A”:- 若本地路由表中无 N 的条目:新增条目,跳数为
H+1
(加 1 是因为经过当前路由器),下一跳为 A。 - 若本地路由表已有 N 的条目:比较
H+1
与现有跳数:- 若
H+1 < 现有跳数
:更新为更优路径(跳数更小)。 - 若
H+1 ≥ 现有跳数
:忽略该更新(维持当前路径)。
- 若
- 若本地路由表中无 N 的条目:新增条目,跳数为
步骤 2:处理超时与失效
- 每条路由条目有超时定时器(默认
180秒
):若超时未收到更新,标记为 “可能失效”。 - 若路由条目被标记为失效,进入抑制定时器(默认
120秒
):期间即使收到更差的路径,也不立即更新(避免路由震荡)。
- 每条路由条目有超时定时器(默认
4. 网络收敛与冲突解决
- 收敛:所有路由器的路由表逐步趋于一致的过程。因 RIP 是逐跳更新(路由器只从邻居获取信息),收敛速度较慢(尤其是大型网络)。
- 最大跳数限制:RIP 定义最大跳数为 15(跳数
16
表示网络不可达)。这是为了避免 “无穷计数” 问题(路由环路导致跳数无限增大)。
9.路由器分组转发算法
路由器分组转发算法,是路由器在网络中确定数据包(分组)转发路径,将数据包从源网络高效、准确地传送到目标网络的关键机制。
工作流程
- 接收数据包:路由器从某个接口接收到数据包后,首先会进行链路层的解封装,去除链路层的头部信息,获取到网络层的 IP 数据包。
- 查找路由表:路由器提取数据包中的目的 IP 地址,然后在自己的路由表中查找与该目的 IP 地址匹配的路由条目。路由表中包含了目的网络地址、子网掩码、下一跳地址、出接口等信息。例如,目的网络地址为 192.168.1.0,子网掩码为 255.255.255.0,下一跳地址为 192.168.0.1,出接口为 Ethernet0/0。
- 确定下一跳:如果在路由表中找到了精确匹配的路由条目,路由器会按照该条目指定的下一跳地址和出接口,将数据包转发出去;若没有精确匹配,路由器会查找最长前缀匹配的路由条目(即目的网络地址前缀与数据包目的 IP 地址前缀最长的匹配项),以此确定下一跳。
- 转发数据包:路由器将数据包重新封装上链路层头部信息(如以太网帧头,包含目的 MAC 地址、源 MAC 地址等),然后通过指定的出接口将数据包发送出去,使其朝着目标网络继续传输。
主要算法类型
- 距离矢量算法:以 RIP(路由信息协议)为代表。路由器周期性地向邻居路由器发送自己的路由表信息,每个路由条目包含目的网络地址和到达该网络的距离(如跳数)。路由器根据接收到的邻居路由信息,不断更新自己的路由表,计算出到达各个网络的最佳路径。不过,这种算法存在收敛速度慢、容易产生路由环路等问题 。
- 链路状态算法:以 OSPF(开放最短路径优先)为代表。路由器会先收集网络中各个链路的状态信息(如链路的带宽、延迟、可靠性等),然后通过 Dijkstra 算法计算出到达所有目的网络的最短路径,构建出自己的路由表。链路状态算法收敛速度快,能适应大规模网络拓扑变化,但计算复杂度较高。
- 路径矢量算法:以 BGP(边界网关协议)为代表,主要用于自治系统之间的路由选择。BGP 路由器会交换到达目的网络的路径信息,包括经过的自治系统序列等,每个路由器根据这些路径信息,选择最佳的路径来转发跨自治系统的数据包。