【网络通信】同一网段与不同网段的通信原理

同一网段与不同网段的通信原理


目录

  • 核心结论速览
  • 基础术语与前置概念
  • 一、同一网段通信(A → B,不经过网关)
  • 二、不同网段通信(A → R1 → R2 → B)
    • 正确的步骤顺序与关键纠正
    • R1 内部处理机制(端口1 → 端口2)
    • IP 与 MAC 的逐跳变化
  • 三、默认网关与默认路由的匹配逻辑(Windows 实操)
  • 四、常见误区与概念澄清
  • 五、抓包/命令验证要点(可操作)
  • 附录:TCP 三次握手与四次挥手(抓包对应)
  • 参考图示

核心结论速览

  • 同一网段通信:不经过网关;A 通过 ARP 获取 B 的 MAC,帧的目的 MAC 是 B 的 MAC;交换机按 MAC 地址表单播转发。
  • 不同网段通信:必须经过网关;A 查路由表命中默认路由(或更具体的路由)后,用 ARP 获取"下一跳(网关)"的 MAC,将帧发给网关;在每一跳上,IP 头的源/目的 IP 始终不变,MAC 地址逐跳更新。
  • 路由器的行为:解封装二层帧 → 依据目的 IP 做路由决策 → 为下一跳重新封装二层帧 → 转发;同时会将 TTL 减 1(0 则丢弃并回送 ICMP 超时报文)。
  • 默认网关/默认路由作用:当路由表没有更具体的匹配项时,0.0.0.0/0 指示"把包发给本网段的网关 IP",再由网关继续转发。

基础术语与前置概念

  • IP 地址(网络层):端到端逻辑寻址,决定"最终目的地"。可跨网段、跨路由器。
  • MAC 地址(数据链路层):同一广播域内的物理寻址,决定"当前这一跳发给谁"。不可跨网段。
  • ARP 缓存表:维护"IP → MAC"映射。主机用于查同网段对端或网关的 MAC;路由器按接口分别维护,用于查对应网段的下一跳 MAC。
  • 路由表:最长前缀匹配原则进行决策;优先级通常为 直连 > 特定路由 > 默认路由。
  • 广播 MAC:FF:FF:FF:FF:FF:FF(注意是 6 组 2 位十六进制,共 48bit)。

一、同一网段通信(A → B,不经过网关)

背景:主机 A 与主机 B 的 IP/掩码计算网络号一致,属于同一网段(例如 192.168.1.10/24 与 192.168.1.20/24)。

完整流程:

  1. 网段判断
    • A 以自身掩码(例如 255.255.255.0)分别与 A/B 的 IP 做按位与,网络号相同 → 判定同网段。
    • 同网段也会匹配到本机路由表中的"直连路由",确认无需走网关。
  2. ARP 查询
    • A 查询 ARP 缓存是否已有 "B 的 IP → MAC"。
    • 若没有,A 发送 ARP 广播请求:Who has 192.168.1.20? Tell 192.168.1.10
      • 二层目的 MAC:FF:FF:FF:FF:FF:FF
    • B 收到广播后,单播 ARP 应答,将自己的 MAC 告知 A,同时缓存 "A 的 IP → MAC"。
  3. 封装与转发
    • A 逐层封装数据:传输层(TCP/UDP)→ 网络层(源 IP=A,目的 IP=B)→ 数据链路层(源 MAC=A,目的 MAC=B)。
    • 交换机依据自身 MAC 地址表对二层帧进行单播转发至 B 所在端口。
  4. 接收与交付
    • B 逐层解封装,交付给对应端口的应用程序。

同网段通信要点:

  • 不涉及网关,不会发给路由器。
  • 只需一次 ARP 与对端建立 IP--MAC 映射。
  • 二层帧的目的 MAC 始终是目标主机 B 的 MAC。

二、不同网段通信(A → R1 → R2 → B)

拓扑参考(两跳示意):A(192.168.1.10/24,GW=192.168.1.1) → R1(P1=192.168.1.1/24,P2=10.0.0.1/24)→ R2(P1=10.0.0.2/24,P2=172.16.0.1/24)→ B(172.16.0.20/24,GW=172.16.0.1)

参考图:

1) 正确步骤顺序与关键纠正

正确顺序(主机 A 发起):

  1. 网段判断:A 计算自身与 B 的网络号 → 不一致 → 跨网段。
  2. 路由表查询:按"最长前缀匹配"查本机路由表
    • 若无 172.16.0.0/24 的特定路由 → 命中默认路由 0.0.0.0/0(下一跳=192.168.1.1)。
  3. ARP 查询(目标是"下一跳"):
    • A 查找"192.168.1.1 → MAC",没有则广播 ARP 请求"Who has 192.168.1.1?"
    • R1 的端口1(192.168.1.1)单播应答自己的 MAC。
  4. 封装与发送:
    • A 封装帧:源 MAC=A,目的 MAC=R1 端口1,源 IP=A,目的 IP=B → 交换机转发至 R1。

关键错误点纠正(常见误区澄清):

  • 错误1:将"查 ARP"放在"查路由表"之前
    • 纠正:必须先由路由表决定下一跳是谁,再用 ARP 去解析该"下一跳"的 MAC。
  • 错误2:认为不同网段时,主机 A 会收到主机 B 的 ARP 应答
    • 纠正:跨网段通信时,A 与 B 不发生 ARP 交互。A 只解析网关(R1 端口1)的 MAC;路由器在出接口再与目的网段主机做 ARP。
  • 错误3:认为 A 必须等到 B 的 ARP 应答后才能发数据
    • 纠正:A 拿到网关 MAC 即可把数据发给网关,之后由路由器继续完成与 B 的 ARP 交互与转发。

概念澄清:路由器不是简单转发"二层帧",而是"解封装 → 路由查询 → 重新封装"。IP 源/目的不变(除 NAT),二层 MAC 随跳更新。

2) R1 内部处理机制(端口1 → 端口2)

当 R1 收到 A 发来的二层帧(目的 MAC=R1 端口1):

  1. 接收校验:校验帧完整性与目的 MAC 是否匹配自身接口。
  2. 链路层解封装:剥除以太网帧头尾,取出 IP 包(MAC 在此刻完成使命被丢弃)。
  3. 路由决策(最长前缀匹配):
    • 根据目的 IP=172.16.0.20 查 R1 的路由表
    • 找到下一跳=10.0.0.2,出接口=端口2(eth1)
    • 将 IP 头的 TTL 减 1;若 TTL 变为 0,丢弃并回送 ICMP 超时报文。
  4. ARP 寻址(对"下一跳" 10.0.0.2):
    • 查端口2 的 ARP 缓存;若无,广播 ARP 请求"Who has 10.0.0.2?"
    • R2 端口1 单播回复自身 MAC,R1 将映射写入端口2 的 ARP 表。
  5. 二层重新封装并转发:
    • 源 MAC=R1 端口2,目的 MAC=R2 端口1,载荷为原 IP 包(源/目的 IP 不变)
    • 发送至 10.0.0.0/24 网段交换机,单播到 R2 端口1。

R2 的处理与 R1 同理;当匹配到"直连 172.16.0.0/24",则在出接口向主机 B 做 ARP,获得 B 的 MAC 后,封装帧(源 MAC=R2 端口2,目的 MAC=B)并转发给 B。

3) IP 与 MAC 的"端到端不变 / 逐跳变化"

  • IP 地址(端到端属性)
    • 源 IP=主机 A 的 IP、目的 IP=主机 B 的 IP,在 A→R1→R2→B 的整个路径中保持不变(无 NAT)。
  • MAC 地址(逐跳属性)
    • 每经过一跳(链路),帧的源/目的 MAC 更新为"当前出接口的 MAC / 下一个相邻设备的 MAC"。

示例对照(精炼呈现):

  • A → R1:源 MAC=A,目的 MAC=R1:port1
  • R1 → R2:源 MAC=R1:port2,目的 MAC=R2:port1
  • R2 → B:源 MAC=R2:port2,目的 MAC=B

三、默认网关与默认路由的匹配逻辑(Windows 实操)

问题1:主机 A 的默认网关是否应配置为"与 A 同网段的路由器接口 IP"(如 R1 的端口1 IP 192.168.1.1)?

  • 结论:是的。否则无法通过 ARP 获取网关 MAC,从而无法封装二层帧把包发出去。

问题2:为什么会匹配默认路由?为什么下一跳是 192.168.1.1?

  • 原因:路由表采用"最长前缀匹配"。当没有更具体的匹配(如 172.16.0.0/24)时,就会命中 0.0.0.0/0 的默认路由,下一跳指定为网关 IP(与 A 同网段)。

Windows 路由表示例(关键三类条目):

  • 127.0.0.0/8 回环路由(在链路上)
  • 192.168.1.0/24 直连路由(在链路上)
  • 0.0.0.0/0 默认路由(网关=192.168.1.1,接口=192.168.1.10)

匹配流程(A 访问 172.16.0.20):

  1. 计算目标网段 → 172.16.0.0/24
  2. 遍历路由表:不匹配直连 → 命中 0.0.0.0/0
  3. 读取下一跳 → 192.168.1.1(与 A 同网段)
  4. 依据"接口"字段,从 A 的对应网卡发包给网关

补充:

  • 默认路由常由 DHCP 自动下发,也可手动配置:route add 0.0.0.0 mask 0.0.0.0 192.168.1.1
  • Windows 中"跃点数"体现优先级,直连通常优先级更高,保证同网段不走默认路由。

四、常见误区与概念澄清

  • 误区:同一网段通信"不查路由表"
    • 澄清:同一网段通信也会匹配到"直连路由",确认无需转发后才发起 ARP。
  • 误区:网关 IP 必须是".1"
    • 澄清:网关可以是子网内任意可用 IP,".1"只是惯例。
  • 误区:跨网段通信时,A 与 B 之间会直接 ARP
    • 澄清:A 只对下一跳(网关)做 ARP;B 只对其本网段路由接口做 ARP。
  • 误区:MAC 地址会随包一起端到端传到对端主机
    • 澄清:MAC 只在当前链路有效,每经过路由器就会被替换。

五、抓包/命令验证要点(可操作)

  • 查看 ARP 缓存(Windows/Linux)
    • arp -a
  • 清空 ARP 缓存后触发 ARP 并抓包(Windows)
    • arp -d *
    • ping 192.168.1.1(或对端 IP)
  • 查看路由表
    • Windows:route print 或 route print -4
    • Linux:ip route show
  • 两跳路径验证
    • Windows:tracert 172.16.0.20
    • Linux:traceroute 172.16.0.20

抓包观察点(Wireshark):

  • 同网段:只出现 A↔B 的 ARP;数据帧目的 MAC 为 B。
  • 跨网段:A 先 ARP 网关;R1、R2 在各自出接口 ARP 下一跳/主机;每跳 MAC 更新,IP 不变;TTL 逐跳减 1。

附录:TCP 三次握手与四次挥手(抓包对应)

三次握手(建立连接):

  1. 客户端:SYN=1, ACK=0, seq=x
  2. 服务器:SYN=1, ACK=1, seq=y, ack=x+1
  3. 客户端:SYN=0, ACK=1, seq=x+1, ack=y+1
    → 双方进入 ESTABLISHED

四次挥手(优雅断开):

  1. 客户端:FIN=1, ACK=1, seq=x, ack=z
    • 表示"我没数据发了",请求关闭(半关闭,客户端→服务器方向关闭)
  2. 服务器:ACK=1, seq=z, ack=x+1
    • 确认收到客户端 FIN,进入 CLOSE_WAIT
  3. 服务器:FIN=1, ACK=1, seq=y, ack=x+1
    • 服务器也发送 FIN,请求关闭另一方向
  4. 客户端:ACK=1, seq=x+1, ack=y+1
    • 客户端进入 TIME_WAIT,等待 2MSL 后彻底关闭

异常场景补充:

  • 若长时间未收到 ACK,可能出现 TCP 重传;若应用/连接异常,可能直接发送 RST 强制关闭。

相关推荐
zr5268554473 小时前
PCIe-PN卡(三格电子)
网络
无名的小三轮3 小时前
防火墙基础实验:智能选路下的透明DNS选路配置
网络
一轮弯弯的明月3 小时前
TCP传输大致过程、流量控制与拥塞控制
网络·tcp/ip·计算机网络·学习心得
犀思云4 小时前
如何通过网络即服务平台实现企业数字化转型?
运维·网络·人工智能·系统架构·机器人
皇帝要考研4 小时前
【ISO 13400-2:2019】核心配置项
网络·网络协议
犀思云5 小时前
企业端到端NaaS连接的优势与应用
网络·人工智能·机器人·智能仓储·专线
Godspeed Zhao5 小时前
现代智能汽车系统——总线技术1
网络·汽车·php
JoySSLLian5 小时前
IP SSL证书:一键解锁IP通信安全,高效抵御网络威胁!
网络·人工智能·网络协议·tcp/ip·ssl
汽车仪器仪表相关领域5 小时前
MTX-A 模拟废气温度(EGT)计 核心特性与车载实操指南
网络·人工智能·功能测试·单元测试·汽车·可用性测试