Linux网络原理及编程(8)——第十八节 数据链路层

简介: 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)

思考一个问题:真正在网络中跑的是一个一个IP报文吗?


实际也不是。真正在网路中传输的是一个一个的以太网帧。


当然,从IP往下,不同的网络就有不同的标准了。我们接下来介绍的以太网帧,主要以以太网为标准。也是比较有代表性的。


1、MAC地址

用来识别数据链路层中相连的节点;


长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)


在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)


2、MAC帧

以太网是目前应用比较多的局域网技术。

image.png


1、在局域网中,其资源是大家共享的,当一个主机发送报文的同时,局域网中的其他主机也能够收到。所以,当有大量的报文同时在局域网中发送的时候,就会造成局域网的瘫痪。这就造成了需要有局域网的争用问题(就像争互斥锁)。所以我们的链路层在底层是有一个碰撞避免算法的。


2、整个局域网都是一个碰撞域,在发送报文之前需要进行冲突检测;同时在发送的时候要进行冲突避免。


3、局域网中的数据一般是的采用数据碰撞的方式来进行发送。


4、MAC帧的数据也是有可能进行重传的,只不过它的作用只是为了确保书数据为对方所成功接收。


5、为了减少数据碰撞,增加交换机的概念。第一:划分碰撞域;第二:转发数据报文


6、E怎么知道C想要跟它通信呢,或者说E怎么知道在网络中的数据是它自己的呢?


C主机在发送数据的时候,其并不知道要将其发给谁,它的任务就是将这个数据发送发到局域网当中,它的任务就完成了。具体怎么发到目标主机上,是由协议决定的:C在发送的时候,会填src_m地址和dst_m(关于其是如何知道这个目的主机的MAC地址的我们马上说)地址。当C发出之后,所有人都会收到这个数据,然后从这个数据当中找到目的MAC地址,看是不是发给的,如果是那就将数据交付,如果不是,就丢弃。


7、数据能从C交付给E,那么其也就可以交给路由器。交给路由器的过程本质上就是交给下一跳的过程。(给路由器的原因是目标主机不在本局域网中)


所以,目的IP给我们以宏观知道,MAC地址给我们以微观导向。


3、MAC帧协议

image.png


关于这个协议,首先还是需要解决两个问题:实现报头和有效载荷分离以及交付给上层的哪一层协议的问题。


那它是怎么做到这个的呢?


前面两个地址分别是目的MAC地址和源MAC地址;


后面的类型即表示要交付给上层的哪一个协议。


由于MAC帧是一个定长报头,所以只要从头往后读确定的数据就可以实现分离了。(独特定的长度,我们已经学了三种分离的方式了)


4、MTU

这个概念,我们在IP协议中提到过。


MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.


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


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


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


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


5、ARP请求和应答

根据我们前面说到的,我想要把我的数据发送到对方主机,那么我必须要知道它的MAC地址。


那怎么知道呢?


可是我只知道 目的主机的IP地址,所以我必须要将我的IP地址转化为MAC地址。


这个时候我们就用到了ARP技术。


ARP技术是在数据链路层。

image.png


报文解释:


硬件类型如果填1,那就代表着是以太网。


协议类型指要转换的地址类型,0x0800为IP地址;


硬件地址长度对于以太网地址为6字节;


协议地址长度对于和IP地址为4字节;


op字段为1表示ARP请求,op字段为2表示ARP应答



当发送出去之后,所有人都拿到了这个协议,然后向上交付给ARP协议。


然后先看op,如果为1,看目的IP地址,如果对上了,那么就进行ARP应答(把自己的IP地址填到里面去)。(填的所有数据元素都已经有了)如果没有对上,就丢弃。


这样,如果有了一次ARP的应答,那么二者之间的IP地址就互相都知道了。此时,就可以进行数据报文的来回交互了。

举个例子:

当A想要将B通信,那么我们的ARP请求该怎么填呢?


可以向下面这样填:


硬件类型:1


协议类型:0x0800


硬件地址长度:6


协议地址长度:4


op:1


发送端以太网地址:MACa


发送端IP:Ipa


目的以太网地址:111111;


目的IP:IPb


好啦,本节的内容就到这里啦~~



目录
相关文章
|
8天前
|
机器学习/深度学习 数据可视化 PyTorch
深入解析图神经网络注意力机制:数学原理与可视化实现
本文深入解析了图神经网络(GNNs)中自注意力机制的内部运作原理,通过可视化和数学推导揭示其工作机制。文章采用“位置-转移图”概念框架,并使用NumPy实现代码示例,逐步拆解自注意力层的计算过程。文中详细展示了从节点特征矩阵、邻接矩阵到生成注意力权重的具体步骤,并通过四个类(GAL1至GAL4)模拟了整个计算流程。最终,结合实际PyTorch Geometric库中的代码,对比分析了核心逻辑,为理解GNN自注意力机制提供了清晰的学习路径。
156 7
深入解析图神经网络注意力机制:数学原理与可视化实现
|
10天前
|
机器学习/深度学习 API Python
Python 高级编程与实战:深入理解网络编程与异步IO
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发和 API 设计。本文将深入探讨 Python 在网络编程和异步IO中的应用,并通过实战项目帮助你掌握这些技术。
|
1月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
49 17
|
1月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
59 26
|
23天前
|
网络协议 安全 网络安全
应用程序中的网络协议:原理、应用与挑战
网络协议是应用程序实现流畅运行和安全通信的基石。了解不同协议的特点和应用场景,以及它们面临的挑战和应对策略,对于开发者和用户都具有重要意义。在未来,随着技术的不断发展,网络协议也将不断优化和创新,为数字世界的发展提供更强大的支持。
|
2月前
|
Linux 网络性能优化 网络安全
Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)
通过以上步骤,您可以在Linux(OpenWrt)系统中使用iptables和tc工具实现网络流量限速控制(QoS)。这种方法灵活且功能强大,可以帮助管理员有效管理网络带宽,确保关键业务的网络性能。希望本文能够为您提供有价值的参考。
149 28
|
2月前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
54 11
|
2月前
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
366 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
|
2月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
136 15
|
3月前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
330 7