【计算机网络】数据链路层_以太网帧在数据链路层怎么路由

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文


两个问题

1. 报头和有效载荷如何分离?

MAC帧的报头是固定长度,即前14字节为报头,后续为有效载荷

2. 有效载荷如何向上交付?

根据报头的类型字段,0800代表IP协议;0806代表ARP请求/应答;0835代表RARP请求/应答。以此交付对应的上层

三. 局域网通信原理

假设有如下子网,有若干设备

如果主机A想和主机D通信,那么MAC帧的报头字段的源地址为macA,目的地址为macD。如果有效载荷为ip数据包,那么类型为0800

数据帧发送到网络中,所有该局域网的主机都会收到该数据帧,但其数据链路层解包发现目的地址不是自己的时候,会直接在数据链路层丢弃该报文。如此就只有主机D会解包,提取有效载荷,向上交付ip数据包

补充:网卡可以设置混杂模式,不论是不是发给自己的数据帧,都向上交付,这就做到了抓包

如此,同一时刻,局域网中只允许有一个数据帧传输。如果多个数据帧同时传输,则会产生数据碰撞,导致数据重叠错误。为此需要进行碰撞避免——媒体访问控制

媒体访问控制

在共享介质的网络中,多个设备可以同时发送数据,但如果两个设备在同一时间发送数据,会导致碰撞,造成数据丢失和网络拥塞。

为了避免碰撞,数据链路层采用了一些技术和协议。最常见的就是CSMA/CD和CSMA/CA


CSMA/CD(载波监听多点接入/碰撞检测)

  • CSMA/CD协议用于以太网等优先局域网中。在发送数据之前,设备会先监听信道,确保没有其他设备同时发送数据。
  • 如果两个设备在同一时间发送数据,会发生碰撞。此时,检测到碰撞的设备会发送一个特殊的信号来通知其他设备,并且会采用一种退避算法来随机延迟一段时间后重新尝试发送数据,以减少再次发生碰撞的可能性。
  • CSMA/CD适用于有线网络,因为在这种情况下可以快速检测到碰撞并采取相应的措施。然而,在现代的以太网中,随着全双工通信和交换式以太网的普及,CAMA/CD已经不再被广泛使用

CSMA/CA(载波监听多点接入/碰撞避免)

  • CSMA/CA协议主要用于802.11无线局域网中。由于无线信道的特性,碰撞检测不如有线网络那样可靠,因此CMSA/CA采取碰撞避免的策略
  • 在CSMA/CA中,设备在发送数据之前同样会监听信道,确保信道空闲。然而,在发送数据之前,设备还会使用一种称为“网络分配矢量”(NAV)的机制来预测信道的使用情况。并且采用随机退避算法来避免与其他设备的数据碰撞。
  • CSMA/CA适用于无线网络,因为它能够在一定程度上避免无线信道上的碰撞,提高了无线网络的效率和可靠性

交换机

  • 交换机目前是在以太网中使用最广泛的互连设备
  • 工作在数据链路层(也包括物理层)
  • 交换机对数据帧的转发是根据其MAC地址进行转发的
  • 使用交换机做为互连设备的以太网,称为交换式以太网,交换机可以根据MAC地址过滤数据帧,即隔离碰撞域

  • 交换机的每一个接口都是一个独立的碰撞域
  • 交换机隔离碰撞域但不隔离广播域(VLAN除外)

交换机左侧的主机也可以和右侧的通信,交换机负责数据转发,如果左侧出现数据碰撞,交换机可以防止数据碰撞影响右侧的网络

MTU

如果数据帧太长,那么在碰撞域中存在的时间就相对更长,那么碰撞的概率就更大。但数据帧太小,发送效率又低,所以数据帧的长度需要综合考虑

所以以太网帧中的数据长度规定最小46字节,最大1500字节。所以数据帧最短为60字节,最长为1514字节。如果ARP数据包的长度不够46字节,要在后面填补

最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU大小


MTU对IP协议的影响

由于数据链路层MTU的限制,对于较大的IP数据包要进行分片

  • 将较大的IP数据包分成多个分片,并给每个分片打上标签
  • 每个分片的IP协议报头的16位标识(id)都是相同的
  • 每个分片的IP协议头的3位标志字段中,第2位为1,表示允许分片,为0表示禁止分片;第三位来表示"更多分片",是结束标记(当前是否是最后)。如果为0表示是最后一个分片,为1则不是最后一个分片
  • 到达对端时再将这些分片,按顺序重组,拼装到一起返回给传输层
  • 一旦这些分片中的任意一个分片丢失,接收端的重组都会失败,但IP层不负责重传,所以直接由TCP层进行超时重传

详细分片参看【计算机网络】网络层——IP协议的分片和组装部分


查看硬件地址和MTU大小

Linux下使用ifconfig命令

四. ARP协议

ARP协议并不是数据链路层的协议,而是介于数据链路层和网络层之间的协议

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系

  • 在网络通信时,源主机的应用程序知道目的主机的IP地址和端口号,但不知道目的主机的MAC地址
  • 数据帧首先是被网卡接收的,如果接收的数据帧的MAC地址与本主机不符,则直接丢弃。
  • 因此在通信前必须获得目的主机的MAC地址

  • 源主机发出ARP请求,询问“IP地址为192.168.0.1的主机的MAC地址是多少”,并将这个请求广播到本地网络(以太网帧首部的MAC地址填FF:FF:FF:FF:FF:FF代表广播)。网卡收到广播的ARP请求,需要向上交付,不过是交付给ARP协议,而不是数据链路层
  • 目的主机接收到广播的ARP请求,发现其中的IP地址与本主机相符,则发送一个ARP应答数据帧给源主机,将自己的MAC地址填写在应答数据帧中
  • 每个主机都维护一个ARP缓存表,可以使用arp -a 命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的MAC地址


ARP数据报格式

  • 前14字节为以太网固定长度报头
  • ARP请求/应答为固定长度28字节
  • 硬件类型指数据链路层网络类型,1为以太网
  • 协议类型指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度对于以太网地址为6字节
  • 协议地址长度对于IP地址为4字节
  • op字段为1表示ARP请求,为2表示ARP应答
  • 注意到源MAC地址,目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层是以太网的情况是多余的,但如果链路层是其他类型的网络则有可能是必要的

ARP协议过程

有如下局域网

如果主机A想和主机B通信,但第一次通信主机A不知道主机B的MAC地址,因此需要广播ARP请求来获取主机B的MAC地址。ARP请求如下:

因为不知道主机B的MAC地址,所以使用广播,广播的ARP请求,目的MAC地址为全F(FF:FF:FF:FF:FF:FF)

局域网内的所有主机都会收到这个ARP请求,网卡识别目的MAC地址为全F,广播数据,需要向上交付,再根据帧类型识别是ARP请求/响应。所以向上交付给ARP协议。

ARP协议先看op字段,为ARP请求,再看目的IP地址,除主机B外,其他主机发现不是给自己的,就在ARP层丢弃报文,只有主机B会返回ARP响应,报文如下:

主机A收到ARP响应后,还会将主机B的IP地址和MAC地址的映射关系缓存在ARP缓存表中,下次访问主机B时会根据IP地址查表,有则使用,没有则先发送ARP请求获取MAC地址。

五. 跨网络通信流程

  1. 应用层:应用程序向操作系统发出请求,例如在浏览器中输入网址——域名解析DNS,获取目标服务器的IP地址。

  1. 传输层:操作系统将应用程序的请求封装成传输层数据段(Segment),使用默认的端口号来建立与服务器的连接(三次握手),例如,HTTP为80,HTTPS为443。通常使用TCP协议来提供可靠的数据传输

  1. 网络层:操作系统将传输层的数据段封装成IP数据包(Packet),并加上源IP地址和目标IP地址。计算机A需要先判断目标主机是否在同一局域网:
  • 子网掩码必须相同,不同肯定不在同一局域网,再将目标IP和本主机IP分别和子网掩码按位与,结果相同即再同一局域网
  • ARP(地址解析协议),如果通过发送ARP请求可以直接获取到响应,说明在同一局域网网

两个方法二选一即可

如果是同一局域网,那么可以直接通信,不需要路由器

如果目标IP是公网服务器,则操作系统会将数据包发送到默认网关,也就是路由器


  1. 数据链路层:操作系统将IP数据包封装成数据链路层数据帧(Frame),并加上MAC地址和目标MAC地址。

如果是同一局域网主机,那么首先查找ARP缓存表看是否有IP地址和MAC地址的映射关系,有则直接使用,没有还需要先发送ARP请求获取目的主机的MAC地址,收到ARP响应后将映射关系保存在ARP缓存表中,然后开始网络通信

如果是外网主机,那么需要进行路由转发和NAT路由器替换,需要先将数据发送给路由器,目的MAC地址是路由器的MAC地址


  1. 物理层:数据链路层数据帧通过物理介质(例如以太网)被发送到路由器。路由器会解析数据帧,根据目标IP地址选择下一跳路由器,并重新封装数据帧。这就是路由转发。其中源MAC地址和目标MAC地址一直改变,源IP也一直改变(被替换成出口路由器的IP地址),目的IP地址不变。源IP(私有IP)最终会被转化为NAT路由器的公网IP,数据也就被发送到了公网。

每一次IP地址的替换,路由器都会维护转换记录,保存在NAPT表中

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

公网IP,数据也就被发送到了公网。

每一次IP地址的替换,路由器都会维护转换记录,保存在NAPT表中

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-32ONBVj3-1713209064903)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值