欢迎光临散文网 会员登陆 & 注册

Linux内核邻居子系统的学习-arp request报文的发送条件

2023-03-22 22:23 作者:满地是悲伤  | 我要投稿

邻居子系统的作用就是将ip地址转换成一个mac地址


在ipv4中就是通过arp协议来完成该操作

在iipv6中就是通过ndp协议来完成该操作


        当发送一个报文的时候,需要知道报文的目的地址和mac地址,现在我们已经知道了目的地址,那么arp报文是什么时候发送出去的呢?

内核4.19

ip_output_finish2

 1. 当通过内核协议栈发送报文的时候进入ip_output_finish2,此处通过rt_nexthop找到目的地址,有网关则使用网关地址否则使用传入的daddr

2. 调用__ipv4_neigh_lookup_noref以nexthop为key值在arp_tbl中找邻居表项

3. 没有找到则会调用__neigh_create创建一个邻居表项,状态为NUD_NOARP,之后返回一个neigh结构体。

4. 找到则直接调用neigh_output即调用neigh_resolve_output(对于此处第一次发送该报文,函数调用在arp_constructor中设置),发送arp请求报文,状态变为NUD_INCOMPLETE,去请求nexthop的mac地址。之后就是arp协议的状态机流程。



Linux内核邻居子系统的学习-arp request报文的发送条件的评论 (共 条)

分享到微博请遵守国家法律