问题标签 [data-link-layer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 我正在寻找用于 CRC32 算法实现的标准化测试向量
我不得不在我正在处理的系统上替换 CRC32 实现,之前实现的算法使用大小为 256 的查找表,并且太大而无法在引导加载程序中使用。我实现的新算法使用大小为 16 的查找表。
我使用与以前相同的多项式,但结果不同。在线计算器会抛出更多随机结果,其中大多数都不是很清楚他们在做什么,即他们正在使用哪个多项式,输入数据是什么格式或初始 crc 值是什么。
有谁知道我在哪里可以找到用于 CRC32 实现的可靠、标准化的测试向量?
谢谢!
sockets - 第 2 层中的丢包通知
有没有一种方法可以在用户空间中获取有关在 802.11 中的第 2 层丢弃数据包的通知。
根据我的理解,当一个数据包在介质上发送出去时,如果它被正确传递,就会收到第 2 层 ACK(如果没有,它会重新传输并最终丢弃数据包,如果在几次之后没有传递)重试..)
我希望能够访问此通知(在用户空间中)并更改数据包传输的行为。
我希望能够将数据包从 FIB 发送到另一台主机,而不是丢弃数据包。
我已经阅读了有关 libpcap 库和 netfilter 钩子的信息,它们允许我捕获数据包并将它们注入网络堆栈。
但是我找不到帮助我在第 2 层捕获数据包通知的钩子(如果有的话,用于无线堆栈)。
如果我没有正确理解某些内容,请纠正我。此外,任何提示或阅读链接都会很棒。
networking - 交换机及其端口是否有 MAC 地址?
我不明白交换机中的所有端口是否都可以通过 MAC 寻址。我在网上看到相互矛盾的答案 - https://learningnetwork.cisco.com/thread/15380和http://www.techexams.net/forums/ccna-ccent/45578-mac-address-switch.html。
我确实明白,对于不同的制造商和开关操作的层级,答案可能会有所不同。但由于交换机主要是第 2 层设备,因此它的所有端口都应该是可寻址的。它是否正确?
linux - 在 Linux 中读取数据链路 (MAC) 层数据包
从 Linux 上的数据链路 (MAC) 层读取数据包的最简单/最短/最简单的方法是什么?
有人可以给我们一个关于如何做到这一点的代码片段吗?
为什么我们需要它?我们正在开发一种网络摄像机,其中千兆芯片仅实现数据链路层。由于我们没有资源来实现 IP 堆栈,因此我们只需要使用 MAC 地址来交换数据包。
android - 如何通过智能手持设备跟踪 wifi 区域中的用户活动
很少有公司开发出能够记住他们看到的 MAC 地址的 Wi-Fi 集线器。在这样做的同时,他们努力寻找 MAC 地址,也称为硬件地址或物理地址。它们唯一地标识 LAN 上的适配器。
现在出于安全原因使用 ios8,它们带有动态 MAC 地址。
现在他们已经取消了 MAC 地址跟踪选项。
我一直在寻找一种我们仍然能够跟踪用户的解决方案。假设用户 A 今天访问了 wifi 区域 A,如果他在某个时间(甚至一个月)后再次访问,我应该能够弄清楚这是过去访问过的同一用户。
非常重要的是,我认为我们可以为用户保存一些模式吗?模式将包括设备中使用的操作系统以及与 OSI 模型相关的其他有用信息或一些协议级别信息的组合,这些信息将确保用户可以即使不使用 MAC 地址,也可以使用设备进行跟踪。
ip - ARP 如何读取目标 IP 地址作为其第 2 层协议
通过在互联网上搜索,我得到了地址解析协议(ARP)是链路层(L2)协议的信息。根据 ARP 功能,它向整个网络广播以检查该特定 IP 属于谁以获取其 MAC 地址。但是由于 ARP 是 L2 协议,它如何知道目标 IP 地址,因为 IP 封装在 L3 和 L2 协议中不能阅读
layered - 数据链路层和最佳实践
我需要了解以下方法中的最佳实践。我有一个使用分层架构的应用程序。在数据层中,我有两个类,如下所示。
将数据表转换为具有相应业务对象的列表的类。
另一个类来做所有的数据库操作。
所以我只想知道这是否是一个好方法,或者我应该写如下内容。
在这种情况下,我没有单独的类来执行数据库操作,但我需要使用单独的 sql 查询编写不同的函数来返回不同的业务对象。
谢谢。
networking - 数据链路层+网络层连接
我正在阅读有关网络的内容,并且我不了解第 2+3 层 OSI 模型交互。我想首先了解基础知识,所以请随时保持简单。
假设我们有一个 LAN - 5 台计算机都连接到连接到 ISP 路由器的路由器。
1. LAN 上的一台 PC 希望向同一 LAN 上的另一台 PC 发送消息(它们都连接到本地路由器,但不直接相互连接) - 这里使用第 3 层封装吗?如果不是——而且我们只使用第 2 层信息,那么消息将通过的路径是什么?是 PC1->PC2 还是 PC1->Router->PC2。如果它通过路由器 - 在每个消息事务中添加什么信息?如果不是 - 同一 LAN 上的 PC(以某些第 2 层协议连接到同一路由器)是否相互了解?尽管他们没有直接连接,但他们可以互相发送消息吗
2. LAN 上的一台 PC 希望向 LAN 外的 PC 发送消息(路外)。我知道它是 PC1->Router->ISP 路由器 -> ......... -> 接收方本地路由器 -> 接收方哪个实体添加了第 3 层数据?是路由器吗?个人电脑1?ISP路由器?什么时候需要这些信息?因为所有单个事务都由可以在第 2 层协议中进行通信的设备连接?(PC1 以 2 级协议与其路由器通信,路由器到 ISP 路由器......等等?)
任何值得添加的进一步信息将不胜感激。谢谢!
linux - 仅从 tcpdump 获取源 MAC 地址
我正在尝试获取网络上转储的每个数据包的源 MAC 地址,不包括涉及主机的任何数据包。我希望为了实现这一点,我应该从 tcpdump 获取数据,主机的网络接口处于混杂模式。
请注意,我对获取完整标题甚至链接级别标题都不感兴趣。该-e
选项不是我想要的。我只想要每个数据包的源 MAC 地址,仅此而已。
这就是我目前正在做的事情:
替换127.0.0.1
为本地网络接口的实际 IP 地址。
这在某些网络中非常有效,其中源 MAC 地址是 tcpdump 输出的第一条信息。不幸的是,这并不总是我的经验。似乎 tcpdump 的输出取决于协议,因此在某些网络上它会有所不同。
我想我可以重写我的 sed 命令,以便它输出与 MAC 地址的正则表达式匹配的第一项:
但我不确定该行中的第一个 MAC 地址是否始终是源 MAC 地址。
如果没有办法让 tcpdump 直接输出源 MAC 地址,有什么方法可以让它从链路级标头中输出原始位吗?从那里我应该能够拼凑出源 MAC 地址。
routing - MAC/IP 地址如何在路由中使用
我必须在几周内教我关于 MAC 地址和 IP 地址的六年级课程,有些地方我不清楚,我希望你们中的一些人能够为我澄清。
因此,据我了解,当 LAN 上的设备通过互联网向另一个单独 LAN 上的设备发送数据包/帧时,会发生以下情况。
在发送端创建一个数据包,其中包含目标和发送 IP
第一个问题:目的IP实际上是接收设备局域网的网关IP吗
然后将其转换为将发送到 LAN 网关的帧 - 这发生在数据链路层,并且该帧添加了 MAC 发送和目标地址
第二个问题:目标 MAC 地址 - 这是最终目的地还是网关的目的地?
然后将数据包/帧发送到 Internet 并路由(使用 IP 地址)到通往最终目的地的下一跳
第三个问题:在每一跳,数据链路层是否将帧中的目的MAC地址更改为下一跳的MAC地址?
数据包/帧被路由到目标地址(即网关)
第四个问题:一旦帧/数据包到达接收 LAN 的网关,交换机使用帧中的目标 MAC 地址来确保它最终到达正确的设备?这显然假设目标 MAC 地址没有被路由器修改,因为帧/数据包穿过互联网 - 如果它被修改,那么一旦接收网关接收到帧/数据包,它怎么知道将它发送到哪里?
对我的理解的任何更正/确认将不胜感激。