问题标签 [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.

0 投票
3 回答
1999 浏览

networking - 以太网和 OSI 模型

我有一个愚蠢的问题,首先对此感到抱歉。我现在正在学习 7 个 OSI 层模型,我偶然发现了一件事。第二数据链路层中的以太网通过 LAN 提供端到端连接,对吗?这是否意味着即使我通过 WiFi 连接到 Internet,我的连接在某个地方通过 LAN 运行?

谢谢

0 投票
0 回答
508 浏览

tcp - 为什么 Windows 上的 iperf 性能比 Linux 上的 iperf 差?

我正在尝试测量我的 android 设备和接入点之间的 TCP 吞吐量。设置:-

当我在另一端使用 linux 笔记本电脑时,iperf 提供了 5-8 Mbps 的高 tput。

Windows 上使用的 iperf 版本为 2.0.5。2.0.4 在 Linux 上。

任何人都对这种行为有任何想法..?

0 投票
5 回答
64074 浏览

networking - 位填充示例

我正在阅读一个示例

位填料。假设数据链路层从网络层接收到以下位串:01110111101111101111110。位填充后的结果串是什么?将添加的每个位加粗。

回答:

这个答案是如何得出的?我的理解是位填充通过在帧的开头和结尾插入特定的位序列(称为标志值)来工作。我不明白的是:

  1. 我们没有被告知标志值!
  2. 我们没有被告知框架有多大,那么我们怎么知道在哪里放置旗帜呢?

附加信息:我认为这个网络是以太网。

附加信息 2:位标志是01111110

老实说,我想我明白了,但答案不是不完整,因为他们没有在结尾或开头添加标志 01111110 吗?他们只是在消息中出现这种比特模式时处理了问题。

其他例子:这里他们也这样做。

0 投票
3 回答
9753 浏览

networking - 数据链路层和链路层有什么区别?

数据链路层和链路层有什么区别?他们的意思是一样的吗?

0 投票
2 回答
12023 浏览

checksum - 为什么帧校验序列位于以太网帧的末尾而不是其他位置

以太网帧校验序列始终附加到数据链路层中帧的末尾。为什么它被附加到帧的末尾而不是其他地方?

我考虑了一下,认为它可能与如何计算例如CRC校验和有关,如果帧的结构是header+payload+crc而不是header+crc+payload,那么硬件更容易执行。

CRC 执行(数据+填充)/除数形式的异或除法,对于最后一帧,填充被余数替换。然后接收器计算(数据+余数)/除数,如果结果为 0,则接受该帧。

0 投票
1 回答
325 浏览

networking - 在数据链路层重新路由应用程序网络流量

考虑以下情况:

您有一个正在测试的应用程序,但为了测试该程序的网络功能,您需要运行它的多个实例并让它们相互通信。

可能的解决方案是: - 在通过 WAN 或 LAN 连接的单个机器上运行软件。- 在同一台计算机上的虚拟机上运行软件。

我不想使用这些方法中的任何一种(推理无关紧要)。我想知道是否有一种方法可以从测试应用程序(理想情况下使用任何编程语言)重新路由网络传输,以便我可以在台计算机上运行同一软件的多个实例,并让它们表现得好像它们是那台计算机上唯一运行的实例。

换句话说,我希望能够对应用程序进行编码,以便每个实例都侦听相同的“侦听”端口(因为在生产时每台计算机上只会运行一个实例)。然后,我想知道我是否可以在比应用程序更低的级别重新路由网络请求,以便它们不会相互干扰(在同一端口号上发生冲突)。

本质上,我想构建一个重定向网络调用的虚拟环境(而虚拟机需要更多的资源,并且涉及更多)。这可能吗,我该如何解决这个问题?

谢谢!

更新:这是我想要完成的更准确的想法:

基本上,我想编写另一个应用程序,它透明地将绑定请求重定向到可用端口,并管理哪些应用程序绑定在哪里......所以从应用程序的角度来看,所有实例都绑定到端口 1000,但实际上,另一个应用程序是自动管理哪个实例绑定在哪里,并避免潜在的冲突。我觉得这可以通过 Windows Hooks 来完成,但我不确定你如何实现这一点?

0 投票
2 回答
199 浏览

tcp - Internet协议套件是否有任何低级网络库?

Internet协议套件是否有任何低级网络库?

用于捕获和发送Ethernet frames(链路层)、处理IPICMP数据包(互联网层)、传输层等的库。

http://en.wikipedia.org/wiki/Internet_protocol_suite

0 投票
1 回答
1923 浏览

c - 在C(Linux)中将原始数据包注入网络

我正在尝试编写一个函数,该函数采用字节流(包括以太网标头,也许还包括封装在以太网数据包中的上层协议)并将其通过特定接口在网络上发送出去。

这是我的代码的摘要:

我得到错误

我该如何解决这个错误?

我最初的猜测是,这在某种程度上是由sa论点引起的,因为所有其他的都是相当标准的,没有什么可出错的。我可以用这个例子sockaddr_ll中的类型参数替换它,但这意味着从中提取标题信息,这似乎有点毫无意义,因为它已经在那里,准备好了。一定会有更好的办法?封装、取消封装、重新封装、发送似乎有太多不必要的步骤。我正在为一些预先存在的代码编写底层接口,因此我无法调整输入以使其不包含数据链路层标头。buf

0 投票
2 回答
996 浏览

networking - How are IP packets reassembled

Let's say we have an IP packet with a total size of 12000 bytes and we send this packet from station A to station B over the data-link layer. A single Ethernet frame can carry up to 1500 bytes of payload data, so in total, we would need 8 Ethernet frames to transmit the 12000 bytes IP packet, correct?

Let's assume the first Ethernet frame (carrying the IP header) gets garbled during transmission and the TotalLength field of the IP header no longer contains the actual length but just some nonsense value. Even if station B realizes that the header checksum is no longer valid and discards the frame, how can station B know where the next IP packet starts in the incoming data stream? It does not know how many bytes of payload the first IP packet had, right?

Or is the size of an IP packet effectively limited by the maximum length of the payload that the underlying data-link frame can handle?

0 投票
1 回答
502 浏览

linux - 通过本地接口使用数据链路原始套接字发送和接收 ICMP

我正在学习 Linux 上的数据链路原始套接字编程,我发现了这些有用的示例。我编译了 icmp4_ll.c,并用它向同一 LAN 中的另一台计算机发送 ICMP 数据包。我可以收到来自目标计算机的回复。但是,当我使用它向本地计算机发送ICMP数据包时,即我将源和目标以太网MAC和IP地址设置为eth0的MAC和IP地址时,我无法在eth0或lo上收到ICMP回复接口(在 Wireshark 中,我只注意到通过 eth0 发送的 ICMP 请求,但在任何接口上都没有 ICMP 回复。)我认为 ICMP 请求消息组成正确,(否则远程目的地不会回复)。但我不知道为什么操作系统不回复请求。任何帮助或提示表示赞赏。