当前位置: 首页 > article >正文

【网络】数据链路层

目录

以太网

以太网的帧格式

MSS

交换机

MTU对UDP的影响

ARP协议


数据链路层是软件层的最底层协议,它的下面就是物理层,那么下面我们就来介绍一下它负责在网络通信中完成什么工作

我们前面说的IP协议是解决如何进行跨网络转发的,也就是转发时的路径选择问题。比如一个主机A要跨公网转发到主机B,先不要说A如何到B,我们先说A如何到距离A最近的路由器(与A处于同一个子网,负责转发A的消息的路由器)的,这就需要用到数据链路层

并且跨网络转发到目标主机本质就是一个报文经历了无数个子网

所以数据链路层是解决同一个网段之间的主机的如何通信的问题的,即局域网通信

以太网

我们目前应用非常广泛的局域网就是以太网,就是我们平常的拉网线

“以太网”不是一种具体的网络,而是一种技术标准

以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN(WIFI属于无线LAN的一种实现方式)等

每个网卡都有自己的MAC地址,我们可以通过下面的命令看到

ether就是以太的意思,MAC地址占6个字节

以太网的帧格式

下面是以太网的帧格式

我们可以看到数据大小的范围是46-1500,这个1500就是我们之前说的mtu(Maximum Transmission Unit最大传输单元),也正是有mtu的存在,tcp才不会将滑动窗口中的数据一次性全发,而是分批次。

如果IP层给的数据少于46个字节我们不用担心,数据链路层会自动填充。填充后也不用担心找不到IP层有效载荷的结尾,因为IP协议报头字段中不仅要四位首部长度,还有16位总长度

那么以太网发出的报文报头和有效载荷如何分离呢?就是通过14个字节的固定长度的报头

如何分用(向上交付)呢?就是通过报头中的类型字段,不同的数字表示上层是IP还是ARP还是RARP(ARP和RARP也属于数据链路层但是位于MAC帧上层)

MSS

不分片,TCP能发送的单次最大长度是多少呢?也就是说IP报头+TCP报头+TCP有效载荷=1500字节

那么TCP有效载荷其实最大就是1460字节,这个我们叫做MSS(Maximum Segment Size 最大段尺寸)

其实TCP进行三次握手时,双方就会交换这个尺寸,并且用两者间最小的那个作为最终的MSS

所以局域网进行通信就是数据链路层收到一个报文后看报文中的MAC地址是不是自己,不是自己就可以丢弃了,如果是自己在交给上层IP,由IP决定报文中IP地址是否相同,如果相同就交TCP,不同就证明还要继续传,此时再交给数据链路层让它封装发送

以太网同一时刻只能是一台主机发消息,否则信息会碰撞,影响数据。如果消息碰撞那么进行重发,所以不止有TCP会重发

所以我们可以把局域网当成临界资源,同一时刻只允许一台主机访问;像令牌环网就更明显了,令牌就相当于一把锁,只有持有锁的主机才可以发消息

交换机

下面我们来介绍一下交换机,交换机是在局域网中负责转发和划分碰撞域的设备

我们知道局域网中我们要尽量避免消息碰撞,于是我们可以引入交换机这个设备,它的大致工作图像下面这样

一开始交换机其实并不知道各个主机的存在,交换机也不会影响消息的转发,随着消息的不断发送交换机的左右接口慢慢认识到了左边和右边都有哪些主机存在,于是之后比如A向G发消息,那么交换机还是要把消息转发到右边的,但是如果A给C发消息,交换机就不会把消息发送到右边,就减小了消息碰撞的概率

MTU对UDP的影响

一旦UDP携带的数据超过1472(1500-20(IP首部)-8(UDP首部)),那么就会在网络层分成多个IP数据包

者多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败,那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了

ARP协议

上面说数据链路层是负责子网内转发,但事实是我们并不知道以太网帧格式的目的MAC地址,所以ARP就是一种协议,负责把IP地址转成IP对应的MAC地址

ARP也属于数据链路层但是位于MAC帧上层,它属于一个管理的协议,并不向上交付

ARP采取的方式是以广播的形式向局域网内的主机发送请求,然后与目标IP相符的主机会发回它自己的MAC地址,就是通过这样的简单的形式就可以拿到目标主机的MAC地址

我们用arp -a可以查到Linux和Windows中的arp缓存,就是IP地址和MAC地址的对应关系

这个缓存只会缓存一段时间,因为其实MAC地址也会更新,比如换网卡


http://www.kler.cn/a/382079.html

相关文章:

  • [Unity Shader][图形渲染] Shader数学基础11 - 复合变换详解
  • 反序列化为啥可以利用加号绕过php正则匹配
  • Mac上详细配置java开发环境和软件(更新中)
  • 腾讯云智能结构化OCR:以多模态大模型技术为核心,推动跨行业高效精准的文档处理与数据提取新时代
  • linux系统编程(五)
  • ASP.NET|日常开发中数据集合详解
  • 基于Qt的独立线程创建与多线程执行实验Demo
  • JAVA读取doc,docx转PDF通过vue展示
  • 基于Multisim拔河比赛游戏+计分电路(含仿真和报告)
  • 华为 HarmonyOS NEXT 原生应用开发:【封装正则API】在原生鸿蒙中使用正则表达式校验登录注册模块(邮箱、密码、手机号)校验
  • 微积分复习笔记 Calculus Volume 1 - 4.7 Applied Optimization Problems
  • WordPress 中最佳的维护服务:入门级用户指南
  • 【机器学习导引】ch4-决策树
  • copyq禁止访问网络(ubuntu cgroup)
  • 发不了Science?那是因为你不会画Science风格的配图
  • 静态数据区,堆,栈
  • linux动态库与静态库
  • 从底层技术到实际应用:Claude与ChatGPT谁更适合学术写作?
  • Redis学习:BitMap/HyperLogLog/GEO案例 、布隆过滤器BloomFilter、缓存预热+缓存雪崩+缓存击穿+缓存穿透
  • 20241106,LeetCode 每日一题,用 Go 实现整数回文数判断
  • Redis(2):内存模型
  • java:题目:用Java实现简单的自取取款操作
  • Leetcode 第 422 场周赛题解
  • Flutter中有趣的级联语法
  • 蓝桥杯真题——三角回文数(C语言)
  • PCL 点云配准 精度评价指标均方根误差(RMSE)