数据链路层的七七八八

主要物理传输介质:线路/网卡/二层交换机(网桥)

以太网

封装好的以太网帧由网卡添加前导码和FCS ->

由对端网卡接收后去掉前导码并使用CRC校验,如果帧损坏则丢弃,如果没有损坏则交给软件驱动处理 ->

以太网驱动接收物理层传输过来的包读入内存 ->

查看源mac和目的mac,如果是发给自己的则根据type字段的值交给传输层继续处理,如果不是则根据不同的拓扑设计会选择丢掉或转发。

MAC地址

在同一数据链路的MAC地址必须唯一,相当于身份证号,对于物理网卡MAC地址会被厂商烧到ROM中。

帧格式

以太网帧格式不同标准之间略有差距,例如使用较多的Ethernet II、IEEE802.3、VLAN帧体。

  • Ethernet II 应用最广,从个人电脑上抓包看到的基本都是这类帧体
  • IEEE802.3 可以做到对数据链路层更细节的控制
  • VLAN 可以在逻辑上划分不同的网段

Preamble :在以太网帧前端有大小8 bytes的前导码,能够确保发送端与接收端时钟同步,兼容不同速率的NIC。前导码最后一个byte末尾为11,称为SFD(Start Frame Delimiter),表示后面发送的是以太网帧。
MTU:以太网帧的最大传输单元(MTU)默认为1500,即承载的最大IP数据报文的最大长度为1500 bytes,超过了就要分片传输。1500 + 6(dst mac addr)+ 6(src mac addr)+ 2(type)+4(FCS)= 1518 bytes,所以以太网传输的最大的数据帧为1518 bytes。(MTU可以在系统做设置,在做mellanox适配时,ROCE模式可以通过调大MTU来提升性能)

Ethernet II

抓包软件看不到前导码和FCS,因为是从硬件会去掉前导码和FCS,将以太网帧交给驱动才是我们抓包到的内容

以电脑到路由器的一个包为例,可以看到目的端是华为路由器,源端是我的macbook pro M2 MAX顶配版(狗头),类型表明以太网上一层的协议类型,wireshark已经给出了解析,type:0x0800为IPv4,接下来的事情就交给处理IP的程序去做了。

IEEE802.3

Ethernet II的type字段在此表示以太网帧的长度,此外多了LLC和SNAP字段,上层协议type包含在SNAP字段中

IEEE802.3多了逻辑链路控制层(LLC)和SNAP,LLC部分各字段作用:

  • DSAP(Destination Service Access Point): 使用多协议栈时,告诉接收端在哪个协议栈缓冲区放置该信息
  • SSAP(Source Service Access Point ):发送源,如果设置为AA则表明是SNAP帧
  • CTRL(Control Byte):表明是LLC

SNAP各字段作用:

  • 厂商(Vendor Code):厂家信息,通常设置为全0
  • 类型(Local Code):包含标识上层协议类型的code,该字段保证了对Ethernet II的兼容

VLAN

VLAN在企业中经常用到,用于在不改变物理线路的情况下逻辑上划分网段,虽然如此,但是VLAN逻辑层面控制和物理布线最好有明确整齐的规划,否则会一团糟。

土黄色部分为VLAN帧相对于Ethernet II多出的部分,各字段作用如下:

  • TPID(Tag Protocol IDentifier):0x8100标识是否为VLAN帧(IEEE 802.1q tagged frame)
  • Priority:帧的优先级,3bit分为0~7个等级,值越大优先级越高
  • CFI(Canonical Format Indicator):主要用于令牌环网络和以太网之间的兼容,以太网交换机该字段设置为0

交换机自学

交换机通过查找转发表和数据链路层每个帧的目标MAC地址决定从哪个网口将数据帧发送出去,如果转发表上没有目标MAC地址,则除了接收该帧的端口,其他端口全部转发该帧,主机收到帧后会判断是否发给自己,如果不是则丢弃。

构造转发表实际上是接收到帧时,将交换机端口和该帧的源MAC地址关联。后续的帧如果目标MAC地址存在于表上,则直接从关联的这个端口将包发送出去。

ARP(Address Resolution Protocol)

ARP是根据IP地址找MAC地址的协议,如果数据包中含有源MAC地址和目的MAC地址,则交换机通过查转发表将包从关联端口发送出去,如果此数据包中只有目标IP地址而没有目标MAC地址,就需要广播发送ARP请求,同网段收到包的主机如果不是发给自己丢弃,如果是发给自己则需要进行单播发送ARP应答,告诉请求者我的IP地址和我的MAC地址。

抓包看看ARP的请求包,通过广播发送出去,上层协议使用0x0806(ARP)。ARP的target MAC address全0,还可以看到硬件类型为1(以太网),协议类型为0x800(IPv4),操作为1(请求)

再看看ARP的应答包,单播的方式进行应答,附加了MAC地址

环路问题

当两个交换机将两个局域网连起来的时候就很容易出现环路,因为ARP请求通过广播的形式发出,这样两个局域网都可以收到广播消息,两台交换机都能从两个局域网收到包,也都能向两个局域网发送包,当同一个包从局域网一和局域网二同时发送到交换机时,就破坏了交换机的自学机制,根本无法判断主机到底在哪里,于是就开始了无限的广播,这种现象就是环路问题。

解决环路问题的方法主流的有

  1. 生成树协议:通过优先级向量将各交换机节点组成生成树(Spanning Tree Protocol),网络包根据树的路径传输,避免环路。
  2. 源路由法:记录发出数据的源地址是通过哪个交换机传输的,如果出现了环路,不会重复转发。

学习自:
《趣谈网络协议》刘超
《图解TCP/IP》
《图解HTTP》
《网络是怎样连接的》
https://www.firewall.cx/networking/ethernet/ieee-8023-snap-frame.html

相关推荐
网安情报局17 小时前
除了 CDN,DDoS 攻击还有哪些更有效的防护方式?
网络
Promise微笑18 小时前
2026年国产替代油介损测试仪:油介损全场景解决方案与技术演进
大数据·网络·人工智能
蜡台18 小时前
Python包管理工具pip完全指南-----2
linux·windows·python
Ujimatsu18 小时前
虚拟机安装Debian 13.x及其常用软件(2026.4)
linux·运维·ubuntu
千百元18 小时前
zookeeper启不来了
linux·zookeeper·debian
AnalogElectronic20 小时前
linux 测试网络和端口是否连通的命令详解
linux·网络·php
Edward1111111121 小时前
4月28日防火墙问题
linux·运维·服务器
Rust研习社21 小时前
使用 Axum 构建高性能异步 Web 服务
开发语言·前端·网络·后端·http·rust
灰子学技术21 小时前
Envoy HTTP 流量层面的 Metric 指标分析
网络·网络协议·http
上海云盾-小余21 小时前
海外恶意 UDP 攻击溯源:分层封禁策略与业务兼容平衡方案
网络·网络协议·udp