Linux邻居协议 学习笔记 之一 邻居协议概念及arp帧格式

什么是邻居协议?

如果一台主机和你的计算机连接在同一个LAN上(也就是说,你和这台主机通过一个共享介质相连或点对点直接相连),那么它就是你的邻居,而且他们有相同的L3网络配置。定义邻居的另一种方式是,一台主机到其邻居必须有且仅有一个L3跳跃点,并且它的L3路由表必须提供可以直接和其邻居通信的一条路劲。不是邻居的主机间通信必须通过网关或路由器。

 

neighbour项是在什么时候创建的呢?

这需要从两个方向来分析,发送与接收:

1、对于发送方向来说,当路由器需要转发或者需要自己发送一个数据包时,会去查找路由表当查找到的路由没有在路由缓存中时,则需要为该路由建立一个路由缓存并加入到路由缓存链表中,同时会调用arp_bind_neighbour实现路由缓存与neighbour的绑定(如果没有相应的neighbour项,则创建neighbour)。然后再判断neighbour项是否可用,若不可用,则将数据包存入队列中,并发送arp 请求,在接收到请求后,则将neighbour项设置为可用,并将数据从队列中取出并发送出去其邻居项的状态转换为NUD_NONE -> NUD_INCOMPLETE -> NUD_REACHABLE

 2、对于接收方向来说,当主机接收到arp request报文,则认为主机与发送请求报文之间的链路为通的,则为该发送主机创建一个邻居表项,并将其状态设置为NUD_STATE,其邻居项的状态转换为NUD_NONE -> NUD_STALE -> NUD_DELAY -> NUD_PROBE -> NUD_REACHABLE

 

Arp协议帧格式

 

对于操作码,用于表示数据包的类型,ARP请求为1ARP响应为2RARP请求为3RARP响应为4。目前我们只需要arp请求与arp应答


你可能感兴趣的:(Linux邻居协议 学习笔记 之一 邻居协议概念及arp帧格式)