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

【网络】TCP/IP 五层网络模型:数据链路层

文章目录

  • 认识以太网
  • mac 地址
    • mac 地址和 IP 地址的区别
  • 类型
    • ARP 协议
  • MTU

日常开发主要是应用层,传输层和应用层密切交互,传输层用到的也不少。网络层以及再往下,日常开发就涉及到的非常少了

认识以太网

插网线的上网方式

80211 是无线 WiFi 上网方式

image.png

mac 地址

  • 一般一个网卡,在出场的时候,mac 地址就被分配好了,就写死了(不能改了)

  • mac 地址也可以作为设备的身份标识

比如,你花钱买外挂,一般的外挂都是“绑定机器”的(防止你进行二次售卖),这就可以通过记录设备的 mac 地址来实现

  • 当你买了这个挂之后,人家就会在服务器上记录你这个设备的 mac 地址
  • 如果你之后给别人登录这个程序,被发现 mac 地址不一样,就没法使用

mac 地址和 IP 地址的区别

mac 地址使用 6 个字节,IP 地址 4 个字节

  • 空间范围比 IP 地址大了 6w 多倍
  • mac 地址当前仍然可以给每个设备都分配一个唯一的 mac 地址

  1. mac 地址使用在数据链路层,用来实现两个设备之间的数据转发——微观;
    IP 地址使用在网络层,立足于整个转发流程,进行路经规划——宏观

理论上来说,搞一套地址也能完成宏观和微观地址上的所有工作,IP 地址和 mac 地址留一组就可以了,但实际上两个都留下来了,分配了不同的任务(不是技术问题,而是历史遗留问题)。

IP 地址和 mac 地址是两伙人,在同一个时间段各自独立提出的。两伙人都觉得自己的东西好,于是大家就综合一下,你这个地址负责这块;你那块地址负责那块就可以了

举个栗子:西安到吉林省白城市安广镇
第一步:路径规划(网络层)
西安—>北京—>长春—>白城—>安广
西安—>北京—>沈阳—>白城—>安广
西安—>长春—>白城—>安广

第二步:实施(选择第一条线路)

  1. 坐飞机
    IP:西安;目的 IP:安广;
    mac:西安;目的 mac:北京
  2. 坐高铁
    IP:西安;目的 IP:安广
    mac:北京;目的 mac:长春
  3. 坐大巴
    IP:西安;目的 IP:安广
    源 mac:长春;目的 mac:白城
  4. 坐出租车
    IP:西安;目的 IP:安广
    mac:白城;目的 mac:安广
    .
    上述场景不考虑 NAT,源 IP 和目的 IP 始终都是固定的。以太网数据帧里面的 mac 地址,会随着转发的过程,时刻发生改变(每经过一个交换机/路由器就会产生上述变化),牢牢抓住了下一个数据要往哪传输这样的要点

类型

描述了载荷中是什么样的数据
image.png|515

  • 0800(十六进制),IP 数据报
  • 0806ARP 报文
  • 0835RARP 报文

后俩不传输业务数据,而是给转发功能提供辅助的措施

ARP 协议

ARP 数据报/协议,可以视为是让当前设备能获取到周围设备的 IP 地址和 mac 地址之间的映射关系

在 IP 协议的路由转发过程中,都是拿着 IP 地址来进行查路由表的操作的,得到的是“网络接口”(抽象的概念)。更具体的的话,就需要知道传输给目标对象的 mac 地址,这个环节中就涉及到 IP 地址到 mac 地址的转换。ARP 就是用来建立上述的映射关系的

当前设备接入网络的时候,就会往广播地址发送 ARP 报文。收到 ARP 请求的设备就会返回 ARP 响应,响应中就会告知自己的 IP 和 mac

MTU

数据链路层数据帧的最大载荷长度为 1500 字节,相当于 1.5kb,把这个数字称为 MTU

MTU 是和硬件直接相关的,硬件不同,所对应的 MTU 也可能是不一样的

  • 不同的硬件设备硬件设备,就对应到了不同的数据链路层协议,就对应到了不同的 MTU

以太网,其实是很短的,只有 1.5kbIP/UDP 至少还是 64kb

  • 此处 MTU 的限制,就会对上层协议产生直接影响
  • IP 协议能拆包组包,实际上更多的是应对 MTU 的限制(到 1500 的时候就被砍了,远远不到 64kb 的时候)
  • 当一个 IP 数据报,达到 1500 以上的时候,就会自动拆包了

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

相关文章:

  • LeetCode 86.分隔链表
  • 如何使用ffmpeg命令行进行录屏
  • vue2.7.14 + vant + vue cli脚手架转vite启动运行问题记录
  • SHELL脚本(Linux)
  • 继承和多态(上)
  • 【Golang】Channel的ring buffer实现
  • 苍穹外卖学习笔记(五)
  • 高级java每日一道面试题-2024年9月19日-框架篇[Mybatis篇]-说一下mybatis的一级缓存和二级缓存?
  • Android对象池的深入理解和使用
  • 7.搭建个人金融数据库之快速获取股票列表和基本信息!
  • PowerShell install 一键部署Oracle12c
  • Guava中Preconditions校验
  • 数据安全治理
  • JVM 字节码与 JIT 编译详解
  • 云原生信息安全:筑牢数字化时代的安全防线
  • Vue3:mitt实现组件通信
  • Three.js 3D人物漫游项目(下)
  • 统信服务器操作系统a版e版【dde桌面限制登录次数】介绍
  • 大数据处理技术:HBase的安装与基本操作
  • python画正方形、平行四边形、六边形、五角星、风车(四个半圆)
  • ansible远程自动化运维、常用模块详解
  • SpringSecurity -- 入门使用
  • 网络安全-利用 Apache Mod CGI
  • antd table 可展开行的多种控制
  • 相亲交易系统源码详解与开发指南
  • 2024年华为杯数学建模E题-高速公路应急车道启用建模-基于YOLO8的数据处理代码参考(无偿分享)