码迷,mamicode.com
首页 > 其他好文 > 详细

lwip之三:arp

时间:2016-05-11 19:43:12      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:

三、Arp

1.直观的arp

Wireshark中的arp

技术分享 

先看下Comerxinu中的概略图,可以看出arp进入ethernet layer(不再深入ip layer)就直接从ethernet layer出来了。从lwip的代码中也可以很清晰地看出。

 

技术分享 

2.arp作用

配对[mac, ip]Mac是固定的(绝大部分场景不会更改),但ip是会随机变动的。当连接一个新的ip(arp表项中不存在),本机会发送arp req,找寻和此ip吻合的mac

第一条是本机arp req,第二条是[192.168.1.168]arp reply。本机收到此reply后,就刷新到本机的arp表项中,然后就可以愉快地交流了。

技术分享 

3.arp发生时刻

Ø本机网卡up时,此时为gratuitious arp

其实就是一个签到,表明自己准备加入组织了,组织其他成员是否有用到想用的别名的,没人用就不要吭声(期望没人用),有人用的话就吭声(ip地址冲突了)

Frame_172:sendr ip为空,现在还没有别名;target ip101所欲也。注意src.ip = 0

技术分享 

Frame_363:哎,这个别名有这么贱么,竟然没人跟抢,就勉为其难了吧。注意dst.mac=0

技术分享 

lwip相关代码

技术分享 

意外:正常情况下,arp协议对不吻合自己ip的都不会reply的。但如果有机器乱reply呢。

本机[192.168.1.103] arp req [192.168.1.104],但[192.168.1.105]强行reply了。本机的arp表项就变成了

{[192.168.1.104]mac_104}--------->{[192.168.1.105]mac_105}本机发送给[192.168.1.104]的数据实际发送到了[192.168.1.105]

因为在ethernet layer中的Destination addr == mac_105

Ø连接一个新的ip(arp表项中不存在)

下图为ping 192.168.1.188,此ip不在本网络。

技术分享 

技术分享 

下图为ping 192.168.1.101,此ip在本网络。

技术分享 

技术分享 

[192.168.1.101]存在于arp表项中时,再次ping 101,是不会有发生对应的arp的。本机直接从arp表项中获取ip了。

arp -d 192.168.1.101删除后,再ping,就会发生了。

 

下图为完整的[192.168.1.100]ping[192.168.1.115]一次的抓包。Ok后双方都建立了对应的arp table

Frame_068:[192.168.1.100]req-->[192.168.1.115]

Frame_069:[192.168.1.100]resp<--[192.168.1.115]

Frame_194:[192.168.1.115]req-->[192.168.1.100]

Frame_195:[192.168.1.115]resp<--[192.168.1.100]

技术分享 

 

为什么[192.168.1.100]-->[192.168.1.115]42

原因:wireshark运行在[192.168.1.100],可能没有统计18字节的技术分享

Trailer   帧中填充的数据,为了保证帧最少有64(包括4字节CRC)个字节。

Ø周期性refresh

etharp_tmr():1S间隔执行一次,更新动态表项。

l非静态表项&& (state != ETHARP_STATE_STATIC)才执行refresh动态表项

lclean up entries that have just been expiredetharp_free_entry()

lstill pending, resend an ARP queryetharp_request()

Ø大致流程图(非周期性)

技术分享 





lwip之三:arp

标签:

原文地址:http://www.cnblogs.com/freezlz/p/5483191.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!