数据链路层—以太网协议

数据链路层—以太网协议

数据链路层—以太网协议_第1张图片

文章目录

  • 数据链路层—以太网协议
      • 重新认识四层模型
      • 以太网
      • 局域网特点
      • 以太网帧格式
      • 碰撞领域和避免碰撞算法
      • 认识MAC地址
      • 令牌环网
      • 交换机
      • 认识MTU
      • MTU对IP协议的影响
      • MTU对UDP协议的影响
      • MTU对TCP协议的影响
      • 数据跨网段传输的过程

重新认识四层模型

数据链路层—以太网协议_第2张图片

  • TCP/IP分层模型将OSI参考模型分为四层,实际上五层,自顶向下分别是应用层,传输层,网络层,数据链路层和物理层。
  • 网络层的IP协议由于具有源IP地址和目的IP地址,可以在网络中唯一的标定两台主机,因此可以说IP具备跨网段、将数据从一台主机发送给另一台主机的能力。然而在同一个网段中只使用IP协议并不能准确的将数据交给目标主机,因此就需要用到下层数据链路层的以太网协议来做到局域网通信,在局域网中顺利的将数据交给目标主机。
  • IP协议只关系如何将数据从源主机传送到目标主机中,IP协议本身是不具备可靠性的。因此IP协议需要上层传输层TCP协议完成重传机制等操作来保证IP协议的可靠性。
  • TCP协议除了给下层提供重传机制等操作来保持数据的通信可靠性以外,还提供接口供上层应用层使用,例如使用socket编程时,本质上是在使用传输层TCP/UDP协议提供给我们的接口。
  • 因此,可以说网络层IP协议提供数据的跨网段传输的能力,传输层TCP协议提供数据传输可靠性,而数据链路层以太网协议是用来提供同网段数据传输的能力,即局域网中主机之间通信—解决了点到点通信问题。

以太网

以太网属于局域网中的一种,常见的局域网有3种。

  • 以太网是局域网的一种实现方式,但如今以太网占据了绝大多数市场,故某种意义上,以太网就是局域网。
  • 令牌环网:令牌环网常用于IBM系统中,在这种网络中有一种专门的帧称为“令牌”,在环路上持续地传输来确定一个节点何时可以发送包。
  • 无线LAN/WAN。LAN是指在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。WAN是一种跨越大的、地域性的计算机网络的集合。通常跨越省、市,甚至一个国家。广域网包括大大小小不同的子网,子网可以是局域网,也可以是小型的广域网。

虽然网络中的局域网使用的类型不同,但在网络层,通过IP协议屏蔽掉了底层协议的差异。在网络层及其以上,只关心将数据报向下交付,并不关心底层使用了什么类型的协议。

  • 网络层将报文交付给数据链路层,在数据链路层给报文添加上相应的报头。
  • 如果数据要跨网段通信,就需要将报文发送给路由器。如果数据要在局域网中通信,就需要将报文发送给目标主机。总之数据到达另一端时,需要去掉报文对应数据链路层的报头,然后再向上交付。
  • 路由器发送给下一台主机时,就需要在数据链路层添加上相应的报头。

因此报文在网络中传送,不断地添加数据链路层报头,去掉数据链路层报头,这样就能够在不同的局域网中使用不同类型的局域网协议,最后数据发送到目标主机上。

以太网

  • “以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的 内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
  • 如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;

局域网特点

  • 处在在同一个局域网的主机,可以直接通信。

  • 每台主机都必须具备唯一的标识符,即mac地址。mac地址一共6字节48位,该地址是配备在网卡上的,且是全球唯一。

  • 在局域网中,一台主机发送的消息,局域网中的所有主机都能够接收到,但是在数据链路层就能够对信息的目的mac地址进行丢弃或者接收向上交付操作。若目的mac地址是本主机地址,那么就将数据包向上交付,若不是,则直接丢弃报文。

  • 在数据链路层对数据进行向上交付,这种行为称作抓包。网卡具有混杂模式,即不放弃任何数据帧,无论收到什么报文都接收并且向上交付,不对数据做丢弃操作。即抓包数据的原理。

以太网帧格式

以太网帧格式如下:

数据链路层—以太网协议_第3张图片

  • 上层网络层将报文交付到数据链路层,数据链路层需要对该报文进行封装。目的地址是目标主机的mac地址,源地址是源主机的mac地址。这两个地址的长度是48字节,在网卡出厂时就固化好了。
  • 类型字段标定帧协议类型。其中帧协议类型有3种值,0800对应,0806对应ARP,0835对应RARP。
  • 帧末尾有四位字段,CRC是校验码,数据链路层拿到数据报后,需要对CRC做验证,若验证错误,则报文直接丢弃。

碰撞领域和避免碰撞算法

实际上在硬件上传输mac帧是通过光电信号传播,而传播过程中若会出现两个及以上的mac帧在局域网中时会发送数据碰撞,碰撞后的mac帧就容易发送数据丢失,因此mac帧若发生了碰撞,一般情况下是要被目的主机丢弃的。

因此称一个局域网就是一个碰撞域,在碰撞域中,同一时刻出现两个及以上的mac帧在传输,就容易发送数据碰撞。

以太网规定,在同一个时刻只允许一台主机往局域网中发送数据。若主机往局域网中发送的数据发生碰撞,这些主机就需要等待特定的时间间隔。

这样的好处在于:在该间隔期间,没有发生数据碰撞的主机可以继续往局域网中发送数据。等待发送碰撞的数据在局域网中消散。时间间隔结束后,等待的主机可以发送数据。

这样可以有效的错开局域网中主机发送数据的时刻,这样的算法叫做避免碰撞算法。而主机要具备知道自己发送的数据是否发送碰撞的能力,即主机要具备碰撞检测。

实际上,保持局域网消息正常发送就是保证主机都遵守主机的碰撞检测和避免碰撞算法,因此破坏局域网的手段就是不遵守该算法,不断的往局域网中发送垃圾数据,对局域网中的数据进行碰撞破坏。

总结一下:避免碰撞算法就是发送数据碰撞的主机就需要等待一段时间再发送数据,因此在以太网中也存在重传机制,该重传机制是为了保证局域网中一台主机的数据能够发送到目标主机上。

MAC帧然后将报报头与有效载荷进行分离?

由于以太网MAC帧的帧头和帧尾是固定长度的,因此当数据链路层从底层接收到一份MAC帧时,只需要按照固定长度分离帧头和帧尾,剩下的就是有效载荷了。

如何将MAC帧的有效载荷部分交付给上层的相关协议?

在帧头部分有类型字段,根据该字段就能将有效载荷交付给对应的协议。

主机A需要将MAC帧发送给局域网中的主机B。

  • 局域网中的所有主机都能够收到该MAC帧,包括主机A。
  • 主机A收到自己发送出去的报文后,通过CRC校验和字段检验,如果发送了数据碰撞,就立刻执行避免碰撞算法,后续将MAC重传到局域网中。
  • 主机B收到MAC帧后,先是对帧头的目的IP字段做判断,若目的IP本主机IP,则不做报文丢弃行为。接着对CRC校验和字段做检验,若没有发送错误则对MAC帧进行分离操作,按照帧头的类型字段,将有效载荷交付给上层对应协议。若发生错误,则对MAC帧进行丢弃。
  • 其他主机收到MAC帧后,对帧头部分的目的IP字段做判断,得知目的IP不是本主机IP,执行报文丢弃行为。

认识MAC地址

  • MAC地址用来识别数据链路层中相连的节点。
  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)。
  • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可 能会冲突; 也有些网卡支持用户配置mac地址)。
  • 通过ifconfig查看ether后接的就是mac地址

数据链路层—以太网协议_第4张图片

令牌环网

  • 令牌环网是IBM公司于70年代发展的,21世纪以后这种网络比较少见。在老式的令牌环网中,数据传输速度为4Mbps或16Mbps,新型的快速令牌环网速度可达100Mbps。
  • 令牌环网的传输方法在物理上采用了星形拓扑结构,但逻辑上仍是环形拓扑结构。

数据链路层—以太网协议_第5张图片

  • 其通信传输介质可以是无屏蔽双绞线、屏蔽双绞线和光纤等。

令牌的工作原理

  • 在这种令牌环网中,有一种专门的帧称为“令牌”,在环路上持续地传输来确定令牌环网上的主机(节点)何时可以发送数据包。
  • 令牌环网的媒体接入控制机制采用的是分布式控制模式的循环方法。即在令牌环网中有一个令牌(Token)沿着环形总线在入网节点计算机间依次传递。令牌实际上是一个特殊格式的帧,本身并不包含信息,仅控制信道的使用,确保在同一时刻只有一个节点能够独占信道
  • 当环上节点都空闲时,令牌绕环行进。节点计算机只有取得令牌后才能发送数据帧,因此不会发生碰撞。由于令牌在网环上是按顺序依次传递的,因此对所有入网计算机而言,访问权是公平的。
  • 令牌在工作中有“闲”和“忙”两种状态。“闲”表示令牌没有被占用,即网中没有计算机在传送信息;“忙”表示令牌已被占用,即网中有信息正在传送。
  • 希望传送数据的计算机必须首先检测到“闲”令牌,将它置为“忙”的状态,然后在该令牌后面传送数据。当所传数据被目的节点计算机接收后,数据被从网中除去,令牌被重新置为“闲”。

当然令牌环网也有缺点。在令牌环网中需要维护令牌,一旦失去令牌就无法工作,因此需要选择专门的节点监视和管理令牌。

总结一下:

  1. 以太网采用的是主机的碰撞检测和避免碰撞算法,如果发生了数据碰撞,那么发送该碰撞的主机就需要等待一段时间再发送,等待期间,没有发生数据碰撞的主机可以往局域网中发送数据,一定程度上避免了数据碰撞。而光电信号的传播数据极快,这种做法基本上能够避免局域网的数据碰撞问题。
  2. 令牌环网是在通过令牌在网内流通,环网内的主机去获取令牌,获取到令牌的主机才能够往环网中发送数据,即保证了任一时刻只有一台主机往环网内发送数据。这里可以将环网近似看作临时资源,环网上的主机发送数据的行为看作成访问临时资源的临界区,而令牌就是锁,拿到锁的进程才能进入临界区访问临界资源。虽然以太网和令牌环网处理数据碰撞的方式不同,但殊途同归。

交换机

网桥:网桥工作在数据链路层,它根据 MAC 帧的目的地址对收到的帧进行转发。网桥具有过滤帧的功能。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的 MAC 地址,然后再确定将该帧转发到哪一个接口。

交换机:以太网交换机通常都有十几个接口。因此,以太网交换机实质上就是一个多接口的网桥,可见交换机工作在数据链路层。

在网络层中使用的中间设备是路由器,在数据链路层中使用的中间设备是交换机。

数据链路层—以太网协议_第6张图片

交换机的作用:

  1. 识别局部性的碰撞,对碰撞过的数据不做转发。交换机 会放置在局域网中,对局域网进行局部划分。例如左局部的主机需要向右局部的主机发送数据时,需要通过交换机进行转发。若转发的数据在左局部网已经被碰撞了,交换机不做转发,减少右局域网的数据碰撞概率,保护了右局部网。例如主机A要向主机E发生数据,数据在左局部网中已经发生碰撞了,交换机接收到数据后,不会将数据转发到右局部网,而是直接丢弃。
  2. 不对局域网中的局部域的数据进行转发。例如主机A向C主机发送数据,理论上局域网中的所有数据都会接收到该数据如何在数据链路层中做相应处理。而主机A和主机C存在局域网中的同一个局部域,那么交换机不会将该数据转发到另一个局部域中,减少了另一个局部域的数据碰撞的几率。

因此这也看出局域网的范围不能太大,局域网太大,其包含的主机数量越多,局域网就越难以管理,数据碰撞的几率就越大。

认识MTU

以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位。

最大值1500称为以太网的最大传输单元,即MTU(最大传输单元(Maximum Transmission Unit),不同的网络类型有不同的MTU,不同的数据链路层规定标准的MTU也是不同的;

如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);

MTU对IP协议的影响

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

IP报文格式

数据链路层—以太网协议_第7张图片

MTU是数据链路层中以太网协议的最大传输单元,规定了mac帧的有效载荷大小最多为1500字节。数据链路层的上一层是网络层,IP协议位于网络层。网络层需要将IP报文交付给下一层数据链路层,以太网协议要对IP报文做封装。因此IP报文的最大长度限制于MTU,即IP报文的最大长度最多是1500字节,而IP报文的标准报头大小为20字节,因此在MTU的限制下,IP报文的有效载荷大小最多为1480字节。大于MTU的报文要进行分包(分片)。

  • 将较大的IP包分成多个小包, 并给每个小包打上标签。
  • 每个小包IP协议头的 16位标识(id) 都是相同的。
  • 每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最后一个小包, 是的话置为1, 否则置为0)。
  • 到达对端时,在网络层IP协议会将这些小包会按顺序重组, 拼装到一起返回给传输层。
  • 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败,但是IP层不会负责重新传输数据。在源主机的传输层,TCP协议会触发重传机制,重新发送报文。

具体IP报文的分片和组装原理可以参考博主的另一篇博客网络层协议—IP协议

MTU对UDP协议的影响

UDP报文格式

数据链路层—以太网协议_第8张图片

传输层位于网络层的上一层,传输层需要将UDP报文交付给下一层网络层,IP协议需要对UDP报文做封装,因此MTU也会对UDP报文大小具有限制。MTU限制IP报文的最大长度为1500字节,因此IP协议规定IP报文的有效载荷的最大长度为1480字节,因此UDP报文的最大长度为1480字节。由于UDP报头为8字节,因此UDP报文的有效载荷最大长度为1472字节。

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

MTU对TCP协议的影响

TCP报文格式

数据链路层—以太网协议_第9张图片

TCP协议也位于传输层,因此TCP协议报文也受到MTU的约束。

  • TCP的一个数据报也不能无限大,TCP的单个数据报的最大消息长度, 称为MSS(最大报文段长度—Max Segment Size)。
  • 由于传输层之上就是应用层,因此MSS就是用户所能一次性发送的最大数据大小。
  • TCP在建立连接的过程中, 通信双方会进行MSS协商。
  • 最理想的情况下, MSS的值正好是在IP报文不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)。
  • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。
  • 然后双方得知对方的MSS值之后, 选择较小的作为最终MSS。
  • MSS的值就是在TCP首部的40字节变长选项中(kind=2)。

MTU和MSS在以太网协议、IP协议、TCP协议中的关系示意图如下:

数据链路层—以太网协议_第10张图片

在主机上也可以通过ifconfig查看MTU大小

数据链路层—以太网协议_第11张图片

数据跨网段传输的过程

基于以上对数据链路层的学习理解之后,重新认识数据跨网段传输。

数据链路层—以太网协议_第12张图片

以主机A想要跨网段将数据发送给主机B为例

  • 主机A想要将数据发送给主机B,那么就先需要将数据发送到路由器A。主机A在IP层将源IP(自己的IP)和目的主机IP(主机B的IP)填充完封装完IP报文后,向下交付给数据链路层,此时mac帧的目的地址就是路由器A的mac地址,源地址是主机A的mac地址。然后主机A将报文发送到局域网中。
  • 局域网中的主机都能收到这份mac帧,但只有路由器A的mac地址与mac帧的目的地址相同,因此只有路由器A接收了这份mac帧并解包向上交付给IP层。
  • 路由器A的IP层查看IP报文的目标主机IP,并与路由表中的IP做比对,选择将数据发送给路由器B。于是将IP报文交付给数据链路层。
  • 路由器A的数据链路层对mac帧做封装,填充的目的地址是路由器B的mac地址,源地址是路由器A的mac地址,封装完后将mac帧发送到局域网中。
  • 局域网中的主机都能收到这份mac帧,但只有路由器B的mac地址与mac帧的目的地址相同,因此只有路由器B接收了这份mac帧并解包向上交付给IP层。
  • 路由器B的IP层查看IP报文的目标主机IP,并与路由表中的IP做比对,选择将数据发送给路由器C。。。。。。
  • 不断重复上述过程,直到最终数据转发至主机B。

因此数据在跨网段传输过程中,mac帧的目的地址和源地址不断变化,但IP地址不会变化。其原因在于数据在传输过程中的上一跳主机和下一跳主机在不断变化。而IP地址标定了网络中的唯一主机,作为数据在传输过程中的终点。

将数据在网络中跨网段运输,放到生活中,可以理解为mac帧的有效载荷作为包裹,mac地址就是运输包裹的载具,IP地址就是包裹需要到达的地点。在不同的场景使用不同的载具,使用飞机、铁路、货车,运输包裹的载具不断变化,但包裹的收货地址不会改变。

你可能感兴趣的:(网络,网络,网络协议,tcp/ip)