0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARP协议在TCP协议栈中的地位

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-08-17 09:13 次阅读

知识回顾

在前面的文章中,我们已经介绍了以太网卡的封装接口,其中主要是以下几个接口:

netdev_init():初始化网卡的ip地址、mac地址和mtu的值

netdev_receive():发送以太网帧数据

netdev_transmit():发送以太网帧数据

这几个接口是我们封装ARP数据接口的基础,最好还是先搞明白原理。

ARP协议的由来

在上面,我们介绍netdev_receive()函数的时候,已经发现了以太网帧类型主要分两大类型,一种是IP数据帧,另一种是ARP数据帧。也就是说ARP数据帧与IP数据帧同属于网络层的数据帧。如下图:

3b0b12ca-1dc1-11ed-ba43-dac502259ad0.png

IP数据帧我们知道,是用来传输用户数据的。哪ARP数据帧有什么用呢?

其实,ARP协议是用来将目标主机的IP地址转换为对应的以太网(MAC)地址的。因为当我们的应用程序要向目标主机发送信息时,它只知道目标主机的IP地址,而IP地址是无法直接用于物理链路上传输数据的,所以需要ARP数据帧来把IP地址转化为对应的MAC地址。

我们可以主动发起ARP查询帧,在本地建立起IP地址和MAC地址的映射关系,也必须要及时回复别人的ARP查询帧!

ARP报文组织结构

ARP数据帧位于以太网数据帧的上一层,我们先来了解一下它的报文结构,如下图:

3b208f9c-1dc1-11ed-ba43-dac502259ad0.png

我们来详解学习一下,里面每个字段所代表的具体含义;

硬件协议:发送方想要知道的硬件接口类型,对于以太网接口来说,该值为1

协议类型:映射的协议地址类型,我们要把MAC地址映射为IP地址,该值为0x0800

硬件地址长度:对于MAC地址来说,该值为6

协议地址长度:对于IP地址来说,该值为4

OP:表示ARP数据包的具体类型,1为ARP请求,2为ARP应答

剩余四个字段的具体含义非常简单易懂,就不罗列出来讲解了。

了解ARP报文组织结构之后,下一步,自然就是用c语言结构体来构造这个ARP报文组织,level-ip的ARP报文组织结构体保存在includeethernet.h文件中,如下图:

3b395b30-1dc1-11ed-ba43-dac502259ad0.png

这两个结构体的成员变量,与我们刚才介绍的ARP报文的每个字段是一一对应的,这里不再重复解析。

ARP请求发送接口

ARP数据帧的发送接口为arp_request()函数。该函数保存在src/arp.c文件中。当我们在发送IP数据帧时,如果在ARP缓存表中找不到该IP所对应的MAC地址时,就会通过广播的形式,来进行ARP请求数据包的发送。

如下图:

3b566e46-1dc1-11ed-ba43-dac502259ad0.png

第8行,动态申请一个sk_buff来继续发送数据的存储。

第12行,选择使用哪个网卡来继续数据帧的发送

第13行,在sk_buff中,向前移动arp_ipv4结构体大小的位置,把得到的指针赋值给payload指针

第14行,用网卡(netdev)中记录的源主机mac地址,填充arp-ipv4结构体中的源主机mac地址(smac)

第15行,填充arp-ipv4结构体中的源主机ip地址(sip)

第16行,用广播地址(broadcast_hw),填充arp-ipv4结构体中的目的主机mac地址(dmac)

第17行,填充arp-ipv4结构体中的目的主机ip地址(dip)

第18行,在sk_buff中,向前移动arp_hdr结构体大小的位置,把得到的指针赋值给arp指针

第19~29行,初始化ARP报文的硬件协议、协议类型、报文类型等等,htons()函数为进行数据的大小端切换。到这里ARP报文就初始化好了

第31行,调用netdev_transmit()函数,进一步构建以太网数据帧发送

ARP数据读取接口

ARP数据接收接口为arp_rcv()函数。该函数在以太网数据帧读取接口netdev_receive()函数中调用。我们来了解一下这个函数,如下图:

3b6b25f2-1dc1-11ed-ba43-dac502259ad0.png3b8862ca-1dc1-11ed-ba43-dac502259ad0.png

第8行,从读取到的数据中获取arp数据帧

第10~12行,获取arp数据帧中的硬件类型、协议类型、报文类型

第25~28行,获取源主机和目的主机的ip地址

第30行,继续arp缓存表数据的更新

第32行,判断该arp数据帧,是不是发送给本机的

第37行,如果arp数据帧中的IP地址还没有缓存在本机的ARP缓存表中的话,那么把这个IP地址插入到ARP缓存表中保存

第42行,判断ARP数据帧的报文类型

第43、44行,如果报文类型为ARP请求帧,那么调用arp_reply()函数进行ARP应答帧的发送

ARP应答帧发送接口

在上面我们介绍ARP数据读取接口时,当我们如果接收到了ARP请求帧,那么我们要调用arp_reply()函数进行ARP应答帧的发送,我们来学习一下这个函数。

如下图:

3b95b998-1dc1-11ed-ba43-dac502259ad0.png

第6行,获取arp报文的数据

第8行,使用skb_reserve()函数来调整sk_buff中数据指针的位置,表示以太网首部和ARP报文的数据都还没有填充

第9行,使用skb_push()函数,参数为ARP_HDR_LEN + ARP_DATA_LEN,表示填充了ARP报文

第11~28行,将该ARP请求数据包的源主机信息和目的主机信息交换位置,并把操作字段op置为2

第30行,选择发送网卡

第32行,调用netdev_transmit()函数,进一步构建以太网数据帧发送

总结

通过我们这边文章,我们已经明白了ARP协议的报文结构、ARP数据包的发送、ARP数据包的接收处理等等。知道了ARP协议在TCP协议栈中的重要地位。不过文中对ARP缓存表没有做深入介绍,这是因为该知识点比较基础,主要是对链表的插入、删除等操作。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 以太网
    +关注

    关注

    40

    文章

    5331

    浏览量

    170668
  • 接口
    +关注

    关注

    33

    文章

    8422

    浏览量

    150668
  • ARP协议
    +关注

    关注

    0

    文章

    10

    浏览量

    6884
  • TCP协议
    +关注

    关注

    1

    文章

    91

    浏览量

    12054

原文标题:ARP协议是什么鬼?这一篇源码分析!

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一种uIP TCP/IP协议51系列单片机上的实现

    报文协议TCP传输控制协议。为了8位16位处理器上应用,uIP协议
    发表于 08-08 09:27

    协议介绍--TCP/IP

    使用上与一般的协议相同,可能只是具体的使用细节可能有点不同。3)本协议设计时使用标准U
    发表于 09-03 15:03

    TMS320VC5402 上实现的嵌入式TCP IP协议

    实现一个运行在16 位数字信号处理器TMS320VC5402 上的小型嵌入式TCP/IP 协议。对TCP/IP 协议
    发表于 05-16 14:55 28次下载

    嵌入式WEB服务器TCP/IP协议的设计与实现

    嵌入式TCP/IP 协议能扩展非智能设备的网络功能,是信息智能化的一种有效手段。 本文从嵌入式WEB 服务器入手,分析了嵌入式TCP/IP
    发表于 06-19 09:03 35次下载

    地址解析协议(ARP),地址解析协议(ARP)是什么意思

    地址解析协议(ARP),地址解析协议(ARP)是什么意思 地址解析协议 (ARP) “地址
    发表于 04-06 09:07 2089次阅读

    嵌入式TCP/IP协议DSP上的实现

    摘要:介绍了TMS320C5402芯片与RTL8019AS互联网控制器的硬件接口电路的设计,实现了一个运行在TMS320C5402上的 小型嵌入式TCP/IP协议。对TCP/IP
    发表于 02-25 17:26 189次下载
    嵌入式<b class='flag-5'>TCP</b>/IP<b class='flag-5'>协议</b><b class='flag-5'>栈</b><b class='flag-5'>在</b>DSP上的实现

    arp协议的作用是什么?arp协议的工作原理介绍

    地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。那么ARP
    发表于 11-02 16:14 6.3w次阅读
    <b class='flag-5'>arp</b><b class='flag-5'>协议</b>的作用是什么?<b class='flag-5'>arp</b><b class='flag-5'>协议</b>的工作原理介绍

    tcp_ip 协议讲座:介绍ARP,ICMP,DHCP协议

    介绍了Tcp_ip协议的分层,简单介绍了ARP,ICMP,DHCP协议
    的头像 发表于 07-03 11:10 3487次阅读

    LWIP协议Raw TCP中使用

    本文档的主要内容详细介绍的是LWIP协议Raw TCP中使用的资料免费下载
    发表于 11-05 17:36 17次下载
    LWIP<b class='flag-5'>协议</b><b class='flag-5'>栈</b><b class='flag-5'>中</b>Raw <b class='flag-5'>TCP</b>中使用

    ARP是什么意思?ARP是什么协议ARP协议用于什么地方

    ),是根据IP地址获取物理地址的一个TCP/IP协议ARP的基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。 那什么是地址解析协议?地址解析
    发表于 11-10 18:00 1.9w次阅读

    arp协议属于哪一层_arp协议的主要功能

    arp协议TCP/IP模型属于IP层(网络层),OSI模型
    发表于 01-11 15:51 4.1w次阅读

    Microchip TCP/IP精简协议

    本应用笔记描述 Microchip 传输控制协议 / 互联网协议TCP/IP)精简协议库的结构和接口,并提供部分简单的演示应用。实现
    发表于 04-01 15:36 17次下载
    Microchip <b class='flag-5'>TCP</b>/IP精简<b class='flag-5'>协议</b><b class='flag-5'>栈</b>

    Microchip TCP/IP协议

    Microchip 单片机上实现传输控制协议 / 网际协议(Transmission Control Protocol/Internet Protocol,TCP/IP)不需要任何
    发表于 04-02 14:28 22次下载
    Microchip <b class='flag-5'>TCP</b>/IP<b class='flag-5'>协议</b><b class='flag-5'>栈</b>

    ARP协议原理是什么

    ARP协议是地址解析协议(`Address Resolution Protocol`)是通过解析`IP地址`得到`MAC地址`的,是一个在网络协议包中极其重要的网络传输
    的头像 发表于 02-14 10:10 2188次阅读
    <b class='flag-5'>ARP</b><b class='flag-5'>协议</b>原理是什么

    到底什么是TCP/IP协议,看完这篇你就明白!

    。后面出现的各类协议(http、ip、dns、tcparp等)都被整体纳入这一协议体系中去,被统称为“TCP/IP
    的头像 发表于 12-09 15:21 1366次阅读
    到底什么是<b class='flag-5'>TCP</b>/IP<b class='flag-5'>协议</b><b class='flag-5'>栈</b>,看完这篇你就明白!