[Linux] Linux网络之数据链路层详解

Posted 哦哦呵呵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Linux] Linux网络之数据链路层详解相关的知识,希望对你有一定的参考价值。

1. 数据链路层

  处于TCP/IP中物理层, 数据链路层的协议定义了通过通信媒介互连的设备之间的传输规范. 在计算机中数据是由0 1表示的,实际通信时通信媒介处理的时电压的高低、光的闪灭及电波的强弱等信号。把这些信号与0 1进行转换的就是物理层,数据链路层处理的数据也不是单纯的0 1序列,该层该他们集合为一个叫做帧的块,然后进行传输。

2. MAC地址

  一般情况MAC地址全球唯一(虚拟网卡例外),MAC地址用于识别数据链路中互连的结点。长度为48位,6个字节,一般用16进制数字加上冒号的形式来表示。
  MAC地址描述的时路途中每一个区间的起点与重点,而IP地址描述的时路途总体的起点与终点。

数据转发过程
  网络中进行数据传输时,数据从数据链路层出发,会经过路由器转发到外部网络,从路由器发出时源mac地址和目的mac地址会发生改变,并且每经过一个区间mac地址都会发生改变,而上层协议封装的IP地址是不会变化的。

3. 以太网

  “以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;

3.1 以太网帧格式

  • 目的MAC地址: 保存相邻设备的mac地址,表示下一次数据到哪去
  • 源MAC地址: 保存消息发出设备的MAC地址
  • 类型: 数据链路层的上层协议是什么,决定交付给上层的什么协议
  • 有效载荷: 46字节-1500字节(MTU),如果上层的数据少于46字节,会进行补0操作,补齐46字节。
  • FCS: 校验数据在传输过程中是否失真。

3.2 转发过程总结

  1.网络层进行选路,数据链路层负责相邻设备的转发。数据链路层根据网络层选择相邻的路由项进行转发。一定需要知道要转发的这个路由所对应的相邻设备的MAC地址,要么是子网内机器的mac地址,要么是连接路由器wan对应的mac地址。
  2.在网络数据转发的过程中,目的IP地址一般不会发生改变(除非NAT),转发设备会针对网络数据进行分用,在网络层获取到目的IP地址,通过目的IP地址和自己的路由表进行匹配,从而选择路由。再封装以太网协议至数据包,这次封装的是下一区间的源MAC地址与目的MAC地址。在不同的网络区间中都会进行分用和封装,直到到达目标主机。
  3.数据链路层组织的以太网协议当中的目的mac地址一定是相邻设备的mac地址。并且是一个区间一个区间转发的,所以源mac地址和目的mac地址在每个转发区间一定是不同的。

注意: 在组织以太网协议时,需要知道相邻设备的MAC地址,当前设备如何知道响铃设备的MAC地址? ARP协议

3.3 交换机

作用: 划分碰撞域,减少碰撞域,转发数据包.
碰撞域: 一个局域网内就是一个碰撞域,网络中同一时刻只能由一条数据发送,当有一条消息发出时就会进行冲突检测,如果出现有多条消息发送就是冲突碰撞,那么就会触发冲突避免,等待消息发送完后再发送其他数据。

4. ARP协议

4.1 作用

  通信时必须要知道对方的mac地址,获取相邻设备的mac地址。
  将IP地址转换为mac地址,会将携带IP地址的数据广播至局域网中,所有主机收到信息后,会确认IP地址是否与自身符合,不符合则直接丢弃,符合的主机将给发送发进行ARP应答。

  主机A为了获得主机B的MAC地址,起初要通过广播发送-一个ARP请求包。这个包中包含了想要了解其MAC地址的主机IP地址。也就是说,ARP请求包中已经包含了主机B的IP地址172. 20. 1.2。由于广播的包可以被同-个链路上所有的主机或路由器接收,因此ARP的请求包也就会被这同–个链路上所有的主机和路由器进行解析。如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个节点就将自已的MAC地址塞人ARP响应包返回给主机A。
  总之,从一个IP地址发送ARP请求包以了解其MAC地址’,目标地址将自己的MAC地址填入其中的ARP响应包返回到IP地址。由此,可以通过ARP从IP地址获得MAC地址,实现链路内的IP通信。

4.2 协议格式

4.3 ARP缓存表

作用

  • 保存IP地址与MAC地址的映射
  • arp缓存表中的记录是有老化时间的,老化时间为20min,一旦失效,会重发arp请求,获取IP地址对应的mac地址。

问题?
1.为什么需要arp缓存表?

  当网络数据从网络层到达数据链路层时,需要填充以太网协议的目的mac地址,则可以通过arp缓存表中的记录项,查找对应的mac地址。如果查找到了,则拿到mac地址,填充以太网协议之后,进行发送。如果没有找到,则使用arp协议,获取目标IP的mac地址。
  如果每发送个IP数据报都要进行一次ARP请求以此确定MAC地址,那将会造成不必要的网络流量,因此,通常的做法是把获取到的MAC地址缓存"一段时间。即把第–次通过ARP获取到的MAC地址作为IP对MAC的映射关系记忆"到一个ARP缓存表中,下一次再向这个IP地址发送数据报时不需再重新发送ARP请求,而是直接使用这个缓存表当中的MAC地址进行数据报的发送。每执行一次ARP,其对应的缓存内容都会被清除。不过在清除之前都可以不需要执行ARP就可以获取想要的MAC地址。这样,在一定程度上也防止了ARP包在网络上被大量广播的可能性。
  一般来说,发送过- -次IP数据报的主机,继续发送多次IP数据报的可能性会比较高。因此,这种缓存能够有效地减少ARP包的发送。反之,接收ARP请求的那个主机又可以从这个ARP请求包获取发送端主机的IP地址及其MAC地址。这时它也可以将这些MAC地址的信息缓存起来,从而根据MAC地址发送ARP响应包给发送端主机。类似地,接收到IP数据报的主机又往往会继续返回IP数据报给发送端主机,以作为响应。因此,在接收主机端缓存MAC地址也是一种提高效率的方法。

2.arp为什么需要老化时间?

  在网络中,IP地址是不固定的,有可能设备切换网络之后,会造成IP地址的变更,那么mac地址就无效了。所以经过一定老化时间后清楚缓存表,重新获取,重新建立映射关系。

IP地址与MAC地址一定要同时需要吗?

  如果发送端与接收端在同一网络中,那么只需要一个就够了,因为对数据在此网络中进行广播就能找到接收端。
  如果发送端与接收端不在同一网络呢,即使知道对方mac地址,那么他们之间发送数据也要经过路由过程才能找到对端。所以发送端必须先将数据发送至路由器,才能继续向外发送,只要经过路由器就一定要知道IP地址负责无法分用,找到目的IP。
  此外,假定MAC地址就用广播地址,那么路由器D也将会收到该广播消息。于是路由器D又将该消息转发给路由器C,导致数据包被重复发送两次"。
  在以太网上发送IP包时,“下次要经由哪个路由器发送数据报”这一信息非常重要。而这里的“下一个路由器”就是相应的MAC地址。
  所以,IP 地址和MAC地址两者缺一不可。 于是就有将这两个地址相关联的ARP协议。
  最后,如果不使用IP地址,而是通过MAC地址连接世界上所有网络中所有的主机和节点的情况。仅仅-一个MAC地址,人们是无法知道这台机器所处的位置的。而且如果全世界的设备都使用MAC地址相连,那么网桥在习得之前就得向全世界发送包。可想而知那将会造成多大的网络流量。而且由于没有任何集约机制,网桥就不得不维护一张巨大的表格来维护所学到的所有MAC地址。一旦这些信息超过网桥所能承受的极限,那将会导致网桥无法正常工作,也就无法实现通信了’。

以上是关于[Linux] Linux网络之数据链路层详解的主要内容,如果未能解决你的问题,请参考以下文章

[Linux] Linux网络之数据链路层详解

Linux从青铜到王者第二十一篇:Linux网络基础第三篇之数据链路层

Linux网络基础--网络层与数据链路层

Linux网络基础--网络层与数据链路层

Linux网络基础--网络层与数据链路层

Linux运维之道之网络基础学习1.3