TCP/IP协议(4): 地址解析协议(ARP)——网络地址转换为物理地址的方式

关于地址解析协议(Address Resolution Protocol, ARP)

关于 ARP

地址解析协议(Address Resolution Protocol, ARP) 协议是用于根据给定网络层地址,通常是 IPv4地址,查找其对应的数据链路层地址,如 MAC地址,的协议。 ARP 协议 定义于 1982 年的 RFC 826
(The Address Resolution Protocol (ARP) is a communication protocol used for discovering the link layer address, such as a MAC address, associated with a given network layer address, typically an IPv4 address. ARP was defined in 1982 by RFC 826.)

ARP 协议在 TCP/IP 协议栈中的位置

由于 IP 协议 中使用了 ARP 协议,因此通常将 ARP 协议归为网络层协议。
ARP 协议的用途是从网络层使用的 IP地址 中解析出在数据链路层使用的硬件地址。其消息由数据链路层协议封装,它是在同一局域网内部通信的,从不跨网络节点路由。因此,也可以认为 ARP 协议数据链路层协议。

地址解析协议的主要内容

本节内容改编自谢希仁编著**《计算机网络(第六版)》4.2.4 地址解析协议 ARP**。

  • 如下图的网络中, 主机 A 要向某网络设备 X 发送数据时,需要先在其 ARP 高速缓存中查看有无 网络设备XIP 地址。如果有,则直接在 ARP 高速缓存 查出其对应的 物理地址
  • 否则,主机 AARP 进程在本地局域网发送 ARP 请求广播。如下图。
  • 在本地局域网中的所有主机上运行的 ARP 进程 都收到此 ARP 请求。如下图。
  • 主机 DIP 地址和要查询的网络设备 X 一样,它在收到该 ARP 请求后向主机 A 发送 ARP 响应
  • 主机 A 收到主机 BARP 响应后, 会在其 ARP 高速缓存中记录 主机BIP 地址到其硬件地址的映射。

注意: ARP 协议是局域网内部的协议。它解决的是同一局域网内部的主机或路由器IP 地址和其对应的硬件地址的映射问题。根据 ARP 协议 , 主机 A 无法解析其他网络中的主机的硬件地址。实际上,也不需要主机 A 解析其他网络的主机地址。因为跨网络的数据传输一般是由上层协议来完成的。

地址解析协议包(Packet)格式

  • 硬件类型(Hardware Type, HTYPE): 当前网络数据链路层的协议类型, 实际指定了硬件地址类型。如,以太网HTYPE1
  • 协议类型(Protocol Type, PTYPE): 上层网络协议,实际指定了待映射的网络地址的类型。如,IPv4 协议PTYPE0x0800
  • 硬件大小(Hardware Length, HLEN): 硬件地址的长度(单位: 八位字节(Octets))。以太网HLEN6
  • 协议大小(Protocol Length, PLEN): PTYPE 指定的上层协议的网络地址长度(单位:八位字节(Octets))。IPv4 协议PLEN4
  • 操作(Operation, OPER): 该协议包的操作。ARP 请求包OPER1,而ARP 响应包OPER2
  • 发送方硬件地址(Sender Hardware Address, SHA): 发送方的硬件地址
  • 发送方协议地址(Sender Protocol Address, SPA): 发送方的上层协议的网络地址
  • 目的硬件地址(Target Hardware Address, THA): 接收方的硬件地址。在 ARP 请求包THA0
  • 目的方协议地址(Target Protocol Address, TPA): 接收方的上层协议的网络地址

地址解析协议的具体内容

  • 主机 AARP 进程在本地局域网发送 ARP 请求广播。
  • 主机 DIP 地址和要查询的网络设备 X 一样,它在收到该 ARP 请求后向主机 A 发送 ARP 响应

参考文献

TCP/IP协议(4): 地址解析协议(ARP) —— 网络地址转换为物理地址的方式的更多相关文章

  1. TCP/IP的排头兵――地址解析协议(ARP) (转载)

    转自:http://blog.csdn.net/wangxg_7520/article/details/2488442 一.引言 古人行军打仗,都要有一个可以引领队伍前进方向的排头兵,在TCP/IP网 ...

  2. TCP/IP协议和OSI协议

    作为一个与网络密切相关的Web前端工程师,TCP/IP和OSI模型不可不知,至少要知道一下这些常识性知识,在这我做一下记录 TCP/IP协议簇: TCP/IP是一组协议的代名词,包括许多别的协议,组成 ...

  3. TCP/IP,HTTP,SOAP等协议之区别

    术语TCP/IP代表传输控制协议/网际协议,指的是一系列协议.“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另一个网络.把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到 ...

  4. 计算机网络(二),TCP/IP四层模型常见协议

    目录 1.应用层协议 2.传输层协议 3.网络层协议 4.链路层协议 二.TCP/IP四层模型常见协议 1.应用层协议 (1)POP3 (2)FTP (3)HTTP (4)Telnet (5)SMTP ...

  5. 08_使用TCP/IP Monitor监视SOAP协议

    [SOAP定义] SOAP   简单对象访问协议,基于http传输xml数据,soap协议体是xml格式.SOAP   是一种网络通信协议SOAP   即Simple Object Access Pr ...

  6. 使用TCP/IP Monitor监视Soap协议

    什么是soap? soap,简单对象访问协议,基于http传输xml数据,soap协议体是xml格式. SOAP 是一种网络通信协议 SOAP即Simple Object Access Protoco ...

  7. TCP/IP详解之:ARP协议 和 RARP协议

    ARP功能:从逻辑internet地址(IP地址)到对应的物理硬件地址(以太网地址)之间的转换 ARP工作原理: (1)首先每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP和MAC间的 ...

  8. TCP/IP的网际层协议——ARP

    MAC地址对于每一台设备是全球唯一的,该地址被烧录在网卡的硬件电路上.MAC地址由12位十六进制数表示,其中前6位标识网卡的制造厂商,后6位是网卡的序列号.在以太网中,一个主机要和另一个主机进行通信, ...

  9. TCP/IP,HTTP,HTTPS,WEBSocket协议

    我看看着挺多的,我暂时没时间自己写,有需要的请借鉴 http://mp.weixin.qq.com/s?__biz=MzI0MDQ4MTM5NQ==&mid=2247486927&id ...

  10. tcp/ip协议和http协议

    TCP/IP 是一类协议系统,它是用于网络通信的一套协议集合. 传统上来说 TCP/IP 被认为是一个四层协议:应用层(telnet, ftp, http, smtp, dns等),传输层(tcp, ...

随机推荐

  1. 关于linux上strongswan客户端的配置

    前言 这几天回家了,想连学校的vpn, 学校vpn用的是strongswan的EAP认证(不需要证书什么的),手机上直接用软件连接就可以了,windows也是内置了这个协议,无奈我用的是linux m ...

  2. 这么简单,还不会使用java8 stream流的map()方法吗?

    一.前言 在日常的开发工作中经常碰到要处理list中数据的问题,比如从数据库中查出了很多学生,由于一些原因需要在内存中找出这些学生中的所有姓名,或者把名为"王五"的语文成绩暂时修改 ...

  3. Node.js躬行记(25)——Web自动化测试

    网页在提测流转给 QA 后,如何能帮他们更有效而准确的完成测试,是我一直在思考的一个问题. QA 他们会对网页编写测试用例,在提测之前会让我们将优先级最高的用例跑通,这在一定程度上能够避免频繁的返工, ...

  4. Hexo+Gitee免费搭建静态博客

    前言 这是一篇利用 Gitte Pages + hexo 搭建属于自己博客的教程,也是自己这个博客搭建好以后的第一篇文章,搭建的过程中也参考了各路大佬的文章,期间遇到了一些问题,所以写这一篇文章即是记 ...

  5. choices参数

    目录 一:choices参数 1.choices参数作用 2.列举: 3.choices效果 二:choices使用 1.创建字段类型 2.验证choices 3.使用测试脚本 4.将manage.p ...

  6. LeetCode HOT 100:搜索旋转排序数组

    题目:33. 搜索旋转排序数组 题目描述: 一个整数数组,数组每个值都不相同,且该整数数组是一个被旋转过的数组.被旋转过的数组是指,由一个递增的数组,从某一个下标开始往后的元素,移到最开头.举个例子: ...

  7. STL string常用API

    #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> using namespace std; ...

  8. 封装一个python的pymysql操作类

    最近使用pymysql写脚本的情况越来越多了,刚好整理,简单封装一个pymysql的操作类 import pymysql class MysqlDB: def __init__( self, host ...

  9. pythonfloat优雅的四舍五入

    开发中经常会有float四舍五入转int的需求,先看看浮点数直接转int的情形:无论如何float直接转int都不会四舍五入,而是直接抹去小数点. 这个需求很简单,实现也很简单,看过网友的实现,都不够 ...

  10. CH9434-MCU代码移植,芯片使用详细说明(附Linux开发资料链接)

    简介 CH9434是一款SPI转四串口转接芯片,提供四组全双工的9线异步串口,用于单片机/嵌入式/安卓系统扩展异步串口.提供25路GPIO,以及支持RS485收发控制引脚TNOW.本篇基于STM32F ...