计算机网络 之 【IP协议】(IP分片、局域网通信原理、MAC帧与MAC地址、ARP协议、ping)

目录

1.IP分片

(1)IP分片细节

重组步骤:

(4)规避手段(MSS与路径MTU发现)

2.数据链路层

2.1以太网简介

2.2局域网通信原理与碰撞处理

[2.3MAC 帧与MAC 地址](#2.3MAC 帧与MAC 地址)

[(5)MAC 地址与 IP 地址对比](#(5)MAC 地址与 IP 地址对比)

[2.4ARP 协议](#2.4ARP 协议)

(4)arp指令

(5)arp欺骗简介

3.ping


1.IP分片

IP分片是网络层的专属功能 (数据链路层无法也不负责分片,只丢弃超MTU的包),其核心设计是在源端或路由器一次性分片、端到端重组 ,避免中间节点反复切割,从而减少开销并屏蔽异构链路**(如以太网→PPP→令牌环)**的MTU差异

(1)IP分片细节

  • 三个字段的分工
字段 作用
16位标识 标识同一个原始IP包(同一批分片该值相同)
3位标志 主要是MF位:1=后面还有分片,0=最后一个
13位片偏移 指示该分片的数据在原始包中的起始位置(单位:8字节)
  • 示例

假设一个原始IP数据包:数据部分长度为 4000 字节 ,需要通过一个 MTU(最大传输单元)为 1500 字节 的链路

参数:

  • IP头:通常20字节(无选项)
  • 每片最大数据量:1500 - 20 = 1480 字节(每个分片都有独立的ip报头)
  • 片偏移单位:8字节。因此每片的数据长度必须是8的倍数(除最后一片)
分片编号 数据字节范围 数据长度 片偏移 (值) 片偏移 (实际字节) MF标志
第1片 0 ~ 1479 1480 0 0 1 (后面还有)
第2片 1480 ~ 2959 1480 185 (1480/8) 1480 1 (后面还有)
第3片 2960 ~ 3999 1040 370 (2960/8) 2960 0 (最后一片)

重组步骤:

  1. 根据标识(0x1234)收集所有分片
  2. 片偏移从小到大排序
  3. 检查数据是否连续 + 最后一片的MF == 0
  4. 拼接还原原始IP包

(2)分片丢失检测机制

  • 重组超时定时器:接收端收到第一个分片(偏移=0)时,会启动一个定时器(通常30秒),如果在超时前没有收齐,就丢弃所有已收到的该标识符的分片
  • 丢第一个分片:后续分片到达时,由于没有偏移=0的分片来初始化重组缓冲区,它们会被直接丢弃(或者缓存一小段时间等待,但最终超时),无法组装。
  • 丢最后一个分片:收齐了所有非最后分片(MF=1),但永远等不到MF=0的分片,定时器超时后丢弃,永远无法收齐。
  • 丢中间分片:比如收到片0和片2,但没收到片1。重组缓冲区会出现一个"空洞",定时器超时后丢弃所有,无法重组。

对于IPv4,丢失任意一个分片 = 丢失整个原始数据包 。接收端无法向发送端"我只缺第3片,请重传这一片"。它只能默默丢弃,等待发送端(如TCP的超时重传)重新发送整个原始数据包

(3)不建议分片

  • 假设:一个1500字节的TCP数据包(含头),在传输中丢失一个IP分片的概率是 1%
  • 如果分成2片:整个包丢失的概率 ≈ 2% (1 - 0.99^2)。丢包率翻倍
  • 如果分成10片:整个包丢失的概率 ≈ 9.6%。丢包率放大近10倍

对于UDP :没有重传机制,分片丢失意味着应用层直接丢失了整个数据报

对于TCP :TCP的重传是按段 进行的,一个TCP段如果被分片,丢任一片就会导致TCP重传整个段,效率极低

(4)规避手段(MSS与路径MTU发现)

  • MTU(最大传输单元 ):数据链路层限制,指单个数据帧有效载荷的最大总大小(包含整个IP包(IP头 + 传输层报文)),超了就得靠分片
  • MSS(最大报文段大小 ):传输层限制,指单个TCP数据段中纯数据的最大字节数(不含IP头和TCP头),超了TCP自己会切,为的是避免分片

TCP MSS (最大段大小) 协商:

  • TCP三次握手时,双方会通告自己的MSS,实际连接采用的MSS取两者最小值
  • MSS 通常 = MTU - 40 (20字节TCP头 + 20字节IP头)如果IP或TCP头带选项,MSS相应变小
  • 以太网MTU=1500,则MSS=1460。TCP发出的每个段都保证≤1460字节,封装成IP包后≤1500字节,永远不会被路由器分片。这是避免分片的最有效手段。

路径MTU发现 (PMTUD):

  • 发送端设置IP包的DF=1 (Don't Fragment)
  • 如果中间路由器发现包大于下一跳MTU,它无法转发,会丢弃该包,并返回一个ICMP报文:"需要分片但设置了DF位" (Type 3, Code 4),同时告诉发送端下一跳的MTU
  • 发送端据此减小发送包的大小,并缓存这条路径的MTU
  • 注意:很多网络会过滤ICMP,导致PMTUD失效,造成"黑洞连接"(能握手,但发大数据就卡死)

应用层规避(针对UDP):

  • 因为纯UDP是无连接、重传等机制的,所以纯UDP不执行上述行为
  • 在以太网环境下,安全的UDP数据净荷通常 ≤ 1472 字节 (1500 MTU - 20 IP头 - 8 UDP头)
  • 如果需要传输更大的UDP数据,应用层应自行实现分块、确认和重传机制(如RPC、TFTP的做法)

2.数据链路层

(1)

知识点 核心说明
位置 网络层之下,与物理层交互,网卡驱动实现了数据链路层的主要功能
核心职责 解决直接相连的主机之间的数据帧传输
封装/解包 使用定长报头进行分离与组装
分用 通过帧中的类型字段决定交付给上层哪个协议(如 IP / ARP)
典型协议 以太网(Ethernet)

2.1以太网简介

以太网是目前最广泛使用的局域网技术

(1) MAC 帧

  • MAC 帧格式:目的MAC + 源MAC + 类型 + 载荷 + FCS(CRC校验)
  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,在网卡出厂时固化
  • 帧协议类型字段有三种值:0x0800:IP 报文;0x0806:ARP 报文;0x8035:RARP报文
  • 帧末尾是CRC校验码
  • RARP协议,通过MAC地址获取IP,应用场景少,更简单直接
  • 固定报头可以有效分离,类型字段便于上层交付
  • 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位

(2)以太网的关键机制

机制 作用 现状
CSMA/CD 碰撞检测与重发 交换式网络中不再需要
MAC地址 唯一标识设备 仍为核心
广播 发送给所有设备 仍在ARP等场景使用

(3)一些易错点

问题 正确答案
MAC 帧是否只在以太网存在? 不是,但以太网是最典型的
交换机比集线器好在哪里? 隔离冲突域,不碰撞
CSMA/CD 现在还用吗? 无线网还在用(CSMA/CA),有线网几乎不用
以太网 = 局域网吗? 不完全,以太网是局域网的一种实现

2.2MAC 地址

MAC 地址用于在同一个局域网内唯一标识一台网络设备

(2)MAC 地址标准表示格式

格式 示例 说明
冒号分隔 08:00:27:AB:CD:EF Linux / 常见
连字符分隔 08-00-27-AB-CD-EF Windows
点分四组 0800.27AB.CDEF Cisco / 某些设备

(3)MAC 地址的 48 位结构

位置 位宽 名称 含义
第 1 字节(最低位 1 bit I/G 位(Individual/Group) 0 = 单播,1 = 组播
第 1 字节(次低位 1 bit U/L 位(Universal/Local) 0 = 全球唯一,1 = 本地管理
其余 46 位 46 bit 组织分配 由厂商或管理员分配

(4)MAC 地址类型

类型 说明 示例 判断方式
单播(Unicast) 唯一设备,一对一通信 08:00:27:AB:CD:EF I/G 位 = 0
组播(Multicast) 一组设备,一对多 01:00:5E:00:00:01 I/G 位 = 1
广播(Broadcast) 所有设备 FF:FF:FF:FF:FF:FF 全 1
本地管理地址 手动修改,非全球唯一 02:00:00:00:00:01 U/L 位 = 1
全球唯一地址(OUI) 厂商分配 08:00:27:AB:CD:EF U/L 位 = 0

(5)MAC 地址与 IP 地址对比

维度 MAC 地址 IP 地址
长度 48 位(6 字节) 32 位(IPv4)/ 128 位(IPv6)
表示 十六进制 点分十进制(IPv4)
层次 数据链路层 网络层
作用范围 局域网 端到端
是否可变 通常固定(可手动改) 可动态分配
全局唯一 理论上是,但可本地修改 公网 IP 唯一
IP vs MAC 下一站地址 最终地址

(6)特殊 MAC 地址

地址 用途
FF:FF:FF:FF:FF:FF 广播
01:00:5E:00:00:00 ~ 01:00:5E:7F:FF:FF IPv4 组播范围
33:33:00:00:00:00 ~ 33:33:FF:FF:FF:FF IPv6 组播范围
00:00:00:00:00:00 无效 / 未指定

(7)查看 MAC 地址的命令

系统 命令
Linux ifconfigip addr
Windows ipconfig /all
macOS ifconfignetworksetup -listallhardwareports

2.3局域网通信原理与碰撞处理

局域网通信的核心原理是:在同一广播域内,主机通过MAC地址 唯一标识自己,数据以MAC帧 形式在共享或交换介质中传输;发送方使用ARP协议 将目标IP解析为MAC地址,若目标在同一子网则直接通过交换机单播转发,否则通过默认网关 转发;早期共享介质(集线器)采用CSMA/CD 避免碰撞,现代交换网络则基于MAC地址表实现无碰撞、全双工转发,从而高效完成相邻节点间的数据交付
局域网 = 多台主机共享的临界资源,任意时刻只能一台发送

知识点 说明
通信特点 同一局域网中,所有主机都是"吃瓜群众",都能收到帧
核心问题 数据碰撞
碰撞原因 多台主机共享同一介质(早期总线 / 无线)
避免算法 CSMA/CD(先听后说、碰撞则停、随机重发)
重发策略 碰撞后等待随机时间再重试
主机数影响 主机越多 → 碰撞概率越大
交换机 隔离碰撞域,但不隔离广播域

绕过数据链路层向局域网内发送大量垃圾报文,就会增大数据碰撞的概率,直接影响就是卡

2.4ARP 协议

(1)ARP 的作用与原理

知识点 说明
全称 Address Resolution Protocol
核心作用 已知目标 IP → 获取目标 MAC
协议归属 属于数据链路层,在mac帧上层,所以封装在 MAC 帧中(类型 = 0x0806)
请求 广播(目的MAC = FF:FF:FF:FF:FF:FF
应答 单播(直接回复请求方)
ARP 缓存 arp -a 查看,避免频繁广播
缓存失效 重新发起 ARP 请求

获取MAC地址的邪修

通过本机IP与子网掩码计算出所在网段的网络号,遍历该网段所有可能的IP地址发送ping请求,从而触发ARP广播;活跃主机会响应ARP请求,本机将学习到的IP-MAC映射存入ARP缓存(可通过arp -a查看),最终即可得到该局域网中所有活跃主机的IP地址及其对应的MAC地址。注意:若目标主机禁ping或不在同一广播域,则无法通过此方法发现

(2)ARP 报文格式

ARP 报文长度为 28 字节,封装在以太网 MAC 帧中(帧类型 = 0x0806)

字段 长度 值(以太网+IPv4) 说明
硬件类型 2字节 0x0001 链路层协议类型,1=以太网
协议类型 2字节 0x0800 网络层协议类型,0x0800=IPv4
硬件地址长度 1字节 0x06 MAC地址长度(6字节)
协议地址长度 1字节 0x04 IP地址长度(4字节)
操作码 op 2字节 1=请求,2=应答 3=RARP请求,4=RARP应答
发送端MAC 6字节 发送方的MAC地址 请求/应答时都填
发送端IP 4字节 发送方的IP地址 请求/应答时都填
目的端MAC 6字节 接收方的MAC地址 请求时填 00:00:00:00:00:00
目的端IP 4字节 接收方的IP地址 请求时填目标IP
  • 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的

(3)ARP 工作流程

  1. 查缓存 → 没有则广播请求 → 目标主机单播应答 → 更新缓存

  2. 请求方:构造 ARP 请求(op = 1),目的以太网地址 = FF:FF:FF:FF:FF:FF。封装成 MAC 帧,类型 = 0x0806,广播到局域网

  3. 接收方判断链路:,每个主机收到广播帧,检查帧类型 = 0x0806 → 交给 ARP 层,检查 op 和目的 IP,不是自己的 IP → 丢弃(ARP 层丢弃)

  4. 目标主机应答:构造 ARP 应答(op = 2),填充自己的 MAC 和 IP,单播回复请求方

  5. 请求方缓存:收到应答后,将 IP → MAC 存入 ARP 缓存

收到的任何arp报文都是先看op字段

(4)arp指令

arp 命令用于查看和修改本机的 ARP 缓存表

场景 Windows Linux
查看所有 arp -a arp -aip neigh
查看单个 arp -a IP `arp -a
删除全部 arp -d ip neigh flush all
删除单个 arp -d IP ip neigh del IP dev eth0
添加静态 arp -s IP MAC ip neigh add ... permanent
复制代码
dfq@VM-0-16-ubuntu:~$ arp -a
_gateway (10.0.0.1) at fe:ee:7f:99:99:19 [ether] on eth0
字段 含义
主机名 _gateway 网关的 DNS 名称(自动解析)
IP 地址 (10.0.0.1) 网关的 IP 地址
分隔符 at 表示"对应的 MAC 地址是"
MAC 地址 fe:ee:7f:99:99:19 网关的 MAC 地址
类型 [ether] 以太网(Ethernet)
网络接口 on eth0 通过网卡 eth0 学习到

(5)arp欺骗简介

复制代码
HostA (192.168.1.2)      HostM (192.168.1.100)      Gateway (192.168.1.1)
      |                           |                              |
      |<--- 1. 伪造 ARP 应答 -------|                              |
      |   "网关 IP=192.168.1.1"      |                              |
      |   "网关 MAC=MAC_M"           |                              |
      |                           |                              |
      |--- 2. 上网数据包 --------->|                              |
      |   (目的MAC=MAC_M)          |                              |
      |                           |--- 3. 转发给真实网关 ------->|
      |                           |   (源IP仍是 HostA)           |
      |                           |                              |--- 4. 上网
      |<--- 5. 返回数据 -----------|                              |
      |   (从网关收到后转发)        |<-----------------------------|

关键点 :HostA 认为自己在和网关通信,实际在和 HostM 通信;HostM 再把数据转发给真正的网关。HostA 和网关都蒙在鼓里

攻击者 HostM 向源主机 HostA 发送大量伪造的 ARP 应答,声称"网关 IPR 对应的 MAC 地址是 MAC_M"。HostA 的 ARP 缓存被更新为 IPR → MAC_M。此后,HostA 发往网关的所有数据都会先到达 HostM。若同时欺骗网关,让网关也误以为 HostA 的 MAC 是 MAC_M,则可实现双向截获,完成中间人攻击

欺骗方式 操作 效果
单向欺骗 只欺骗 HostA(告诉 HostA:网关是 HostM) HostA 的数据经过 HostM,但网关直接回复 HostA 时走正常路径,可能导致 TCP 序列号错乱
双向欺骗(更常见) 同时欺骗 HostA 和网关(告诉网关:HostA 是 HostM) HostA 和网关的所有通信都经过 HostM,完美的中间人

双向欺骗需要攻击者同时发送:

  • 给 HostA:网关IP(192.168.1.1) → 攻击者MAC
  • 给网关:HostA的IP(192.168.1.2) → 攻击者MA
相关推荐
晚枫歌F2 小时前
无锁队列简介
网络
zl_dfq2 小时前
计算机网络 之 【IP协议】(路由器、route及ip route指令、路由表、运营商简介)
网络·计算机网络·ip
Proxy_ZZ02 小时前
华为ICT大赛实践赛学习笔记(一):零基础开局,我的网络赛道入坑记录
网络·智能路由器
哇蛙蛙2 小时前
H3CNE--22.OSPF
网络·经验分享·网络协议·tcp/ip·智能路由器·h3cne
可乐鸡翅好好吃2 小时前
nRF52840 BLE 多服务开发中的 NRF_ERROR_NO_MEM 排查与解决实战
网络
kevien_G12 小时前
Http协议
网络·网络协议·http
琪伦的工具库2 小时前
批量IP在线检测与警报工具使用说明:支持IP段与域名导入,并发ping轮询/声音告警/离线日志导出
网络·网络协议·tcp/ip
观无3 小时前
Modbus RTU 与 Modbus TCP 温湿度采集
网络·网络协议·tcp/ip
空中海3 小时前
3.4 状态同步与生命周期管理
android·网络