[linux]linux网络之数据链路层详解(代码片段)

哦哦呵呵 哦哦呵呵     2023-02-26     608

关键词:

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网络之网络层协议详解(代码片段)

...与私有地址2.1NAT转换总结3.路由3.1路由过程3.2路由表  网络层使用IP协议,IP协议基于IP地址转发分包数据,IP是跨网络传送数据包得,使整个互联网都能收到数据的 查看详情

linux网络基础--网络层与数据链路层(代码片段)

网络基础--网络层与数据链路层详解🌴网络层🌿网络层概念🌵网络层主要功能🌿网络层协议🌵IP协议🍁基本概念🍁协议头格式🍁网段划分🌱特殊的IP地址🌱IP地址的数量限制🌱私有I... 查看详情

linux网络基础--网络层与数据链路层(代码片段)

网络基础--网络层与数据链路层详解🌴网络层🌿网络层概念🌵网络层主要功能🌿网络层协议🌵IP协议🍁基本概念🍁协议头格式🍁网段划分🌱特殊的IP地址🌱IP地址的数量限制🌱私有I... 查看详情

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

系列文章目录文章目录系列文章目录前言一、数据链路层的以太网协议二、认识MAC地址三、对比理解MAC地址和IP地址四、ARP协议的作用五、ARP数据报格式五、ARP协议工作流程六、ARP缓存表七、DNS(DomainNameSystem)八、NAT协议九、NAPT协... 查看详情

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

网络基础1.3数据链路层解析:数据链路层:位于物理层与网络层之间;数据链路层的功能:--数据链路的建立,维护,拆除--帧包装,帧传输,帧同步--帧的差错恢复--流量控制----------------------------------------------------------------------... 查看详情

arp无应答?详解linux网络中arp(代码片段)

...直接用来进行通信的。这是因为IP地址只是主机在抽象的网络层中的地址。若要将网络层中传送的数据报交给目的主机,还要传到链路层转变成MAC帧后才能发送到实际的网络上。因此,不管网络层使用的是什么协议,... 查看详情

linux网络基础--网络层与数据链路层(代码片段)

网络基础--网络层与数据链路层详解🌴网络层🌿网络层概念🌵网络层主要功能🌿网络层协议🌵IP协议🍁基本概念🍁协议头格式🍁网段划分🌱特殊的IP地址🌱IP地址的数量限制🌱私有I... 查看详情

linux网络之数据包的接受过程(代码片段)

网卡收包从整体上是网线中的高低电平转换到网卡FIFO存储再拷贝到系统主内存(DDR3)的过程,其中涉及到网卡控制器,CPU,DMA,驱动程序,在OSI模型中属于物理层和链路层,如下图所示。网卡工作... 查看详情

linux网络协议栈源码分析-链路层arp地址解析协议(代码片段)

1、ARP报文格式 1.1、ARP报文格式ARP报文的格式如下:(具体各字段的含义参考《TCP/IP详解卷1:协议》第4章ARP:地址解析协议)1.2、内核定义op定义如下:#define ARPOP_REQUEST 1 /*ARPrequest */#define ARPOP_REPLY 2 /*ARPreply */协议类型定... 查看详情

linux网络之数据包的接受过程

网卡收包从整体上是网线中的高低电平转换到网卡FIFO存储再拷贝到系统主内存(DDR3)的过程,其中涉及到网卡控制器,CPU,DMA,驱动程序,在OSI模型中属于物理层和链路层,如下图所示。网卡工作在物理层和数据链路层,主要... 查看详情

[linux]linux网络之tcp协议详解(代码片段)

目录1.传输层2.端口号3.TCP协议3.1TCP协议的特性3.1.1面向连接3.1.2可靠传输3.1.3面向字节流3.2TCP报头3.3TCP连接管理及可靠性问题3.3.1可靠性3.3.2保证可靠性的机制3.3.3保证效率的机制3.3.3.1滑动窗口机制3.3.3.2拥塞控制3.4其它机制3.4.1延... 查看详情

[linux]linux网络之tcp协议详解(代码片段)

目录1.传输层2.端口号3.TCP协议3.1TCP协议的特性3.1.1面向连接3.1.2可靠传输3.1.3面向字节流3.2TCP报头3.3TCP连接管理及可靠性问题3.3.1可靠性3.3.2保证可靠性的机制3.3.3保证效率的机制3.3.3.1滑动窗口机制3.3.3.2拥塞控制3.4其它机制3.4.1延... 查看详情

linux网络编程----网络接口层(数据链路层+物理层)

...争用问题解决局域网的争用问题--交换机以太网帧格式跨网络传输认识MAC地址对比理解IP与MAC地址ARP协议ARP协议格式ARP协议作用ARP请求与ARP应答ARP请求ARP应答查看ARP和MAC地址对应的映射关系DNS(域名解析)ICMP--工作在网络层的协议pin... 查看详情

网络七层协议之部分协议详解

网络七层协议由上到下分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。主要介绍以下4层:1)链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接... 查看详情

网络基础之osi七层模型

...示层,会话层)=》给用户提供服务。后四层(传输层,网络层,数据链路层,物理层)=》数据传递提供服务。其中数据链路层中MAC地址负责局域网通信网络层中IP地址负责外网通信接下来七层详解:物理层: 负责比特流的... 查看详情

linux网络基础--传输层详解(代码片段)

网络基础--传输层详解🍅传输层🍋再谈端口号🥝netstat指令🥝端口号划分范围🥝常见的知名端口号(Well-KnowPortNumber):🍋UDP协议🥝UDP协议段格式🥝UDP协议的特点🍓面向数据报🥝UDP的缓... 查看详情

linux网络基础--传输层详解(代码片段)

网络基础--传输层详解🍅传输层🍋再谈端口号🥝netstat指令🥝端口号划分范围🥝常见的知名端口号(Well-KnowPortNumber):🍋UDP协议🥝UDP协议段格式🥝UDP协议的特点🍓面向数据报🥝UDP的缓... 查看详情

linux系统诊断必备技能之二:tcpdump抓包工具详解

TcpDump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 查看详情