【Linux网络】数据链路层详解:以太帧与ARP协议 + 代理服务器与内网穿透,内网打洞
目录1 ~ 数据链路层2 ~ 以太网2.1 以太帧格式2.2 MAC 地址2.3 最大传输单元 MTU3 ~ ARP协议3.1 为什么需要ARP 协议3.2 ARP 协议格式3.3 ARP 通信流程4 ~ 代理服务器4.1 正向代理4.2 反向代理4.3 正 / 反向代理对比5 ~ 内网穿透 内网打洞5.1 内网穿透5.2 内网打洞1 ~ 数据链路层数据链路层是计算机网络体系结构的第二层OSI七层模型和TCP/IP 五层协议。上层网络层解决了数据包在跨网络传输时的路径选择问题即网络层做出将数据报交给路由器的决策而如何在物理介质上把数据报送到路由器则是由数据链路层负责执行的。跨网络通信时源主机和目的主机不在同一个子网网段所以必须由IP 网络层先在源主机所在子网中找到一个出入口路由器然后由这个路由器将数据报转发出去不断循环直至路由到目的主机。数据链路层就要完成将数据报从源主机交给下一跳路由器或者由路由器再交给下一跳路由器最终由路由器交给目的主机。2 ~ 以太网跨网络通信本质是局域网通信而路由器又连接不同子网所以实现了跨网络。目前应用最广泛的局域网LAN技术就是以太网Ethernet。与之并列的还有令牌环网和无线LANWi-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 最大传输单元 MTUMTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层产生的限制。以太网帧中的数据长度规定最小46字节最大1500字节ARP数据包的长度不够46字节要在后面补填充位最大值1500称为以太网的最大传输单元(MTU)不同的网络类型有不同的MTU如果一个数据包从以太网路由到拨号链路上数据包长度大于拨号链路的MTU了则需要对数据包进行分片(fragmentation)不同的数据链路层标准的MTU是不同的。MTU 是数据链路层对有效载荷大小的限制即IP 报文大小的限制。所以在IP 报头中有专门进行分片和组装的字段。查看硬件地址和MTUifconfig3 ~ ARP协议ARPAddress 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 通信流程主机A192.168.1.10/24MAC MAC_A想要与主机B10.0.0.20/24MAC MAC_B跨网络通信默认网关路由器LAN口 IP 192.168.1.1./24MAC MAC_GW。完整通信与局域网 ARP 流程[主机A]——(局域网A/ARP)——[默认网关]—(路由转发)—[局域网B]——[主机B]步骤一网段判断路由决策主机A 应用层/传输层 生成数据发往10.0.0.20网络层将目的 IP 与自身 IP 和子网掩码按位与后发现网络号不同判断出主机属于外网不同网段决定把数据包交给默认网关。步骤二查询本地 ARP 缓存主机A 检查本地 ARP 表IP 与 MAC 映射关系查找网关 IP192.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 缓存。步骤四数据帧封装与发送后续流转跨网段链路闭环网关接收与解封装网关收到数据帧匹配目的 MACMAC_GW 后解封装取出 IP 数据包。路由查找网关查询路由表找到去往10.0.0.20的出接口进入局域网 B。局域网 B 的 ARP 过程网关在局域网 B 发起 ARP 请求“谁是10.0.0.20”主机 B 响应其 MAC 地址MAC_B。重新封装发往主机 B网关将 IP 包源 IP192.168.1.10目的 IP10.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重写、用戶认证等。动静分离在大型网站中通常需要将静态资源和动态资源分开处理。通过将静态资源部署在反向代理服务器上可以直接从反向代理服务器返回静态资源的响应而无需再次向后端服务器发起请求。这可以大 提升静态资源的访问速度。Nginx4.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隧道建立成功。到这里网络部分的学习就结束了