大家好,上次我们学完了数据链路层,有关OSI网络模型的几层我们就都已经学完了,今天我们在补充一些知识并做一下总结。好了那么我们开始今天的学习:
目录
NAT、代理服务、内网穿透
1. NAT 技术背景
1.1 NAT IP 转换过程
1.2 NAPT
1.3 NAT 技术的缺陷
2. 代理服务器
2.1 正向代理
工作原理
功能特点
应用场景
2.2 反向代理
基本原理
应用场景
NAT 和代理服务器
3. 内网穿透
4. 内网打洞
5. 总结
数据链路层
核心作用:
核心组件:
网络层
核心作用:
核心组件:
传输层
核心作用:
核心组件:
应用层
核心作用:
核心组件:
网络通信全景
NAT、代理服务、内网穿透
1. NAT技术背景
之前我们讨论了, IPv4 协议中, IP地址数量不充足的问题
NAT 技术当前解决 IP地址不够用的主要手段,是路由器的一个重要功能:
NAT能够将私有IP对外通信时转为全局IP.也就是就是一种将私有IP和全局 IP 相互转化的技术方法:很多学校,家庭,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局 IP;全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP 是完全不影响的;
1.1 NAT IP转换过程
NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;NAT路由器收到外部的数据时,又会把目标IP从202.244.174.37替换回 10.0.0.10;在NAT路由器内部,有一张自动生成的,用于地址转换的表;当10.0.0.10第一次向163.221.120.9发送数据时就会生成表中的映射关系;
1.2 NAPT
这时候NAPT来解决这个问题了.使用IP+port来建立这个关联关系
如果只替换IP地址的话,那么当子网内两台主机同时使用同一个端口号进行收发数据时,IP地址和端口号就都是相同的了,所以要对端口号也进行替换。
这种关联关系也是由NAT路由器自动维护的.例如在TCP的情况下,建立连接时,就会生成这个表项;在断开连接后,就会删除这个表项
1.3 NAT技术的缺陷
由于NAT依赖这个转换表,所以有诸多限制:
1. 无法从 NAT 外部向内部服务器建连接
NAT 的转换表,就像 “小区快递柜的取件码对应表”—— 只有 “内部住户先往外寄了快递(内部主动发起连接)”,快递柜才会生成 “取件码(外部 IP + 端口)→住户门牌号(内部 IP + 端口)” 的对应关系。如果外部的人想直接给小区里的住户寄快递(外部主动连内部),快递柜里根本没有对应的取件码记录,所以包裹(请求)会直接被 “快递柜管理员(NAT 设备)” 拒收。
2. 转换表的生成 / 销毁有额外开销
NAT 设备要给每一个内部发起的连接,都记录 “外部 IP + 端口、内部 IP + 端口、协议类型” 等信息(相当于给每个快递生成唯一取件码并登记);连接断开后,还要及时销毁这些记录(避免占用内存)。如果内部设备同时发起上千个连接,NAT 设备就要维护上千条转换表记录,既占内存,也会增加设备的处理压力(相当于快递柜同时存几百个包裹,管理员登记、清理的工作量会变大)。
3. NAT 异常会导致 TCP 连接全断
转换表是 “临时存在 NAT 设备内存里的”—— 就像快递柜的取件码记录只存在柜机里。如果 NAT 设备突然故障(比如柜机断电),即使换了备用柜机(热备设备),备用柜里没有之前的取件码记录,之前的所有 “取件码→住户” 的对应关系都没了。而 TCP 连接依赖这些转换表(外部发的数据包要通过转换表找到内部主机),所以所有正在通信的 TCP 连接都会因为 “找不到对应关系” 而断开,得重新发起连接。
2. 代理服务器
2.1 正向代理
正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。
工作原理
客户端将请求发送给正向代理服务器。正向代理服务器接收请求,并根据配置进行处理,如缓存查找、内容过滤等。正向代理服务器将处理后的请求转发给目标服务器。目标服务器处理请求,并将响应返回给正向代理服务器。正向代理服务器将响应返回给客户端。
功能特点
缓存功能:正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资源时,可以直接从缓存中获取,提高访问速度。内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、阻止恶意网站等。访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作时间访问娱乐网站。隐藏客户端身份:正向代理可以隐藏客户端的真实IP地址,保护客户端的隐私。负载均衡:在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠性。
应用场景
企业网络管理:企业可以通过正向代理实现对员工网络访问的管理和控制,确保员工在工作时间内专注于工作,避免访问不良网站或泄露公司机密。公共网络环境:在公共场所如图书馆、学校等提供的网络环境中,通过正向代理可以实现对网络资源的合理分配和管理,确保网络使用的公平性和安全性。内容过滤与保护:家长可以通过设置正向代理来过滤不良内容,保护孩子免受网络上的不良信息影响。提高访问速度:对于经常访问的网站或资源,正向代理可以通过缓存机制提高访问速度,减少网络延迟。跨境电商与海外访问:对于跨境电商或需要访问海外资源的企业和个人,正向代理可以帮助他们突破网络限制,顺畅地访问海外网站和资源。
2.2 反向代理
反向代理服务器是一种网络架构模式,其作为Web服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。这种架构模式可以提升网站性能、安全性和可维护性等。
基本原理
反向代理服务器位于客户端和Web服务器之间,当客户端发起请求时,它首先会到达反向代理服务器。反向代理服务器会根据配置的规则将请求转发给后端的 Web 服务器,并将 Web服务器的响应返回给客户端。在这个过程中,客户端并不知道实际与哪个 Web服务器进行了交互,它只知道与反向代理服务器进行了通信。
应用场景
负载均衡:反向代理服务器可以根据配置的负载均衡策略,将客户端的请求分发到多个后端服务器上,以实现负载均衡。这有助于提升网站的整体性能和响应速度,特别是在高并发场景下。安全保护:反向代理服务器可以隐藏后端Web服务器的真实IP地址,降低其被直接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL)等安全策略,对客户端的请求进行过滤和限制,以保护后端服务器的安全。缓存加速:反向代理服务器可以缓存后端Web服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,而无需再次向后端服务器发起请求。这可以大大减少后端服务器的负载,提升网站的响应速度。内容过滤和重写:反向代理服务器可以根据配置的规则对客户端的请求进行过滤和重写,例如添加或删除请求头、修改请求路径等。这有助于实现一些特定的业务需求,如 URL重写、用户认证等。动静分离:在大型网站中,通常需要将静态资源和动态资源分开处理。通过将静态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。这可以大大提升静态资源的访问速度。CDN(Content Delivery Network,内容分发网络)就是采用了反向代理的原理
NAT和代理服务器
路由器往往都具备NAT设备的功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程. 代理服务器看起来和 NAT设备有一点像.客户端像代理服务器发送请求,代理服务器将 请求转发给真正要请求的服务器;服务器返回结果后,代理服务器又把结果回传给客户端.
从应用上讲, NAT设备是网络基础设备之一,解决的是IP不足的问题.代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,另外像迅游这样的加速器,也是使用代理服务器.从底层实现上讲, NAT是工作在网络层,直接对IP地址进行替换.代理服务器往往工作在应用层.从使用范围上讲, NAT一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网做,也可以跨网.从部署位置上看, NAT一般集成在防火墙,路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上.
花王尿不湿是一个很经典的尿不湿品牌,产自日本.我自己去日本买尿不湿比较不方便,但是可以让我在日本工作的表姐去超市买了快递给我.此时超市看到的买家是我表姐,我的表姐就是"正向代理";后来找我表姐买尿不湿的人太多了,我表姐觉得天天去超市太麻烦,干脆去超市买了一大批尿不湿屯在家里,如果有人来找她代购,就直接把屯在家里的货发出去,而不必再去超市.此时我表姐就是"反向代理"正向代理用于请求的转发(例如借助代理绕过反爬虫).反向代理往往作为一个缓存.
3. 内网穿透
这个图展示的是用 frp(内网穿透工具)解决 “在家访问学校内网平台” 的场景—— 因为学校平台是 “只有学校内网才能访问的资源”,放假在家时你的设备在自己家的内网,没法直接连学校内网,frp 就像个 “公网中转站”,帮你打通家里到学校内网的连接。我用 “学校教务平台(仅学校内网可访问)” 为例,对应图里的组件拆解步骤:
先明确 3 个核心角色(对应图里的元素)
云服务器(图里的 “云服务器”):有公网 IP 的中间转发节点,部署frps(frp 的服务端),相当于 “快递中转站”。
学校内网设备(对应图里的 “家”):在学校内网里的电脑 / 服务器,部署frpc(frp 的客户端),相当于 “学校那边的快递员”。
你家里的设备(对应图里的 “公司或者学校”):你在家用的电脑,要访问学校内网的教务平台。
具体步骤(对应你的需求:在家访问学校内网平台)
步骤 1:学校内网端配置 frpc(把学校平台 “挂” 到中转站)
在学校内网的设备上,安装并配置frpc(客户端):
告诉 frpc:“把学校内网教务平台的端口(比如平台是 80 端口),映射到云服务器 frps 的 8080 端口”(相当于学校的快递员把 “教务平台” 这个包裹,送到中转站的 8080 号货架)。
同时,frpc 会主动和云服务器的 frps 建立TCP 长连接(保持中转站和学校内网的通路)。
步骤 2:云服务器配置 frps(准备好中转站)
在云服务器上部署frps(服务端),只需要简单配置(比如允许 frpc 连接、开放 8080 端口),相当于 “中转站准备好 8080 货架,等着学校的包裹送过来”。
步骤 3:你在家访问学校平台(从中转站取包裹)
放假在家时,你在自己的电脑上直接访问云服务器的 8080 端口(比如输入云服务器公网IP:8080):
云服务器的 frps 收到你的请求后,会通过之前和学校 frpc 的长连接,把请求转发给学校内网的 frpc;
学校的 frpc 再把请求转发到学校内网的教务平台(80 端口);
最后,学校平台的响应会沿着 “学校 frpc→云服务器 frps→你家电脑” 的路径返回 —— 这样你在家就能打开只有学校内网才能访问的平台了。
对应图里的流程(适配你的需求)
原本图里是 “公司 / 学校访问家里的设备”,换成你的场景就是 “家里访问学校内网的平台”:
图里的 “家(部署 frpc)”→ 学校内网(部署 frpc,映射学校平台端口);
图里的 “公司或者学校(访问云服务器端口)”→ 你家里的电脑(访问云服务器的映射端口);
核心逻辑不变:通过 frp 的 “客户端 - 服务端” 转发,让两个内网(家里、学校)的设备,借助公网云服务器打通连接。
4. 内网打洞
先铺垫背景:你在家的电脑(设备 B)、学校宿舍的电脑(设备 A,上面开着学校教务平台),都在各自的NAT 内网里(学校有学校的路由器,你家有你家的路由器)——NAT 会给设备分配 “内网 IP”(比如学校 A 是 192.168.1.10,你家 B 是 192.168.0.5),但这些 IP 只有自己小区(内网)能识别,公网根本 “看不见”,所以正常情况下 B 和 A 互相找不到对方。
内网打洞的过程(像 “小区邻居互递东西,找中介约好取货点”)
我们需要一个有公网 IP 的 “打洞服务器”(相当于 “中介”),帮两边 “约好临时取货点”,然后在 NAT 的 “围墙” 上打洞:
步骤 1:中介(打洞服务器)准备好
先租一台有公网 IP 的云服务器(比如公网 IP 是203.0.113.10),作为两边的 “信息传递站”。
步骤 2:学校的 A 先找中介登记 “取货点”
学校宿舍的电脑 A(内网 IP:192.168.1.10),主动连接打洞服务器:
学校的 NAT 路由器(围墙保安)会给 A 分配一个 **“公网映射地址”**(比如120.79.80.5:8000)—— 相当于 “学校小区门口的临时取货点,写着 A 的名字”;
打洞服务器把 A 的 “公网映射地址(120.79.80.5:8000)” 记录下来。
步骤 3:家里的 B 也找中介登记 “取货点”
你在家的电脑 B(内网 IP:192.168.0.5),也主动连接打洞服务器:
你家的 NAT 路由器(围墙保安)会给 B 分配一个 “公网映射地址”(比如114.22.33.44:9000)—— 相当于 “你家小区门口的临时取货点,写着 B 的名字”;
打洞服务器把 B 的 “公网映射地址(114.22.33.44:9000)” 也记录下来。
步骤 4:中介把两边的 “取货点” 互相告诉对方
打洞服务器把 A 的 “公网映射地址(120.79.80.5:8000)” 发给 B,同时把 B 的 “公网映射地址(114.22.33.44:9000)” 发给 A。
步骤 5:两边互相 “去对方取货点递东西”—— 打洞成功
你家的 B,主动给 A 的 “公网映射地址(120.79.80.5:8000)” 发一条 “打招呼” 的消息;
学校的 NAT 路由器(保安)看到 “有消息发往 A 的取货点”,会把这条消息转发给内网里的 A;
同时,学校的 A 也主动给 B 的 “公网映射地址(114.22.33.44:9000)” 发一条消息;
你家的 NAT 路由器(保安)看到 “有消息发往 B 的取货点”,也会把消息转发给内网里的 B。
这一步的关键是:NAT 路由器默认会拒绝 “外部主动来的消息”,但如果是 “自己设备先主动联系过的地址”,就会允许对方的消息进来—— 相当于两边互相 “敲了对方小区的门”,保安(NAT)就给开了个临时的 “洞”。
步骤 6:在家直接访问学校平台
打洞成功后,B 和 A 已经建立了直接的 TCP 连接(不用再经过打洞服务器),你在家的 B 就可以直接访问 “学校 A 的内网 IP: 平台端口”(比如192.168.1.10:80),打开仅学校内网能访问的教务平台了。
为什么叫 “内网打洞”?
NAT 像 “把设备关在小区里的围墙”,外部进不来;而两边互相发消息的操作,相当于在围墙上 “打了个临时的洞”,让对方的流量能通过这个洞进到自己的内网里。
和之前 frp 的区别?
frp 是 “全程靠公网服务器中转”(相当于所有东西都先寄到中介那里,再转发),速度慢、占服务器带宽;
内网打洞是 “中介只负责传地址,之后两边直接连”(相当于中介只告诉取货点,之后两家直接递东西),速度快、不占中介资源。
举个例子,一种新的直播方式就是一个内网打洞的例子,观众和主播通过直播平台建立连接,这样可以减轻服务器压力,但是如果观众量很大的时候,这种方式还是不太友好。
5. 总结
数据链路层
核心作用:
在同一数据链路(如局域网)内的设备间可靠传输数据帧,实现点到点通信。
核心组件:
以太网:最主流的局域网技术,定义了帧格式、拓扑结构、传输速率 (10M/100M/1Gbps) 和访问控制方式 (CSMA/CD)。
MAC 地址:全球唯一硬件标识符 (烧录在网卡),用于局域网内寻址。
FCS:帧校验,检测传输错误。
MAC 地址:
6 字节 (48 位),如:00:1A:2B:3C:4D:5E
作用:数据链路层寻址,交换机通过 MAC 表实现微秒级转发
与 IP 区别:MAC 是数据链路层物理地址 (本地有效),IP 是网络层逻辑地址 (全局路由)
ARP 协议:
功能:将目标 IP 地址解析为 MAC 地址 (网络通信的 "临门一脚")
工作流程:
主机广播 ARP 请求:"谁有 IP 192.168.1.100,告诉我 MAC"
目标主机回复 MAC 地址
源主机缓存 IP-MAC 映射 (ARP 表),避免重复查询
MTU (最大传输单元):
以太网默认1500 字节(数据部分)
作用:限制帧最大长度,防止过大数据包
影响:超过 MTU 时,IP 层会进行分片,接收后重组
路径 MTU:两台主机间所有链路 MTU 的最小值,决定实际传输的最大包长
网络层
核心作用:
在复杂网络环境中 (跨网段) 选择路径,实现端到端数据包路由。
核心组件:
IP 地址:
IPv4:32 位,点分十进制 (如 192.168.1.1)分类:
A类: 0xxx...(0-127) | B类: 10xx...(128-191) | C类: 110x...(192-223) D类: 1110...(组播) | E类: 1111...(保留)私有 IP:
10.0.0.0/8, 172.16.0.0-172.31.0.0/12, 192.168.0.0/16特点:内网使用,不路由到公网
IP vs MAC:
IP: 网络层逻辑地址,用于全局路由规划(跨省)
MAC: 链路层物理地址,用于本地交付(送上门)
IP 数据包格式:版本(4位)|头长度(4位)|服务类型(8位)|总长度(16位)| 标识(16位)|标志(3位)|片偏移(13位)|TTL(8位)| 协议(8位)|校验和(16位)|源IP(32位)|目标IP(32位)| 选项(可变)|填充|数据TTL:防止数据包无限循环 (每跳减 1,为 0 时丢弃)
协议:指示上层协议 (如 6-TCP, 17-UDP)路由选择:
工作流程:
主机检查目标 IP 是否在本地网段 (通过子网掩码)
同网段:直接通过 MAC 地址交付
不同网段:发给默认网关 (路由器)
路由器根据路由表查找下一跳,逐跳转发
IP 地址不足解决方案:
子网划分:将大网络分成多个小网络,提高地址利用率例: 192.168.1.0/24 → 分成4个子网: 192.168.1.0/26, 192.168.1.64/26等CIDR (无类别域间路由):可变长子网掩码,更灵活分配地址
NAT (网络地址转换):多台内网设备共享一个公网 IP
NAT 工作原理:
部署在路由器,连接内网 (私有 IP) 和公网 (公有 IP)
转换类型:
静态 NAT:一对一映射 (固定内网 IP→固定公网 IP)
动态 NAT:多对多映射 (从 IP 池中分配)
PAT (端口地址转换):最常用,多对一映射,通过端口区分不同主机
工作流程:内网→外网: 替换源IP(私有→公有)+端口重映射 外网→内网: 根据端口映射表还原目标IP局限性:无法从外网主动向内网建立连接;转换表开销;NAT 故障时所有 TCP 连接断开
ICMP 协议:
网络层的 "交通警察",负责错误报告和状态查询
常见类型:
Ping (Echo 请求 / 响应):测试网络连通性
Traceroute:通过 TTL 超时定位路由路径
目标不可达:网络 / 主机 / 端口不可达时报告
传输层
核心作用:
实现端到端的数据传输控制,确保可靠性 (对 TCP) 或高效性 (对 UDP)。
核心组件:
端口号:
16 位 (0-65535),区分同一主机上的不同应用
知名端口:HTTP (80)、HTTPS (443)、FTP (21/20)、SSH (22)、DNS (53) 等
UDP 协议:
特点:无连接、不可靠、面向报文、无流量控制
优点:开销小、速度快、延迟低
适用场景:视频流、音频通话、DNS 查询、实时游戏
UDP 数据包:源端口 + 目标端口 + 长度 + 校验和 + 数据
TCP 协议:
特点:面向连接、可靠、面向字节流、全双工
可靠性保障机制:
三次握手:建立连接,同步序列号客户端: SYN → 服务器: SYN+ACK → 客户端: ACK确认应答:每包必确认,确保按序到达
超时重传:未收到确认则重发
滑动窗口:流量控制,动态调整发送速率
拥塞控制:防止网络拥塞导致的性能下降
连接管理:建立: 三次握手 → 数据传输 → 四次挥手(断开) 四次挥手: 主动关闭方: FIN → 被动方: ACK → 被动方: FIN → 主动方: ACKTIME_WAIT 状态:主动关闭方等待 2 倍 MSL 时间,防止旧连接数据包干扰新连接
TCP 状态转换:CLOSED → SYN_SENT → ESTABLISHED → FIN_WAIT_1 → ... → TIME_WAIT → CLOSED粘包问题:
原因:TCP 面向字节流,无消息边界
解决:消息定长、添加消息边界标记、头部携带长度字段
MTU 对传输层影响:
TCP:通过 MSS (最大段大小) 适应 MTU,通常为 MTU-40 (IP+TCP 头)
UDP:若数据包超过 MTU 且不允许分片,会被直接丢弃 (导致丢包)
应用层
核心作用:
提供与用户应用交互的接口,实现具体网络服务 (如网页浏览、文件传输)。
核心组件:
HTTP 协议:
特点:无连接、请求 - 响应模式、基于 TCP (端口 80/443)
请求格式:GET /index.html HTTP/1.1 Host: www.example.com User-Agent: ...响应格式:
HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1234 ...(body)版本:HTTP/1.1 (持久连接)、HTTP/2 (多路复用)、HTTP/3 (基于 QUIC)
DNS 协议:
功能:将域名 (如www.baidu.com) 解析为 IP 地址
工作流程:
客户端向本地 DNS 服务器发送查询
本地 DNS 逐级查询 (根→顶级域→权威 DNS)
找到对应 IP 后返回客户端
优化:DNS 缓存、负载均衡、HTTPDNS (防劫持)
应用层协议设计原则:
分层设计:与下层解耦,专注应用逻辑
消息格式:定义请求 / 响应结构 (如 JSON、XML)
错误处理:定义错误码和恢复机制
安全考虑:认证、授权、加密 (如 HTTPS 的 TLS)
网络通信全景
应用层数据 → 传输层(TCP/UDP头) → 网络层(IP头) → 数据链路层(帧头+FCS) → 物理层(比特流)
| 层次 | 关键特征 | 核心协议 | 寻址方式 |
|---|---|---|---|
| 数据链路层 | 本地通信 | 以太网、ARP | MAC 地址 (物理) |
| 网络层 | 跨网路由 | IP、ICMP | IP 地址 (逻辑) |
| 传输层 | 端到端控制 | TCP、UDP | 端口号 (应用) |
| 应用层 | 用户服务 | HTTP、DNS | 域名 (用户友好) |
总结:网络通信是一场精密的接力赛,每一层专注解决特定问题,共同构建出可靠高效的全球互联网络。理解分层模型,是掌握网络技术的基础。
到这里我们有关OSI模型的四层就全部学习完了,如果感到有收获的话还请点赞收藏,那么我们下次再见!