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

数据链路层 和 ARP协议

以太网

以太网不是网络,而是技术标准,规定了数据链路层和物理层的内容,比如数据链路层的协议格式,再比如物理层数据信号以双绞线传输

以太网帧格式

以太网数据链路层报文又称为以太网帧,也叫mac帧,mac帧有帧头和帧尾

1、源地址、目的地址:源主机网卡mac地址和目的主机网卡mac地址

2、类型:mac帧类型,有三种,分别是 IP(0x0800)ARP(0x0806)RARP(0x8035);

3、CRC:CRC校验码处于帧末尾

4、mac帧的有效载荷长度限制为46字节~1500字节

mac地址

1、mac地址是网卡的物理地址,在网卡出厂时就确定了

2、mac地址是6个字节,一般用16进制加冒号来表示(例如:08:00:27:03:fb:19)

3、ip地址描述的是通信路途的起点和终点,mac地址描述的是通信路途中一个网段的起点和终点

MTU

mtu是数据链路层对有效载荷的最大长度限制,对于ip类型mac帧,那就是交给数据链路层的ip报文长度不能大于1500

1、以太网帧中的有效载荷长度规定最小 46 字节,最大 1500 字节,ARP 数据包的长度是28字节,不 够 46 字节,要在后面补填充18位

2、不同的数据链路层标准的 MTU 是不同的

3、可以通过ifconfig查看网卡接口的mtu值

mtu对ip层的影响

由于数据链路层限制有效载荷长度,所以ip报文最大长度就是1500字节,如果IP报文长度大于该值,那IP层就要对原始ip报文分片,然后将分片ip报文交给数据链路层

分片步骤:

1、将原始IP报文的有效载荷按(mtu-IP报头长度)进行分片,然后每一片有效载荷都封装上ip报头,设置其首部校验和、唯一标识、标志、片偏移等

2、按片偏移顺序交给数据链路层然后封装mac帧发送

一个3000字节的IP报文,IP报头20字节,tcp报头20字节,将2980的ip报文有效载荷按(mtu-IP报头长度)=1480 进行分片,那于是分片大小为1480,1480,20,然后每个有效载荷都加上IP报头,那就是1500,1500,40 长度的分片ip报文,然后按片偏移顺序交给数据链路层封装mac帧报头最后发出就是了

最终正确的分片:

  1. 1500字节:20头 + 1480数据 (MF=1, 偏移=0)

  2. 1500字节:20头 + 1480数据 (MF=1, 偏移=185)

  3. 40字节:20头 + 20数据 (MF=0, 偏移=370)

mtu对传输层协议的影响

对udp协议:

一旦udp报文大小超过(mtu-ip报头长度)=1480,那就在IP层要进行分片,倘若接收端收到的分片不齐,那就要将分片链表丢弃,因为udp没有可靠传输的超时重传和确认应答机制,所以也不会自动重发,必须依靠程序员在应用层做好重传工作

tcp协议:

如果分片的话,一旦一个分片ip报文丢失,那整个分片链表都要丢弃,那其他的报文就白传输了,所以tcp协议采取mss来限制tcp报文的有效载荷长度,这样封装的IP报文就无需分片,即使出现丢包,也只需重传丢的包即可。

MSS是tcp报文的有效载荷最大值,如果超过该值,那ip报文就要分片,其关系是mss = mtu - ip报头长度 - tcp报头长度。tcp进行三次握手建立连接过程中,双方会在SYN包的选项中携带自己的MSS大小了,最后双方会选择较小的一个作为最终的MSS

MTU和MSS的关系

ARP协议

ARP协议是一个介于网络层和数据链路层之间的协议,用于已知下一跳ip的情况下获取其mac地址,RARP是反向ARP,也就是已知mac地址获取ip地址

arp协议的结构

arp协议是基于数据链路层协议工作的,arp报文共28字节,arp类型的mac帧,前有mac头,后有mac尾

1、2字节硬件类型:数据链路层协议类型,如以太网协议,用1表示

2、2字节协议类型:网络层协议类型,如IPV4用0x0800表示

3、1字节硬件地址长度:数据链路层协议地址长度,以太网协议mac地址那就是6字节,直接就是6

4、1字节协议地址长度:网络层协议地址长度,如IPV4地址长度就是4字节,直接就是4

5、2字节op操作类型:1表示arp请求,2表示arp应答

6、剩下的没什么好说,唯一要说的就是利用arp类型mac帧获取下一跳ip的mac地址的过程

数据链路层是先查arp缓存,没有查到下一跳ip的mac地址,那就需要构建arp类型的mac帧,arp报文从头到尾,硬件类型也就是数据链路层协议类型,填个1,协议类型也就是网络层协议类型,填个0x0800,硬件地址长度就是mac地址长度,填个6,协议地址长度就是IPV4地址长度,填个4,op操作类型是arp请求,填个1,源mac地址就是发送端网卡mac地址,目的mac地址是ff:ff:ff:ff:ff:ff广播mac地址,源ip地址就是发送端网卡ip,目的ip就是下一跳ip,然后这是arp报文,然后封装mac帧,源mac地址是发送端网卡mac地址,目的mac地址是ff:ff:ff:ff:ff:ff广播mac地址,帧类型arp类型mac帧,填个0x0806,最后给帧尾加上crc校验码,然后写进网卡发送缓冲区,写网卡TDT寄存器,然后网卡DMA读出,利用HVY转成光电信号发到局域网中,当其他主机接收后,网卡检查mac头的目的mac地址,是广播地址没问题,crc校验码验算过后也没问题,写进网卡接收缓冲区,触发硬件中断,cpu陷入内核,调用网卡驱动,读mac头中帧类型为arp,从而读出完整mac帧,去掉mac头和尾交给arp层,一看目的ip不是自己网卡ip,那就丢包,当目标主机网卡接收后,网卡检查mac头的目的mac地址是广播地址没问题,crc校验码验算过后也没问题,于是将mac帧写进网卡接收缓冲区中,然后触发硬件中断,cpu陷入内核,调用网卡驱动,读mac头中帧类型为arp,从而读出完整mac帧,去掉mac头和尾交给arp层,arp层看目的ip正确,再一看op是1,那就构建arp响应报文,op操作类型就是2表示arp响应,源ip填上,源mac地址也填上,然后根据请求中的字段填写目的ip和目的mac地址,交给数据链路层,填写源和目的mac地址,帧类型还是0x0806 arp帧类型,加上crc校验码,写进网卡发送缓冲区,写TDT寄存器,然后最后发到直连网络中,这次因为有明确目的mac地址,所以是单播,接收到后通过硬件中断将下一跳ip与mac地址映射加进arp缓存中,并唤醒arp缓存等待队列上的进程,然后进程就会得到下一跳ip的mac地址,从而能够封装ip类型mac帧了

查看arp缓存的命令

arp -a

数据链路层的一个概念:单播和广播

如果发送到网卡直连网络中的mac帧,其目的mac地址是广播地址FF:FF:FF:FF:FF:FF,那局域网中的每个主机网卡在收到mac帧后,检查其目的mac地址是广播地址没问题,然后检查crc,之后就写进网卡接收缓冲区,触发硬件中断,然后cpu陷入内核,读出mac帧后去帧头和帧尾,交给上一层,这就是广播,也就是所有的主机不会在数据链路层就丢弃该包(除非crc错了)。

而单播就很好理解了,那就是发送的mac帧其目的mac地址是明确的,那主机网卡接收到mac帧后,看到目的mac地址和自己都不一样,于是直接在数据链路层就丢包

ARP欺骗-成为中间人

其原理就是通过大量发送错误的arp响应报文,使其他主机的arp缓存出错,下一跳ip对应的mac地址变成中间人的mac地址

如上面,主机M通过向同一局域网中的两个主机发送虚假ARP响应,使主机A的arp缓存被弄成了ipR-macM,而路由器R的arp缓存被弄成了ipA-macM,这样当主机A要给R发送数据时,数据链路层封装报头,查arp缓存,下一跳ip地址ipR对应的mac地址是macM,然后就向主机M进行了单播,然后主机M再伪造报文发给路由器R,整个过程通信双方全然不知,这就是中间人攻击

http://www.lryc.cn/news/602668.html

相关文章:

  • MQTT的原理
  • 华为Huawei 6730交换机查看接口收发光命令 transceiver
  • 9.c语言常用算法
  • Anaconda创建环境报错:CondaHTTPEFTOT: HTTP 403 FORBIDDEN for url
  • Linux中配置haproxy
  • gitlab 在线合并分支a-分支b,解决冲突后,反向合并分支b-分支a
  • 数据结构——图(二、图的存储和基本操作)
  • 人机交互打字游戏
  • Leetcode——11. 盛最多水的容器
  • 力扣-39.组合总和
  • PhpStorm + PHP8.1 + XDebug3 实现断点调试(亲测可用)
  • 面试问题收集——卷积神经网络
  • 从 “看天吃饭” 到 “精准可控”:边缘计算网关如何引爆智慧农业种植变革?
  • 计算机毕设分享-基于SpringBoot的健身房管理系统(开题报告+前后端源码+Lun文+开发文档+数据库设计文档)
  • 服务器多线主要是指什么?
  • 服务器查日志太慢,试试grep组合拳
  • 数据中心入门学习(四):服务器概述与PCIe总线
  • 数据结构面经
  • 坚鹏:AI智能体培训是知行学成为AI智能体创新应用引领者的基础
  • 【Spring Boot 快速开发】一、入门
  • AI技术落地的综合实战经验报告,结合最新行业案例、代码示例及可视化图表,系统阐述AI在开发提效、算法优化与行业应用中的实践路径。
  • Python将Word转换为Excel
  • EXCEL 怎么把汉字转换成拼音首字母
  • 根据发热量确定选择TEC制冷片测评分析学习
  • Open CV图像基本操作可莉版
  • IP协议解析:从寻址到路由
  • Vue3判断对象是否为空方法
  • 判断回文链表【两种O(n)时间复杂度】
  • 10_opencv_分离颜色通道、多通道图像混合
  • Netty中trySuccess和setSuccess的区别