- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想了解 ARP 的工作原理和 ARP 数据包的格式。看下图中圈出的字段:
在这个例子中,他们在两个字段中给出了不同的 MAC 地址。我看不出这怎么可能?这两者在什么情况下会有所不同?
如果不是,为什么我们要在封装时添加冗余信息?
虽然我认为因为它们有不同的长度(一个固定 6 字节而另一个是可变的..为什么??)它们必须用于不同的地址。
最佳答案
这可能是一个合法的错字。 ARP 报文中的地址长度是可变的,因为不同的二层协议(protocol)具有不同的地址长度。不要错误地只考虑以太网。
你应该学习RFC 826为了理解 ARP:
This protocol was originally designed for the DEC/Intel/Xerox 10MbitEthernet. It has been generalized to allow it to be used for othertypes of networks. Much of the discussion will be directed toward the10Mbit Ethernet. Generalizations, where applicable, will follow theEthernet-specific discussion.
查看强调的文字:
Why is it done this way??
Periodic broadcasting is definitely not desired. Imagine 100workstations on a single Ethernet, each broadcasting addressresolution information once per 10 minutes (as one possible set ofparameters). This is one packet every 6 seconds. This is almostreasonable, but what use is it? The workstations aren't generallygoing to be talking to each other (and therefore have 100 uselessentries in a table); they will be mainly talking to a mainframe, fileserver or bridge, but only to a small number of other workstations(for interactive conversations, for example). The protocol describedin this paper distributes information as it is needed, and only once(probably) per boot of a machine.
This format does not allow for more than one resolution to be done inthe same packet. This is for simplicity. If things were multiplexedthe packet format would be considerably harder to digest, and much ofthe information could be gratuitous. Think of a bridge that talksfour protocols telling a workstation all four protocol addresses,three of which the workstation will probably never use.
This format allows the packet buffer to be reused if a reply isgenerated; a reply has the same length as a request, and several ofthe fields are the same.
The value of the hardware field (ar$hrd) is taken from a list for thispurpose. Currently the only defined value is for the 10Mbit Ethernet(ares_hrd$Ethernet = 1). There has been talk of using this protocolfor Packet Radio Networks as well, and this will require another valueas will other future hardware mediums that wish to use this protocol.
For the 10Mbit Ethernet, the value in the protocol field (ar$pro) istaken from the set ether_type$. This is a natural reuse of theassigned protocol types. Combining this with the opcode (ar$op) wouldeffectively halve the number of protocols that can be resolved underthis protocol and would make a monitor/debugger more complex (seeNetwork Monitoring and Debugging below). It is hoped that we willnever see 32768 protocols, but Murphy made some laws which don't allowus to make this assumption.
In theory, the length fields (ar$hln and ar$pln) are redundant, sincethe length of a protocol address should be determined by the hardwaretype (found in ar$hrd) and the protocol type (found in ar$pro). It isincluded for optional consistency checking, and for network monitoringand debugging (see below).
The opcode is to determine if this is a request (which may cause areply) or a reply to a previous request. 16 bits for this isoverkill, but a flag (field) is needed.
The sender hardware address and sender protocol address are absolutely necessary. It is these fields that get put in atranslation table.
The target protocol address is necessary in the request form of thepacket so that a machine can determine whether or not to enter thesender information in a table or to send a reply. It is notnecessarily needed in the reply form if one assumes a reply is onlyprovoked by a request. It is included for completeness, networkmonitoring, and to simplify the suggested processing algorithmdescribed above (which does not look at the opcode until AFTER puttingthe sender information in a table).
The target hardware address is included for completeness and networkmonitoring. It has no meaning in the request form, since it is thisnumber that the machine is requesting. Its meaning in the reply formis the address of the machine making the request. In someimplementations (which do not get to look at the 14.byte ethernetheader, for example) this may save some register shuffling or stackspace by sending this field to the hardware driver as the hardwaredestination address of the packet.
There are no padding bytes between addresses. The packet data shouldbe viewed as a byte stream in which only 3 byte pairs are defined tobe words (ar$hrd, ar$pro and ar$op) which are sent most significantbyte first (Ethernet/PDP-10 byte style).
关于networking - ARP报文中的源MAC地址和封装时指定的源MAC地址有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35533092/
语境 我正在将一个旧的 php 电子商务网站变成一个用 gatsby.js 构建的静态网站。 我将所有产品元数据放入单独的 .json 文件(每个产品一个),并且我能够使用 json 和文件转换器插件
我曾经能够使用三指向上滚动在源/标题之间切换。自从升级到 Lion 后,我只进行常规滚动。有没有办法恢复该功能? Aka,当我像以前那样向上/向下滚动时,它不会跳到对应的位置。 更新 Apple 在
我有一个包含复选框输入的克隆元素。当克隆的元素未被选中时,我需要也取消选中源元素。有没有办法在 jQuery 中做到这一点?或者我是否以错误的方式处理这个问题(即使用clone())?我应该提到我的问
我有一个类,其中有两个 JSpinner 对象,x 和 y。我有一个更改监听器,它已添加到两者中。有人可以告诉我如何实现我的更改监听器,以便监听器可以区分两个对象之间的区别。例如伪代码: if(sou
我正在编写涉及 for 循环的代码,该循环在每个索引处进行计算。 这些计算中的最小值存储在一个变量中,我在程序末尾使用 MPI_Allreduce 来确定所有进程的全局最小值。 但是,我需要一种方法来
我需要在一个 Android 项目中创建一个 map View ,我从服务器获取自定义 map 图 block PNG。有人知道实现此类功能的简单许可 API 吗? 最佳答案 我使用了 OsmDroi
因为我必须创建一个可以更改图像 (src/background-url) 的函数。我想知道如何识别标签以及它是使用 src 还是 url 来访问图像。 让我们说 早些时候我写了一个可以
当我使用源 map 浏览器 https://github.com/danvk/source-map-explorer要检查捆绑包中的内容,我得到以下输出: D:\projects\angular\mT
我正在为客户将 Windev 应用程序移植到 Objective-C。出于显而易见的原因,使用以前的源代码会更简单。 不幸的是,它是加密的,我需要 EDI 才能看到它;完整版的 Windev 太贵了(
我有一个简单的视频播放器,它使用 WPF MediaElement 播放一系列视频。这些视频一起形成一个围绕静止图像移动的连续电影。在每个视频结束时,运动会卡住在当前播放视频的最后一帧。当我按下一个按
我需要更改 openlayer 的图层源(使用 open weather api)。目前我正在使用以下代码但没有成功。 let layer = this.map.getLayers().getArra
我正在尝试在 /dev/random 的机器上运行代码不会很快填满,我正在尝试使用的 Java 程序因缺少随机数而挂起。/dev/urandom产生“不太好”的随机数,但不会阻塞,对于这种情况,我宁愿
我需要 Yocto 项目的源代码包。我已经拥有整个项目的所有资源,但它们还包括开发工具。 我想有一种方法来生成将为目标图像构建的所有包的(修补的)源。因此,例如,如果目标图像包含 busybox,我想
如何对入侵者隐藏 iFrame src 假设我正在流式传输我的网络摄像头或我的电脑屏幕,这是 iframe 代码: 并且我不希望它在大多数浏览器上显示页面源中的流 URL 和检查功能! 这意
是否可以进入 Qt 源,例如qmainwindow.cpp,在 Qt Creator 中?目前我正在看到反汇编,但最好能看到源代码。 最佳答案 当然!但您可能必须首先: 转到 $QT_HOME/qt
我正在尝试创建一个包含很少动漫剧集的简单网站。我有一个关于 javascript 的问题。如何通过单击我的链接之一来更改视频源?我明白,我必须使用事件监听器,只需更改 取决于我点击的链接,但我不太擅长
我有一个带有 BindingSouce 的 DevExpress GridControl。我想清除 BindingSource 并用新数据填充它。我这样做: var list = new List()
当单击提交输入按钮时,我尝试将其他参数(选定复选框的列表)传递到服务器处理的 DataTables 表#my_table: 这可能意味着我必须将 my_table.sAjaxSource 设置为后端脚
(好吧,别对我大喊大叫,这里已经很晚了:)) 我正在研究 delta diff 工具(命令行工具或组件,只要我可以从 Delphi 2010 调用它们就可以了) 我有这个项目,我将文件上传到服务器,我
我需要解析 Yahoo Weather RSS feed 中的某个位置,例如 http://weather.yahooapis.com/forecastrss?w=44418&u=c例如,获取最高、最
我是一名优秀的程序员,十分优秀!