Linux--数据链路层(mac&&arp)

目录

1.认识以太网

2.以太网帧格式

3.模拟一次局域网通信(交换机)

[4.认识 MAC 地址](#4.认识 MAC 地址)

[对比理解 MAC 地址和 IP 地址](#对比理解 MAC 地址和 IP 地址)

5.认识MTU

[MTU 对 IP 协议的影响](#MTU 对 IP 协议的影响)

[MTU 对 UDP 协议的影响](#MTU 对 UDP 协议的影响)

[MTU 对于 TCP 协议的影响](#MTU 对于 TCP 协议的影响)

6.ARP协议

[ARP 协议的作用及原理](#ARP 协议的作用及原理)

[ARP 数据报的格式](#ARP 数据报的格式)


1.认识以太网

数据链路层:用于两个设备(同一种数据链路节点(同一局域网))之间进行传递

  • "以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
  • 例如以太网中的网线必须使用双绞线; 传输速率有 10M, 100M, 1000M 等;
  • 以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN 等;

2.以太网帧格式

以太网的帧格式如下所示:

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

6位目标地址,源地址,mac地址就是6字节

1.如何解包?

定长报头:前10字节和后4字节去掉,剩下的就是数据了。

2.如何分用?

类型字段:表示上层是什么协议,这样就能很好的把数据交给上层

3.模拟一次局域网通信(交换机)

下面就是一个局域网,有各种主机,每个主机都有自己的mac地址。在发送数据的时候,(src会带上自己的mac地址,dst是目的机的mac地址,data:发送的数据)会将发送的通过数据网络协议栈变成数据帧,然后通过局域网发送到局域网中,局域网的主机都能收到,主机会通过mac地址判断是不是自己的消息,如果是自己的消息,就会接收处理消息,最终以同样的方式发送回去。这就采用mac地址在局域网中进行通信了。

  • 以太网中, 任何时刻, 只允许一台机器向网络中发送数据
  • 如果有多台同时发送, 会发生数据干扰, 我们称之为数据碰撞
  • 所有发送数据的主机要进行碰撞检测和碰撞避免

如果多个主机在局域网中,是不可避免的。 任何时刻, 只允许一台机器向网络中发送数据,那么在系统观念当中,局域网其实是一种临界资源!如果发送碰撞了就进行检查,重发,以维持这个通信

  • 没有交换机的情况下, 一个以太网就是一个碰撞域
  • 局域网通信的过程中, 主机对收到的报文确认是否是发给自己的, 是通过目标mac 地址判定

如果存在交换机的话,比如第一次发送数据,A向F进行发送,由于交换机是存在两个端口的,那么i0端口就会记录A的mac地址,此时交换机就知道A在i0一侧,但他此时不知道F在哪侧,交换机会把消息转发到i1侧的主机,若此时每台主机都进行了发送消息,那么交换机就会知道每台主机的位置。若此时A向E发送了消息,F向C发送了消息,那么交换机不会把交给E的消息给i1一侧了,交给F的消息也不会被转发给i0一侧了,这样就避免了两台主机的数据碰撞了,因为他们两个的数据在不同的区域内,所以交换机的作用就是划分碰撞域,以提高网络性能和可靠性

4.认识 MAC 地址

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

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

• 在网卡出厂时就确定了, 不能修改. mac 地址通常是唯一的(虚拟机中的 mac 地址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址

对比理解 MAC 地址和 IP 地址

• IP 地址描述的是路途总体的 起点 和 终点;

• MAC 地址描述的是路途上的每一个区间的起点和终点;

5.认识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 的值正好是在 IP 不会被分片处理的最大长度(这个长度

仍然是受制于数据链路层的 MTU).

• 双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS 值.

• 然后双方得知对方的 MSS 值之后, 选择较小的作为最终 MSS.

• MSS 的值就是在 TCP 首部的 40 字节变长选项中(kind=2);

6.ARP协议

虽然我们在这里介绍 ARP 协议, 但是需要强调, ARP 不是一个单纯的数据链路层的协

议, 而是一个介于数据链路层和网络层之间的协议

ARP 协议的作用及原理

报文要交付给下一跳结点,必须知道下一跳结点的mac地址,因为要封装mac帧;我们可能只知道目标主机的IP地址,并不清楚目标主机的mac地址。因此我们有将IP地址转成mac地址的作用--ARP协议。

  • 在网络通讯时,源主机的应用程序知道目的主机的 IP 地址和端口号,却不知道目的主机的硬件地址;
  • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
  • 因此在通讯前必须获得目的主机的硬件地址;

主机A是路由器,主机B是该局域网内的一台普通主机

  • 源主机发出 ARP 请求,询问"IP 地址是 192.168.0.1 的主机的硬件地址是多少"并将这个请求广播到本地网段(以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示广播);(将数据帧封装好)
  • 目的主机接收到广播的 ARP 请求,发现其中的 IP 地址与本机相符,则发送一个ARP 应答数据包给源主机,将自己的硬件地址填写在应答包中;(这是在arp层进行处理的,而不是在mac帧层进行处理的,收到的主机要先看是arp应答还是arp请求再去对比IP地址),等收到主机B的应答后,主机A就知道了主机B的mac地址。主机A既知道主机B的IP地址,又知道主机B的mac地址,此时就能把封装的mac帧交给主机B了,实现正常的通信
  • 每台主机都维护一个 ARP 缓存表,可以用 arp -a 命令查看。 缓存表中的表项有过期时间(一般为 20 分钟),如果 20 分钟内没有再次使用某个表项,则该表项失效,下次还要发 ARP 请求来获得目的主机的硬件地址。

ARP 数据报的格式

  • 注意到源 MAC 地址、 目的 MAC 地址在以太网首部和 ARP 请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
  • 硬件类型指链路层网络类型,1 为以太网;
  • 协议类型指要转换的地址类型,0x0800 为 IP 地址;
  • 硬件地址长度对于以太网地址为 6 字节;
  • 协议地址长度对于和 IP 地址为 4 字节;
  • op 字段为 1 表示 ARP 请求,op 字段为 2 表示 ARP 应答。
相关推荐
三坛海会大神5555 分钟前
计算机网络参考模型与子网划分
网络·计算机网络
云卓SKYDROID22 分钟前
无人机激光测距技术应用与挑战
网络·无人机·吊舱·高科技·云卓科技
Lovyk1 小时前
Linux 正则表达式
linux·运维
Fireworkitte2 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
sword devil9003 小时前
ubuntu常见问题汇总
linux·ubuntu
ac.char3 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos
淮北也生橘124 小时前
Linux的ALSA音频框架学习笔记
linux·笔记·学习
iナナ6 小时前
传输层协议——UDP和TCP
网络·网络协议·tcp/ip·udp
华强笔记7 小时前
Linux内存管理系统性总结
linux·运维·网络
十五年专注C++开发8 小时前
CMake进阶: CMake Modules---简化CMake配置的利器
linux·c++·windows·cmake·自动化构建