【Linux网络】数据链路层详解:以太帧与ARP协议 + 代理服务器与内网穿透,内网打洞


目录

  • [1 ~> 数据链路层](#1 ~> 数据链路层)
  • [2 ~> 以太网](#2 ~> 以太网)
    • [2.1 以太帧格式](#2.1 以太帧格式)
    • [2.2 MAC 地址](#2.2 MAC 地址)
    • [2.3 最大传输单元 MTU](#2.3 最大传输单元 MTU)
  • [3 ~> ARP协议](#3 ~> ARP协议)
    • [3.1 为什么需要ARP 协议](#3.1 为什么需要ARP 协议)
    • [3.2 ARP 协议格式](#3.2 ARP 协议格式)
    • [3.3 ARP 通信流程](#3.3 ARP 通信流程)
  • [4 ~> 代理服务器](#4 ~> 代理服务器)
    • [4.1 正向代理](#4.1 正向代理)
    • [4.2 反向代理](#4.2 反向代理)
    • [4.3 正 / 反向代理对比](#4.3 正 / 反向代理对比)
  • [5 ~> 内网穿透 & 内网打洞](#5 ~> 内网穿透 & 内网打洞)
    • [5.1 内网穿透](#5.1 内网穿透)
    • [5.2 内网打洞](#5.2 内网打洞)

1 ~> 数据链路层

数据链路层是计算机网络体系结构的第二层(OSI七层模型和TCP/IP 五层协议)。

上层网络层解决了数据包在跨网络传输时的路径选择问题,即网络层做出将数据报交给路由器的决策而如何在物理介质上把数据报送到路由器则是由数据链路层负责执行的

跨网络通信时,源主机和目的主机不在同一个子网(网段),所以,必须由IP 网络层先在源主机所在子网中找到一个出入口路由器,然后由这个路由器将数据报转发出去,不断循环,直至路由到目的主机。

数据链路层就要完成将数据报从源主机交给下一跳路由器,或者由路由器再交给下一跳路由器,最终由路由器交给目的主机。

2 ~> 以太网

跨网络通信本质是局域网通信,而路由器又连接不同子网,所以实现了跨网络。

目前应用最广泛的局域网(LAN)技术 就是以太网(Ethernet)

与之并列的还有令牌环网无线LAN(Wi-Fi)。

2.1 以太帧格式

  • 目的地址:即目的MAC地址,接收方网卡的48位硬件物理地址。
  • 源地址:即源MAC地址,发送方网卡的48位硬件物理地址。
  • 类型 :标识上层封装的具体网络协议类型(如 0x0800 表示 IP)。

三种上层协议的封装:

IP 数据报封装

类型码 (EtherType): 0800(即十六进制 0x0800)。

有效载荷: 直接承载 IP 数据报,长度由 IP 报文自身决定,范围在 46~1500 字节之间。如果 IP 报文不足 46 字节(如极短的 TCP ACK 包),同样会在末尾补充填充位。

ARP 请求/应答封装

类型码 (EtherType): 0806(即十六进制 0x0806)。

有效载荷: ARP 报文固定的净荷长度为 28 字节。

填充字段 (PAD): 必须追加 18 字节 的填充数据(PAD),从而满足以太网载荷 最低 46 字节 的限制(28 + 18 = 46 字节)。

RARP 请求/应答封装

类型码 (EtherType): 8035(即十六进制 0x8035)。

有效载荷与填充: 格式与 ARP 完全一致,包含 28 字节 RARP 报文 + 18 字节 PAD 填充。用于早期无盘工作站通过 MAC 地址反向向服务器查询自身的 IP 地址(现代网络中已被 DHCP 替代)。

2.2 MAC 地址

MAC 地址是网卡的硬件地址,长度为 48 位(6字节),通常以十六进制的形式表示(如00:1A:2B:3C:4D:5E),出厂时就确定了,全球范围内唯一

用于在 TCP/IP 模型的数据链路层(以太网层)实现局域网内部数据帧的寻址与传输

MAC 地址与 IP地址的区别?

MAC 地址是路由过程中每个区间的起点和终点,IP 则是起始地址和最终地址(整个过程不发生变化)。


2.3 最大传输单元 MTU

MTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层,产生的限制。

  • 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
  • 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
  • 不同的数据链路层标准的MTU是不同的。

MTU 是数据链路层对有效载荷大小的限制,即IP 报文大小的限制。所以,在IP 报头中有专门进行分片和组装的字段。

查看硬件地址和MTU:ifconfig


3 ~> ARP协议

ARP (Address Resolution Protocol,地址解析协议)是 TCP/IP 协议栈中用于将 IP 地址(网络层逻辑地址)转换为 MAC 地址(数据链路层物理地址) 的关键协议。

ARP 协议工作在网络层和数据链路层之间,解决了在以太网中"已知目标 IP 但不知道对应物理 MAC 地址" 无法封装以太帧的难题。

3.1 为什么需要ARP 协议

要实现不同主机跨网络数据通信,首先就要实现局域网通信,从局部到整体。而在局域网(以太网)中,实际的数据帧传输依靠的是数据链路层的 MAC 地址,即双方的网卡物理地址,路由器或交换机依靠 MAC 地址表转发数据帧。

但是,网络层以及上层应用只知道 IP 地址。因此,当源主机需要向局域网内某台主机发送数据时,必须将 IP 数据报封装成以太网帧。在封装时,就必须填入目的 MAC 地址。

ARP 协议就是用来建立并维护 IP 地址与 MAC 地址之间的映射关系的桥梁。

3.2 ARP 协议格式

  • 硬件类型:2字节,表示数据链路层协议类型,以太网通常为1
  • 协议类型:2字节,表示网络层协议类型,IPv4 为0x0800
  • 硬件地址长度:1字节,MAC 地址长度,以太网为 6
  • 协议地址长度:1字节,IP 协议长度,IPv4为4
  • 操作码:2字节,表示ARP 报文类型,1为请求,2为应答;
  • 发送方 MAC 地址:6字节,发送方物理地址;
  • 发送方 IP 地址:4字节,发送方逻辑地址;
  • 目的 MAC 地址:6字节,接收方物理地址
  • 目的 IP 地址:4字节,接收方逻辑地址。

3.3 ARP 通信流程

主机A(192.168.1.10/24,MAC = MAC_A)想要与主机B(10.0.0.20/24,MAC = MAC_B)跨网络通信,默认网关(路由器LAN口 IP = 192.168.1.1./24,MAC = MAC_GW)。

完整通信与局域网 ARP 流程

c 复制代码
[主机A] ------>(局域网A / ARP) ------>[默认网关] ---(路由转发)---> [局域网B] ------> [主机B]

步骤一:网段判断(路由决策)

主机A 应用层/传输层 生成数据发往 10.0.0.20,网络层将目的 IP 与自身 IP 和子网掩码按位与后发现网络号不同,判断出主机属于外网(不同网段),决定把数据包交给默认网关。

步骤二:查询本地 ARP 缓存

  • 主机A 检查本地 ARP 表(IP 与 MAC 映射关系),查找网关 IP 192.168.1.1./24 是否有对应的MAC 地址。

  • 如果存在,则直接使用;不存在,则开始进行局域网内的 ARP 解析流程。

步骤三:局域网内 ARP 解析流程

  • 主机A 发送 ARP 请求包(广播 ):

  • 目的 MAC 地址为 FF:FF:FF:FF:FF:FF,表示广播,局域网内所有主机都会收到该ARP 报文。

  • 局域网内主机收到后会对比 目的IP,如果IP 与自身不同则直接丢弃;相同则再查看 op 选项,op = 1即为ARP 请求。

    • 将主机A 的192.168.1.10 -> MAC_A 映射关系缓存到路由器的ARP 表。
    • 路由器向主机A 发送单播
  • 主机A收到单播应答后,将 192.168.1.1 ---> MAC_GW 的映射关系写入到本地 ARP 缓存。

步骤四:数据帧封装与发送

后续流转(跨网段链路闭环):

  • 网关接收与解封装:网关收到数据帧,匹配目的 MAC:MAC_GW 后解封装,取出 IP 数据包。

  • 路由查找:网关查询路由表,找到去往 10.0.0.20 的出接口(进入局域网 B)。

    局域网 B 的 ARP 过程:

    • 网关在局域网 B 发起 ARP 请求:"谁是 10.0.0.20?"

    • 主机 B 响应其 MAC 地址(MAC_B)。

    • 重新封装发往主机 B:网关将 IP 包(源 IP 192.168.1.10,目的 IP 10.0.0.20)重新封装为以太网帧(源 MAC 为网关出接口 MAC,目的 MAC 为 MAC_B),发给主机 B。


4 ~> 代理服务器

代理服务器(Proxy Server)是位于客户端和目标服务器之间的中介网络节点。当客户端发送请求时,请求先到达代理服务器,由代理服务器代替客户端去向目标服务器获取资源,然后再将响应数据返回给客户端。

根据代理服务器服务对象的不同 ,分为正向代理正向代理反向代理

4.1 正向代理

代理服务器位于客户端一侧,代表客户端向外发送请求。目标服务器只能看到代理服务器的 IP,无法直接识别真实的客户端。

工作原理

  • 客户端将请求发送给正向代理服务器。
  • 正向代理服务器接收请求,并根据配置进行处理,如缓存查找、内容过滤等。
  • 正向代理服务器将处理后的请求转发给目标服务器。
  • 目标服务器处理请求,并将响应返回给正向代理服务器。
  • 正向代理服务器将响应返回给客户端。

功能特点:

  • 缓存功能 :正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资源时,可以直接从缓存中获取,提高访问速度
  • 内容过滤 :正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、阻止恶意网站等。
  • 访问控制 :通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作时间访问娱乐网站。
  • 隐藏客户端身份正向代理将客户端与外部互联网隔开,服务端看不到用户,即可以隐藏客户端的真实IP地址,保护客户端的隐私。
  • 负载均衡 :在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠性。

应用场景:

  • 企业网络管理:企业可以通过正向代理实现对员工网络访问的管理和控制,确保员工在工作时间内专注于工作,避免访问不良网站或泄露公司机密。
  • 公共网络环境:在公共场所如图书馆、学校等提供的网络环境中,通过正向代理可以实现对网络资源的合理分配和管理,确保网络使用的公平性和安全性。
  • 内容过滤与保护:家长可以通过设置正向代理来过滤不良内容,保护孩子免受网络上的不良信息影响。
  • 提高访问速度:对于经常访问的网站或资源,正向代理可以通过缓存机制提高访问速度,减少网络延迟。
  • 跨境电商与海外访问:对于跨境电商或需要访问海外资源的企业和个人,正向代理可以帮助他们突破网络限制,顺畅地访问海外网站和资源。
  • 科学上网:正向代理,通过正向代理服务器,连接外部互联网,访问海外网站和资源。

4.2 反向代理

反向代理服务器 是一种网络架构模式,其作为Web服务器的前置服务器 ,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。这种架构模式可以提升网站性能、安全性和可维护性等。

工作原理:

代理服务器位于服务器一侧,代表后端真实服务器接受请求。客户端只与代理服务器建立连接,反向代理服务器会根据配置的规则将请求转发给后端的Web服务器,并将Web服务器的响应返回给客户端。

在这个过程中,客户端并不知道实际与哪个Web服务器进行了交互,它只知道与反向代理服务器进行了通信,不清楚后端服务器的存在。

应用场景:

  • 负载均衡: 将高并发的客户端请求通过轮询,权重等算法方法到多台后端节点,提高网站性能和响应速度。
  • 安全保护 :反向代理服务器可以隐藏后端Web服务器的真实IP地址,降低其被直接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL)等安全策略,对客户端的请求进行过滤和限制,以保护后端服务器的安全。
  • 缓存加速 :反向代理服务器可以缓存后端Web服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,而无需再次向后端服务器发起请求。这可以大 减少后端服务器的负载,提升网站的响应速度。
  • 内容过滤和重写 :反向代理服务器可以根据配置的规则对客户端的请求进行过滤和重写,例如添加或删除请求头、修改请求路径等。这有助于实现一些特定的业务需求,如URL重写、用戶认证等。
  • 动静分离 :在大型网站中,通常需要将静态资源和动态资源分开处理。通过将静态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应,而无需再次向后端服务器发起请求。这可以大 提升静态资源的访问速度。
  • Nginx

4.3 正 / 反向代理对比

对比维度 正向代理 反向代理
服务对象 客户端 服务端
客户端感知 客户端需要进行明确的代理配置 对客户端完全透明(客户端认为反向代理服务器就是目标服务器)
隐藏对象 客户端 后端服务器
主要目标 帮助客户端获取外部资源,保护隐私 保护服务器,提供高可用与负载均衡

5 ~> 内网穿透 & 内网打洞

内网穿透和内网打洞都是为了解决没有公网 IP 的内网设备如何被外界访问 / 互相通信 的技术方案。

5.1 内网穿透

内网穿透属于反向代理的一种,依赖一台具有公网 IP 的服务器作为流量中转站。

内网设备主动向公网服务器建立一条持久加密隧道。当外部用户访问公共服务器的指定端口时,服务器会将流量通过这条隧道转发给内网设备,再由内网设备返回响应。

内网设备与公共服务器建立隧道:

  • 内网主动发起:内网客户端主动向公网服务器的指定端口(如 7000)发起 TCP 三次握手(SYN 包)。

  • 建立NAT映射:路由/防火墙在其 NAT 状态表中记录该笔 内网IP:端口 ↔ 公网IP:端口 的映射,后续公网服务器的响应包(SYN-ACK)便能顺利穿透 NAT 回传内网。

5.2 内网打洞

内网打洞的最终目的是抛弃中继服务器 ,让位于不同内网(NAT后面)的两台设备建立点对点(P2P)直接通信

打洞过程需要借助一台公网上的信令/STUN 服务器:

  • 节点 A 和节点 B 分别给 STUN 服务器发包,查询自己被 NAT 映射后的公网 IP 和端口

  • 双方通过 STUN 服务器交换各自的公网 IP 和端口信息

  • 双方同时向对方的公网端口发送特制的探测数据包(打洞)。

  • 双方的 NAT 防火墙均记录了"本地曾主动发包给对方"的映射条目,后续发来的数据包便不再被阻止,P2P 隧道建立成功。

到这里网络部分的学习就结束了!!!

相关推荐
JZZC22 小时前
38.IPv6——静态配置
计算机网络·ipv6
ly76891 天前
计算机网络:从分层模型到 TCP/IP、HTTP 与网络排查
网络·tcp/ip·计算机网络
我爱cope1 天前
【计算机网络 | 物理层5:时分复用、频分复用与波分复用:一条链路如何服务多个用户?】
网络·学习·计算机网络
上岸社社长2 天前
2027届国网计算机类备考指南:时间线、考纲与复习规划(附资料)
计算机网络
四代水门2 天前
三、计算机网络
服务器·计算机网络·asp.net
hxhy003 天前
计算机网络
计算机网络
llllll1523 天前
深入浅出计算机网络:从 TCP 可靠传输到 DNS 解析核心原理
网络协议·tcp/ip·计算机网络
只吃不吃香菜3 天前
Windows 下基于 YAML 规则的指定域名分流:以哔哩哔哩为例
网络·网络协议·计算机网络·网络安全·代理模式
ZJH__GO3 天前
通信开发--接收浏览器网络连接
java·服务器·网络·计算机网络