吴忠躺衫网络科技有限公司

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

    文章

    5460

    瀏覽量

    172721
  • 接口
    +關注

    關注

    33

    文章

    8691

    瀏覽量

    151911
  • ARP協議
    +關注

    關注

    0

    文章

    10

    瀏覽量

    6917
  • TCP協議
    +關注

    關注

    1

    文章

    101

    瀏覽量

    12121

原文標題: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 ?2121次閱讀

    嵌入式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.4w次閱讀
    <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 ?3577次閱讀

    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 ?2w次閱讀

    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 ?2348次閱讀
    <b class='flag-5'>ARP</b><b class='flag-5'>協議</b>原理是什么

    到底什么是TCP/IP協議,看完這篇你就明白!

    。后面出現的各類協議(http、ip、dns、tcparp等)都被整體納入這一協議體系中去,被統稱為“TCP/IP
    的頭像 發表于 12-09 15:21 ?1508次閱讀
    到底什么是<b class='flag-5'>TCP</b>/IP<b class='flag-5'>協議</b><b class='flag-5'>棧</b>,看完這篇你就明白!
    百家乐游戏网上投注| 凱旋门百家乐的玩法技巧和规则| 大赢家百家乐的玩法技巧和规则| 大发888 casino exe| 利好国际| 真人百家乐官网澳门娱乐城| 聚宝盆百家乐官网的玩法技巧和规则 | 申博太阳城官网| 百家乐官网筹码样式| 优惠搏百家乐官网的玩法技巧和规则| 百家乐视频游戏界面| 大发888娱乐场手机版| 钻石国际| 百家乐官网真人娱乐场开户注册| 网上百家乐是假还是真的| bet365官方网站| 电脑百家乐官网玩| 新百家乐的玩法技巧和规则| 湟中县| 百家乐官网天下| 百家乐官网棋牌游戏源码| 百家乐的桌子| 克拉克百家乐的玩法技巧和规则| 黎平县| 百家乐路单资料| 大发888手机好玩吗| 百家乐官网扑克多少张| 百家乐新送彩金| 什邡市| 做生意门口怎么摆放| 大发888体育开户| 百家乐官网牌| 百家乐官网单机游戏免费下| 百家乐桌布无纺布| 赌博百家乐官网经验网| 百家乐韩泰阁| 波音百家乐官网现金网| ea百家乐打水| 百家乐官网扑克牌耙| 鑫鼎百家乐娱乐城| 百家乐官网打连技巧|