这是最近在看《TCP/IP具体解释》系列书总结出来的,之后会陆续把其它协议部分分享出来。

我尽量以简单易读、易懂的方式呈现出来,可是,因为文笔和水平有限。有些地方或许存在描写叙述上的不足或繁琐或缺失,还请各位看官指出。我会尽量去弥补和更正。

这序列文章,首版是在公众平台公布。同一时候会同步到csdn(http://my.csdn.net/xiongxianhe),欢迎大家指正和交流。


ARP协议。将分下面序列:

1、什么是ARP协议

2、ARP协议格式具体解释

3、ARP协议编程

4、ARP协议欺骗和攻击

5、ARP安全防护



一、什么是ARP协议
1、我们先来看看TCP/IP协议族的四个层次。如图(图片来自《TCP/IP具体解释卷1》)

我们计算机接入互联网的主要目的是获取别人计算机上的资源,或者供别人获取我们的资源。
那我们怎样能到达别人的计算机呢?聪明的人类就用地址来标识互联网上的每台机器,我们日常所说的IP地址等。

比方。要获取我之前写的“在线编译器”代码的话。你就能够用

 ftp://115.29.235.230/pub/MyProject/CompileOnline/ 
当中115.29.235.230就是一个ip地址。

可是有了IP地址还不够,由于IP地址是网络层(TCP/IP协议族)使用的。计算机最后是要在物理设备(网卡、网线等)上传输的,因此还必须有个计算机的物理地址,我们称为:MAC地址或物理地址(每台机器在出厂后。mac地址就已经确定,而且是唯一的)。

因此要使两台机器能通信,IP地址和MAC地址是不能少的。

ftp://115.29.235.230/pub/MyProject/CompileOnline/,我仅仅给出了IP地址。却没有MAC地址。但我在浏览器里訪问得到,这个是怎么来实现的呢?此时我们的ARP就出场了:

ARP(Address
Resolution Protocol)。地址解析协议。它是将IP地址转化为MAC地址的协议规则。


Q:ARP是怎样将IP地址转为MAC地址的?
A:每台机器内核都实现了ARP协议。

它是通过一个快速缓存。把IP映射到相应的MAC。你能够在你机器上运行命令
arp -a,将会出现你机器如今缓存的IP和MAC的映射。如:


Q:这张映射表是怎样生成的?
A:
(1)这张表中。每条记录(非静态)的生存时间一般为20分钟,起始时间从被创建開始算起,一旦过期,将在这张表中删除。(手动删除所有。能够用 arp -d *命令)。

(2)当A主机要发送信息给B时,A先在ARP快速缓存里查询B的IP是否有相应的MAC地址。假设有则把B IP相应的MAC地址取出封装在数据包里,然后发送出去。
(3)假设A在ARP快速缓存里没有找到B IP相应的MAC,则向A所在的局域网内广播或者询问网关(路由):谁有B IP的MAC,请告诉A。
(4)假设B和A是同一个局域网,B回这条信息,并把B的MAC地址带上,A再把B的IP和MAC写入到ARP的快速缓存里(一般有效时间为20分钟)。

(5)假设B和A不是同一个局域网。而且A所在的网关知道(或间接知道(询问和发包))B的MAC。则网关发消息给A,而且带上B的MAC地址。A收到消息后,再把B的IP和MAC写入到ARP的快速缓存里(一般有效时间为20分钟)。
(6)假设没人回应。则超时,对方不可达。

Q:那B的IP地址。A怎么知道?
A:(你猜。)

上面的问答形式,如今明确了ARP是干嘛的吧?
对,就是你想的那样的!

以下一篇,我们来学习下 ARP 协议的格式


公众号


最新文章

  1. java io系列14之 DataInputStream(数据输入流)的认知、源码和示例
  2. 把Arraylist转换成GameObject[]
  3. FusionCharts xml入门教程
  4. uvalive4513
  5. ubuntu下apache与php配置
  6. 摘抄官方文档: spring boot配置 iframe同源可访问
  7. window.open的小技巧分享
  8. (转)js 正则表达式之test函数讲解
  9. was服务器下修改jsp无效果
  10. HDU 5171 GTY's birthday gift 矩阵快速幂
  11. Android自学反思总结(中)
  12. Banner图二三事
  13. Dapper数据库相关操作
  14. 几种常用hash算法及原理
  15. (一〇二)静态库(.a)的打包
  16. vue中data中引用本地图片报错404
  17. GET 和 POST 请求的优缺点和误区
  18. lsof 命令
  19. Luogu4770 NOI2018你的名字(后缀数组+线段树)
  20. SQL Fundamentals: Basic SELECT statement基本的select语句(控制操作的现实列)(FROM-SELECT)

热门文章

  1. Set容器——HashSet及常用API
  2. ICCID
  3. 刷题总结——二逼平衡树(bzoj3224线段树套splay)
  4. bzoj 3208 花神的秒题计划I
  5. 【BZOJ1059】矩阵游戏(二分图最大匹配)
  6. 【Visual Studio】error: /ZI”和“/Gy-”命令行选项不兼容(转)
  7. brk(), sbrk() 用法详解【转】
  8. Visual Studio Code 使用教程
  9. AC日记——线段树练习4 codevs 4919
  10. AC日记——三连击 洛谷 P1008