Linux邻居协议 学习笔记 之一 邻居协议概念及arp帧格式
什么是邻居协议?如果一台主机和你的计算机连接在同一个LAN上(也就是说,你和这台主机通过一个共享介质相连或点对点直接相连),那么它就是你的邻居,而且他们有相同的L3网络配置。定义邻居的另一种方式是,一台主机到其邻居必须有且仅有一个L3跳跃点,并且它的L3路由表必须提供可以直接和其邻居通信的一条路劲。不是邻居的主机间通信必须通过网关或路由器。 neighbour项是在什么时候创建的呢?
什么是邻居协议?
如果一台主机和你的计算机连接在同一个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请求为1,ARP响应为2,RARP请求为3,RARP响应为4。目前我们只需要arp请求与arp应答
更多推荐
所有评论(0)