007A-ARP


当网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址来获取目的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的。

在这里插入图片描述
数据链路层在进行数据封装时,需要目的MAC地址

ARP数据包格式

在这里插入图片描述
ARP报文不能穿越路由器,不能被转发到其他广播域

ARP工作过程

在这里插入图片描述

  • 主机A发送一个数据包给主机C之前,首先要获取主机C的MAC地址

ARP缓存
在这里插入图片描述

Host A>arp -a
Internet Address Physic
AR lib_board/built-in.o CC lib_uip/lib_uip.o lib_uip/lib_uip.c: In function &#39;HttpdHandler&#39;: lib_uip/lib_uip.c:56:4: warning: implicit declaration of function &#39;NetSendHttpd&#39;; did you mean &#39;NetLoopHttpd&#39;? [-Wimplicit-function-declaration] 56 | NetSendHttpd(uip_buf, uip_len); | ^~~~~~~~~~~~ | NetLoopHttpd lib_uip/lib_uip.c: In function &#39;NetLoopHttpd&#39;: lib_uip/lib_uip.c:197:15: warning: implicit declaration of function &#39;timer_get_boot_us&#39;; did you mean &#39;timer_get_us&#39;? [-Wimplicit-function-declaration] 197 | us_start = timer_get_boot_us(); | ^~~~~~~~~~~~~~~~~ | timer_get_us CC lib_uip/uip_drv.o CC lib_uip/uip/uip.o lib_uip/uip/uip.c:113:19: warning: function declaration isn&#39;t a prototype [-Wstrict-prototypes] 113 | static inline int request_tcp_cache_appdata_idx() | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lib_uip/uip/uip.c:132:6: warning: function declaration isn&#39;t a prototype [-Wstrict-prototypes] 132 | void release_all_tcp_cache_appdata_idx() | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CC lib_uip/uip/uip_arp.o CC lib_uip/uip/timer.o CC lib_uip/uip/uip-split.o lib_uip/uip/uip-split.c: In function &#39;uip_split_output&#39;: lib_uip/uip/uip-split.c:91:5: warning: implicit declaration of function &#39;tcpip_output&#39; [-Wimplicit-function-declaration] 91 | tcpip_output(); | ^~~~~~~~~~~~ CC lib_uip/apps/uip_apps.o CC lib_uip/apps/httpd/httpd.o CC lib_uip/apps/httpd/fs.o In file included from lib_uip/apps/httpd/fs.c:54: lib_uip/apps/httpd/webs/fsdata.c:826:31: warning: initialization discards &#39;const&#39; qualifier from pointer target type [-Wdiscarded-qualifiers] 826 | struct fsdata_file *FS_ROOT = file_style_css; | ^~~~~~~~~~~~~~ CC lib_uip/apps/upgrade/http_upgrade_dynamic.o lib_uip/apps/upgrade/http_upgrade_dynamic.c: In function &#39;checkFirmwareRSA2048&#39;: lib_uip/apps/upgrade/http_upgrade_dynamic.c:1180:14: warning: passing argument 1 of &#39;sha256_calc&#39; from incompatible pointer type [-Wincompatible-pointer-types] 1180 | sha256_calc(uHeader, info->size, sha256_hash); | ^~~~~~~ | | | UPGRADE_HEADER * {aka struct _UPGRADE_HEADER_DYM *} In file included from lib_uip/apps/upgrade/http_upgrade_dynamic.c:23: lib_verify/sha256.h:22:32: note: expected &#39;unsigned char *&#39; but argument is of type &#39;UPGRADE_HEADER *&#39; {aka &#39;struct _UPGRADE_HEADER_DYM *&#39;} 22 | int sha256_calc(unsigned char *in, int len, unsigned char *out); | ~~~~~~~~~~~~~~~^~ At top level: lib_uip/apps/upgrade/http_upgrade_dynamic.c:130:13: warning: &#39;uip_cache_disable&#39; defined but not used [-Wunused-function] 130 | static void uip_cache_disable(void) | ^~~~~~~~~~~~~~~~~ lib_uip/apps/upgrade/http_upgrade_dynamic.c:125:13: warning: &#39;uip_cache_enable&#39; defined but not used [-Wunused-function] 125 | static void uip_cache_enable(void) | ^~~~~~~~~~~~~~~~ AR lib_uip/built-in.o CC lib_verify/bigNumber.o CC lib_verify/md5.o lib_verify/md5.c:60:1: warning: function declaration isn&#39;t a prototype [-Wstrict-prototypes] 60 | static void Transform (); | ^~~~~~ lib_verify/md5.c:106: warning: "UL" redefined 106 | #define UL(x) x##U | In file included from include/linux/sizes.h:11, from include/configs/nvt-ns02302-evb-a64.h:13, from include/config.h:4, from ./arch/arm/include/asm/string.h:4, from include/linux/string.h:21, from lib_verify/md5.c:36: include/linux/const.h:31: note: this is the location of the previous definition 31 | #define UL(x) (_UL(x)) | lib_verify/md5.c:212:13: warning: function declaration isn&#39;t a prototype [-Wstrict-prototypes] 212 | static void Transform (buf, in) | ^~~~~~~~~ CC lib_verify/rsaVerify.o lib_verify/rsaVerify.c: In function &#39;bytes_out&#39;: lib_verify/rsaVerify.c:315:2: warning: implicit declaration of function &#39;printf&#39; [-Wimplicit-function-declaration] 315 | printf("\n\t[%s] size: %d 0x%04x\n\t0x%04x | ", info, len, len, 0); | ^~~~~~ lib_verify/rsaVerify.c:11:1: note: &#39;printf&#39; is defined in header &#39;<stdio.h>&#39;; did you forget to &#39;#include <stdio.h>&#39;? 10 | #include "sha256.h" +++ |+#include <stdio.h> 11 | lib_verify/rsaVerify.c: In function &#39;mgf1_mask&#39;: lib_verify/rsaVerify.c:356:6: warning: unused variable &#39;out_l&#39; [-Wunused-variable] 356 | int out_l = dlen; | ^~~~~ lib_verify/rsaVerify.c: In function &#39;rsa_verify_pss&#39;: lib_verify/rsaVerify.c:492:11: warning: initialization of &#39;int (*)(void *)&#39; from incompatible pointer type &#39;int (*)(sha256_context *)&#39; [-Wincompatible-pointer-types] 492 | .init = sha256_starts, | ^~~~~~~~~~~~~ lib_verify/rsaVerify.c:492:11: note: (near initialization for &#39;hash_algo.init&#39;) lib_verify/rsaVerify.c:493:13: warning: initialization of &#39;int (*)(void *)&#39; from incompatible pointer type &#39;int (*)(sha256_context *)&#39; [-Wincompatible-pointer-types] 493 | .starts = sha256_starts, | ^~~~~~~~~~~~~ lib_verify/rsaVerify.c:493:13: note: (near initialization for &#39;hash_algo.starts&#39;) lib_verify/rsaVerify.c:494:13: warning: initialization of &#39;int (*)(void *, unsigned char *, int)&#39; from incompatible pointer type &#39;int (*)(sha256_context *, uint8_t *, uint32_t)&#39; {aka &#39;int (*)(sha256_context *, unsigned char *, unsigned int)&#39;} [-Wincompatible-pointer-types] 494 | .update = sha256_update, | ^~~~~~~~~~~~~ lib_verify/rsaVerify.c:494:13: note: (near initialization for &#39;hash_algo.update&#39;) lib_verify/rsaVerify.c:495:12: warning: initialization of &#39;int (*)(void *, unsigned char *)&#39; from incompatible pointer type &#39;int (*)(sha256_context *, uint8_t *)&#39; {aka &#39;int (*)(sha256_context *, unsigned char *)&#39;} [-Wincompatible-pointer-types] 495 | .final = sha256_finish, | ^~~~~~~~~~~~~ lib_verify/rsaVerify.c:495:12: note: (near initialization for &#39;hash_algo.final&#39;) lib_verify/rsaVerify.c:498:16: warning: unused variable &#39;mask&#39; [-Wunused-variable] 498 | unsigned char mask[256] = {0}; | ^~~~ lib_verify/rsaVerify.c: In function &#39;bytes_out&#39;: lib_verify/rsaVerify.c:331:1: warning: control reaches end of non-void function [-Wreturn-type] 331 | } | ^ CC lib_verify/shaAndSha512.o CC lib_verify/sha256.o AR lib_verify/built-in.o CC net/arp.o CC net/bootp.o CC net/eth-uclass.o CC net/eth_common.o CC net/net.o net/net.c:1636:6: warning: function declaration isn&#39;t a prototype [-Wstrict-prototypes] 1636 | void NetInitGlobalHttpd() | ^~~~~~~~~~~~~~~~~~ net/net.c:1676:5: warning: function declaration isn&#39;t a prototype [-Wstrict-prototypes] 1676 | int NetInitLocalHttpd() | ^~~~~~~~~~~~~~~~~ CC net/nfs.o CC net/ping.o CC net/tftp.o AR net/built-in.o LDS u-boot.lds LD u-boot OBJCOPY u-boot.srec OBJCOPY u-boot-nodtb.bin RELOC u-boot-nodtb.bin COPY u-boot.bin xz: u-boot.bin.xz: File already has `.xz&#39; suffix, skipping Reading &#39;u-boot.bin&#39;... File size = 699208 ==Display binary file info== Begin Model Name: ub02302 VersionNumber: FFFFFFFF ReleaseDate: 20250922 ==Display binary file info== End Total binary size after padding: 699208 ##ui32BinDataSumValue: 0x072AFF86 CheckSum: 0x007A Writing &#39;u-boot.bin&#39;... Write size = 699208 Save binary OK. bfc.exe: 2018-04-5 full load version compress u-boot.bin to u-boot.lz.bin... Input file: 699208 bytes Compressed data: 441647 bytes (63.2%) Full compress, new file size = outsize + 16bytes = 441663 Calculate and write back checksum... Checksum = 0x2684 SYM u-boot.sym CFGCHK u-boot.cfg make[4]: Leaving directory &#39;/home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot&#39; (mkdir -p /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/normal_boot/../output_bin; cp -fpR /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/normal_boot/u-boot.xz.img.bin /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/normal_boot/../output_bin/ubi1_bootloader.bin); (cd /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot; source /home/x/nm/platform/nvmp/target/linux/nvt9853x/env_setup.sh /home/x/nm/platform/nvmp/../sdk/soc/nvt9853x/glibc-toolchain-10.4.0 /home/x/nm/platform/nvmp/product_config/s385dpsv1/dts/Linux/cfg_538_IPC_NAND_EVB && make -C ./general_bin_nvt9853x partition=dynamicNand_config DTS_SRC_L=/home/x/nm/platform/nvmp/product_config/s385dpsv1/dts/Linux/cfg_538_IPC_NAND_EVB) make[4]: Entering directory &#39;/home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/general_bin_nvt9853x&#39; 18+0 records in 18+0 records out 73728 bytes (74 kB, 72 KiB) copied, 0.00347511 s, 21.2 MB/s 10+1 records in 11+0 records out 45056 bytes (45 kB, 44 KiB) copied, 0.000306631 s, 147 MB/s copy dts include file... CUR_DIR=/home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/general_bin_nvt9853x/.., DTS_DIR=/home/x/nm/platform/nvmp/product_config/s385dpsv1/dts/Linux/cfg_538_IPC_NAND_EVB make[5]: Entering directory &#39;/home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/general_bin_nvt9853x/configs&#39; verify /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/general_bin_nvt9853x/../general_bin_nvt9853x/configs/cfg_gen/nvt-evb.dtb skip ep_nvt_memory_cfgs check. make[5]: Leaving directory &#39;/home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/general_bin_nvt9853x/configs&#39; dtb size 133985 less than 1048576 32+1 records in 33+0 records out 135168 bytes (135 kB, 132 KiB) copied, 0.000125112 s, 1.1 GB/s 107+1 records in 108+0 records out 442368 bytes (442 kB, 432 KiB) copied, 0.000196792 s, 2.2 GB/s make[4]: Leaving directory &#39;/home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/general_bin_nvt9853x&#39; touch /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/.built make V=ss -j1 clean-staging make[4]: Entering directory &#39;/home/x/nm/platform/nvmp/tp_package/bootloader&#39; /home/x/nm/platform/nvmp/product_config/s385dpsv1/device_info.config:84: warning: overriding recipe for target &#39;/home/x/nm/platform/nvmp/bin/nvt9853x-s385dpsv1/order_dynamic.txt&#39; /home/x/nm/platform/nvmp/product_config/s385dpsv1/device_info.config:84: warning: ignoring old recipe for target &#39;/home/x/nm/platform/nvmp/bin/nvt9853x-s385dpsv1/order_dynamic.txt&#39; /home/x/nm/platform/nvmp/product_config/s385dpsv1/device_info.config:113: warning: overriding recipe for target &#39;/home/x/nm/platform/nvmp/bin/nvt9853x-s385dpsv1/order_dynamic_ubi.txt&#39; /home/x/nm/platform/nvmp/product_config/s385dpsv1/device_info.config:113: warning: ignoring old recipe for target &#39;/home/x/nm/platform/nvmp/bin/nvt9853x-s385dpsv1/order_dynamic_ubi.txt&#39; rm -f /home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/stamp/.bootloader_installed make[4]: Leaving directory &#39;/home/x/nm/platform/nvmp/tp_package/bootloader&#39; rm -rf /home/x/nm/platform/nvmp/tmp/stage-bootloader mkdir -p /home/x/nm/platform/nvmp/tmp/stage-bootloader/host /home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/packages /home/x/nm/platform/nvmp/staging_dir/host/packages find /home/x/nm/platform/nvmp/tmp/stage-bootloader -name &#39;*.la&#39; | xargs -r rm -f; (mkdir -p /home/x/nm/platform/nvmp/tmp/stage-bootloader/mini_compile; cp -fpR /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/normal_boot/../output_bin/* /home/x/nm/platform/nvmp/tmp/stage-bootloader/mini_compile/); (mkdir -p /home/x/nm/platform/nvmp/tmp/stage-bootloader/mini_compile; cp -fpR /home/x/nm/platform/nvmp/build_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/linux-nvt9853x_generic/bootloader/factory_boot/../output_bin/* /home/x/nm/platform/nvmp/tmp/stage-bootloader/mini_compile/); if [ -d /home/x/nm/platform/nvmp/tmp/stage-bootloader ]; then (cd /home/x/nm/platform/nvmp/tmp/stage-bootloader; find ./ > /home/x/nm/platform/nvmp/tmp/stage-bootloader.files); SHELL= /home/x/nm/platform/nvmp/staging_dir/host/bin/flock /home/x/nm/platform/nvmp/tmp/.staging-dir.flock -c &#39; mv /home/x/nm/platform/nvmp/tmp/stage-bootloader.files /home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/packages/bootloader.list && cp -fpR /home/x/nm/platform/nvmp/tmp/stage-bootloader/* /home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/; &#39;; fi rm -rf /home/x/nm/platform/nvmp/tmp/stage-bootloader touch /home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/stamp/.bootloader_installed make[3]: Leaving directory &#39;/home/x/nm/platform/nvmp/tp_package/bootloader&#39; make[2]: Leaving directory &#39;/home/x/nm/platform/nvmp&#39; package/Makefile:101: recipe for target &#39;/home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/stamp/.package_compile&#39; failed make[1]: *** [/home/x/nm/platform/nvmp/staging_dir/target-aarch64-ca53-linux-gnueabihf-s385dpsv1/stamp/.package_compile] Error 2 make[1]: Leaving directory &#39;/home/x/nm/platform/nvmp&#39; /home/x/nm/platform/nvmp/include/toplevel.mk:203: recipe for target &#39;world&#39; failed make: *** [world] Error 2
最新发布
09-23
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值