问题标签 [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.
arp - 在第 2 层封装帧之前,源 MAC 来自哪里?
数据包从应用程序到达->...网络->(根据 IP 配置在此处添加 IP 封装)-> 进入数据链路层此处完成帧并为 LAN 交换添加 SourceMac 和 Dest Mac。是否每次将SourceMac从HostNIC中提取并封装到数据包中,然后再发送接口?或者它读取了一些配置文件?
我假设 /etc/network/interfaces 文件为空并且没有任何 hw-addr 地址来更改 MAC [ifconfig eth0 hw ether (Macwe want to change AA:BB:CC....) 命令]。它在哪里获得自己的 MAC?
它是否每次都说“ifconfig eth0 |grep HWaddr”并通过系统调用获取自己的 MAC 或类似内容时进行查找?因为这将增加每次查询 NIC 芯片组的巨大开销。还是它维护一个从中读取的文件并简单地封装来自上层的数据包并从线路发送出去?
c - 将帧从链路层传递到物理层
我正在尝试为学校创建一个简单的链路层协议。
我一直在搜索和谷歌搜索,我知道链接层已将我创建的框架传递给物理层,但是如何在编程(语言 c)中执行是否有一个函数或库可以用来直接发送我的框架使用物理层 ? 或者应该怎么做?
networking - 传输层的流量和错误控制
据我了解,在传输层和数据链路层都采用了流控制和错误控制。如果数据链路保证了数据包的无差错传送,那么传输层会捕捉到什么样的错误呢?
另外,在 TCP 中处理的 UDP 中可能会发生什么样的错误?
tcp - IP 数据包和 MAC 目标地址
我有一个关于 IP 和 MAC 的简单问题。假设我们有两个 LAN,A 和 B,通过网桥(无网络层)连接。我们有主机'X',它向主机'Y'发送一个IP数据包。它将通过 MAC 帧发送。该 MAC 帧的有效负载将是我们的 ip 数据包。
问题是:既然 X 不知道 Y 的 MAC 地址,那么帧头中将使用哪个 MAC 目标地址?
感谢您的时间。
java - 有没有办法知道数据链路层的RTT?
我正在尝试在我的 android 手机和路由器中找到一种了解 RTT 的方法。我不确定是否有办法找到它。有人知道这方面的一些知识吗?谢谢你。
linux - Python:计算数据链路层上两次事件之间的 CPU 周期
有 2 个主机:本地和远程。我想做以下事情:
从 L2(数据链路层)RTS 帧上的本地机器发送,并检查当时的 CPU 周期(时刻 A)。框架正在远程机器上接收。远程发送应答。在本地,我得到了这个答案(CTS-frame)。再次检查 CPU 周期(时刻 B)。
我需要计算 A 和 B 之间的 CPU 周期:Ncycles = BA(这样想)。
仅在本地,不使用远程主机。CPU本地机器有MIPS架构。
我试图通过 Scapy 做到这一点,但不明白如何。
- 我可以通过 Python-scipt 在本地机器上发送 RTS 帧并接收 CTS 帧吗?
- 是否可以计算这些事件之间的 CPU 周期?
- 如果在 Python 上无法实现,我应该使用什么?
提前致谢。
crc32 - 将 CRC 添加到帧
我正在尝试实现一种方法,计算 CRC 并将其添加到 input-bitstring 中。为此,我在 Java 中找到了 CRC32 类。由于我不熟悉这个主题,我不确定如何添加 CRC。CRC32 的 getValue() 方法会返回一个 long 类型,但是向位串添加 long 没有多大意义。
networking - 网络层和数据链路层
网络层负责定义消息从发送主机到目的主机的路由。特别是,网络层决定在到达目的地的途中下一跳的目标是什么。
数据链路层只关心网络中两个节点之间的数据传输。据我了解,数据链路层必须以某种方式从网络层获取信息 - 将数据转发到下一个节点。
我的问题是 - 数据链路层如何从网络层获取这些信息?
IP-header 包含源主机和目标主机的 IP。但我正在寻找的是一些字段“下一个直接邻居的IP转发数据”
linux - 在树莓派中使用 tcpdump/tshark 读取 WLAN 链路层包
我有一个树莓派,一个处于监控模式的 WLAN 棒(Ralink Technology, Corp. RT5370)并安装了 tcpdump(+tshark)。
现在,我想从养老院患者使用的 WLAN 腕带设备读取链路层包。该设备每秒发送一次链路层数据,以便接入点使用指纹识别进行检测。这个包的内容并不重要,只需要RSSI值和设备的MAC。
现在使用我的 rPi,我想检测患者何时对自己的平门整洁,以便自动打开它。为此,Pi 需要接收这个 LLC 包,以便我可以使用相关的 RSSI 值来计算距离。
使用 Wireshark 和 Windows (Airpcap) 我可以毫无问题地阅读这些 LLC 包。输出例如:
35748 152.953461000 00:00:00_00:00:00 57:01:ff:00:00:00 LLC 62 I,N(R)=0,N(S)=0;DSAP NULL LSAP 个人,SSAP 0x1e 命令
如果我使用 tcpdump 或 tshark 在 raspbian 上做同样的事情,我根本不会收到数据。
tcpdump(命令是 sudo tcpdump llc -i wlan1)返回
tcpdump: 'llc' 仅在原始 ATM 上支持
看起来我的 linux/驱动程序无法将链路层数据传递给 tcpdump。我该如何启用它?
谢谢你的任何提示
更新
感谢 Guy Harris,我找到了解决方案
返回所有 LLC 包,并且 -e 值添加所有类型的 mac。输出是这样的,其中 TA 是设备的 MAC。我使用python逐行解析它以获取我需要的数据
布拉斯特凡
networking - 为什么 NIC 将发送的帧循环到它的接收对上?
在阅读 CCENT/CCNA ICND1 官方考试认证指南时,我遇到了集线器如何创建电气总线的步骤:
步骤 1 网络接口卡 (NIC) 发送帧。
步骤 2 NIC 将发送的帧循环到卡内部的接收对上。
步骤 3 集线器接收电信号,将信号解释为比特,以便清理和重复信号。
第 4 步 集线器的内部布线将信号从所有其他端口转发出去,但不会返回到接收信号的端口。
步骤 5 集线器将信号重复到所有其他设备上的每个接收对。
但是,我无法理解第 2 步背后的逻辑,也无法找到解释此步骤的资源。任何人都可以向我解释第 2 步的目的吗?