Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> Linux系統教程 >> Linux教程 >> linux協議棧之鄰居子系統(概述一)

linux協議棧之鄰居子系統(概述一)

日期:2017/2/7 14:39:46      編輯:Linux教程
 

一:鄰居子系統概述

鄰居子系統是從物理來說是指在同一個局域網內的終端。從網絡拓撲的結構來說,是指他們之間相隔的距離僅為一跳,他們屬於同一個突沖域

鄰居子系統的作用:

它為第三層協議與第二層協議提供地址映射關系。

提供鄰居頭部緩存,加速發包的速度

二:鄰居子系統在整個協議棧的地位

發送數據的時候,要在本機進行路由查找,如果有到目的地地址的路徑,查看arp緩存中是否存在相應的映射關系,如果沒有,則新建鄰居項。判斷鄰居項是否為可用狀態。如果不可用。把skb 存至鄰居發送對列中,然後將發送arp請求。

如果接收到arp應答。則將對應鄰居項置為可用。如果在指定時間內末收到響應包,則將對應鄰居項置為無效狀態。

如果鄰居更改為可用狀態,則把鄰居項對應的skb對列中的數據包發送出去



三:流程概述;

發包流程。

下面以包送udp數據為例,看看是怎麼與鄰居子系統相關聯的

Sendmsg() à ip_route_output()(到路由緩存中查找目的出口)à ip_route_output_slow( 如果緩存中不存在目的項,則到路由表中查找) à ip_build_xmit() à output_maybe_reroute à skb->dst->output()

如果至時找到了路由,則根據路由信息分配個dst_entry,並調用arp_bind_neighbour為之綁定鄰居 output指針賦值為ip_output

轉到執行ip_output

ip_output à __ip_finish_output() -à ip_finish_output2() à dst->neighbour->output()

現在就轉至鄰居項的出口函數了。關於上述詳細流程,將在以後的學習中繼續給出

Neighbour->output怎麼處理呢?我們從初始化時看起
 

Copyright © Windows教程網 All Rights Reserved