Linux网络---数据链路层

数据链路层的作用?

网络传输不是直接从源主机发送到目的主机,其中要经过很多个子网,而数据链路层的作用就是进行子网通信。

一、以太网

1.以太网帧格式

源地址和⽬的地址是指⽹卡的硬件地址(也叫MAC地址), ⻓度是48位,是在⽹卡出⼚时固化的;
帧协议类型字段有三种值,分别对应IP、ARP、RARP;
帧末尾是CRC校验码。

2.认识MAC地址

MAC地址用来识别数据链路层中相连的节点;

长度为48位,即6字节,一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19);

MAC地址在出厂的时候就确定了,不能修改,mac地址通常是唯一的。

3.理解MAC地址和IP地址

IP地址是你的开始出发位置和最终要到达的位置,而MAC地址是你在前往最终终点过程中的所在位置和下一步要去的位置,以到达终点。

举个例子:你在广东,要去北京,广东就是源IP地址,北京就是目的IP地址;这中间要经过湖南、湖北、河南、河北,比如说你现在到了河南、下一个目的地是河北,河南就是源MAC地址,河北就是目的MAC地址,同样的你在湖南,要到湖北,湖南就是源MAC地址,湖北就是目的MAC地址。

4.MTU

MTU相当于发快递时对包裹尺⼨的限制. 这个限制是不同的数据链路对应的物理层, 产⽣的限制.
• 以太⽹帧中的数据⻓度规定最⼩46字节,最⼤1500字节,ARP数据包的⻓度不够46字节,要在后⾯补填充位;
• 最⼤值1500称为以太⽹的最⼤传输单元(MTU),不同的⽹络类型有不同的MTU;
• 如果⼀个数据包从以太⽹路由到拨号链路上,数据包⻓度⼤于拨号链路的MTU了,则需要对数据包进⾏分⽚(fragmentation);
• 不同的数据链路层标准的MTU是不同的;

①MTU对IP协议的影响

由于数据链路层MTU的限制, 对于较⼤的IP数据包要进⾏分包.
• 将较⼤的IP包分成多个⼩包, 并给每个⼩包打上标签;
• 每个⼩包IP协议头的 16位标识(id) 都是相同的;
• 每个⼩包的IP协议头的3位标志字段中, 第2位置为0, 表⽰允许分⽚, 第3位来表⽰结束标记(当前是否是最后⼀个⼩包, 是的话置为1, 否则置为0);
• 到达对端时再将这些⼩包, 会按顺序重组, 拼装到⼀起返回给传输层;
• ⼀旦这些⼩包中任意⼀个⼩包丢失, 接收端的重组就会失败. 但是IP层不会负责重新传输数据;

②MTU对UDP协议的影响

• ⼀旦UDP携带的数据超过1472(1500 - 20(IP⾸部) - 8(UDP⾸部)), 那么就会在⽹络层分成多个IP数据报.
• 这多个IP数据报有任意⼀个丢失, 都会引起接收端⽹络层重组失败. 那么这就意味着, 如果UDP数据报在⽹络层被分⽚, 整个数据被丢失的概率就⼤增加了.

③MTU对TCP协议的影响

• TCP的⼀个数据报也不能⽆限⼤, 还是受制于MTU. TCP的单个数据报的最⼤消息⻓度, 称为
MSS(Max Segment Size);
• TCP在建⽴连接的过程中, 通信双⽅会进⾏MSS协商.(包含在选项中,选择两个MSS中较小的MSS作为双方的MSS)
• 最理想的情况下, MSS的值正好是在IP不会被分⽚处理的最⼤⻓度(这个⻓度仍然是受制于数据链路层的MTU).
• 双⽅在发送SYN的时候会在TCP头部写⼊⾃⼰能⽀持的MSS值.
• 然后双⽅得知对⽅的MSS值之后, 选择较⼩的作为最终MSS.
• MSS的值就是在TCP⾸部的40字节变⻓选项中(kind=2);

5.局域网传输

主机A为什么要把数据交给主机E?

路由决定的!
局域网就是一个碰撞域,一个时刻只能发送一个数据帧,所以使用以太网的时候,使用时间越短越好。

那么主机A发送数据帧越长越好还是越短越好?

数据帧不能太长,也不能太多,单个数据帧既不能太长也不能太短。

在对网络层的讲解中,有一个问题,数据帧为什么不能超过1500?

其实这是科学家根据测试得出的结论,数据长度46~1500字节,发生碰撞的概率最小。

如上图所示,我们从B主机发送数据到C主机,我们只知道C主机的IP地址,不知道它的MAC地址,那怎么给C主机发送数据帧呢?

所以这里引入了一个局域网协议,叫做ARP协议,它是一个地址解析协议,能够将IP转换成对应的MAC地址。

二、ARP协议

硬件类型:硬性规定为1;

协议类型:协议类型指要转换的地址类型,0x0800为IP地址;

硬件地址长度:硬件地址⻓度对于以太⽹地址为6字节;

协议地址长度:协议地址⻓度对于和IP地址为4字节;

op:op字段为1表示ARP请求,op字段为2表示应答;

发送端以太网地址:主机A的以太网地址;

发送端IP地址:主机A的IP地址;

目的以太网地址:不知道,填写全FFFFF...

目的IP地址:主机E的IP地址

ARP协议报文什么时候发送?

  • ARP 是独立协议包不是每个 IP 报文都带 ARP 头

  • 同一目标 IP:通常只发一次 ARP,结果缓存复用。

  • 只有缺缓存、缓存过期、MAC 变化时,才重新发 ARP。

模拟ARP协议报文发送过程?

  1. 先设定场景(同一局域网)
  • 主机 A(发送方)

    • IP:192.168.1.10

    • MAC:AA:AA:AA:AA:AA:AA

  • 主机 B(目标)

    • IP:192.168.1.20

    • MAC:BB:BB:BB:BB:BB:BB

  • 广播 MAC:FF:FF:FF:FF:FF:FF

  1. 第一步:主机 A 发送 ARP 请求报文(广播)

1)以太网帧头部(14 字节)

  • 目的 MAC:FF:FF:FF:FF:FF:FF(广播)

  • 源 MAC:AA:AA:AA:AA:AA:AA

  • 类型:0x0806(表示这是 ARP 报文)

2)ARP 报文头部(28 字节)

硬件类型:1(以太网)协议类型:0x0800(IPv4)硬件地址长度:6(MAC 长度)协议地址长度:4(IP 长度)操作码(Opcode):1(1 = 请求,2 = 响应)

发送端 MAC:AA:AA:AA:AA:AA:AA发送端 IP:192.168.1.10

目标 MAC:00:00:00:00:00:00 (还不知道,填空)目标 IP:192.168.1.20


  1. 第二步:局域网所有主机收到广播,只有 B 匹配 IP

主机 B 检查:

  • 目标 IP = 自己 IP → 处理该 ARP 请求其它主机:

  • 目标 IP≠自己 → 直接丢弃


  1. 第三步:主机 B 发送 ARP 响应(单播回复)

1)以太网帧头部

  • 目的 MAC:AA:AA:AA:AA:AA:AA(直接发给 A,不再广播)

  • 源 MAC:BB:BB:BB:BB:BB:BB

  • 类型:0x0806(ARP)

2)ARP 报文头部

硬件类型:1协议类型:0x0800硬件地址长度:6协议地址长度:4操作码:2(表示这是 ARP 响应)

发送端 MAC:BB:BB:BB:BB:BB:BB ← B 的 MAC发送端 IP:192.168.1.20

目标 MAC:AA:AA:AA:AA:AA:AA ← A 的 MAC目标 IP:192.168.1.10


  1. 第四步:主机 A 收到响应,更新 ARP 缓存

A 从报文中取出:192.168.1.20 → BB:BB:BB:BB:BB:BB写入本地 ARP 表,之后发 IP 报文直接用这个 MAC,不再发 ARP。

相关推荐
楼田莉子2 小时前
Linux学习:线程的同步与互斥
linux·运维·c++·学习
小草儿7992 小时前
PG18备份恢复
linux·运维·服务器
Mikowoo0072 小时前
KaLi系统基本使用
运维·服务器
aaaffaewrerewrwer2 小时前
2026年常用HEIC转JPG在线工具推荐(支持批量转换)
服务器·图像处理
运维管理2 小时前
H3C交换机的Hybrid端口-学习
网络
笑口常开xpr3 小时前
Linux 命 令 界 的 “王 炸 组 合”!Gitee 提 交 + 权 限 控 制 + 热 键 神 操,学 会 直 接 霸 屏 终 端!
linux·gitee·权限
Starry_hello world3 小时前
Linux http代码
linux·运维·http
开开心心_Every5 小时前
全屏程序切换工具,激活选中窗口快速切换
linux·运维·服务器·pdf·ocr·测试用例·模块测试
dust_and_stars6 小时前
APT vs Snap vs Flatpak 核心对比表
运维·服务器·数据库