天天看點

108-網絡接口

1. 接口

網卡,是讓計算機通向外部世界的一扇大門。但是在計算機的世界裡,一般這扇門稱為“接口(Interface)”。接口是實體意義上的裝置。

在 Linux/Unix 中,我們使用 ​

​ifconfig​

​ 指令來檢視接口資訊:

108-網絡接口

圖1 接口資訊

接口通常都有自己的屬性,比如在圖1 中我們可以看到:

  • 有自己的名字,比如 ens33, lo, virbr0.
  • 有一些标志位,比如 UP, BROADCAST, RUNNING, MULTICAST 等等。
  • 有 ip 位址,子網路遮罩,廣播位址
  • 有實體位址,比如 ether 00:0c:29:03:40:40

2. 接口名稱與接口索引号

每個接口都有自己的名字,比如圖 1 中三個接口名字分别是 ens33, lo, virbr0.

除了 ifconfig 中列舉的屬性外,接口還有自己的編号,也稱為接口索引号(interface index)。

程式 if_nametoindex 能幫我們根據接口名字檢視接口對應的索引号:

108-網絡接口

圖2 檢視接口的索引号。

程式位于路徑​

​unp/program/test/interface​

​下.

程式 if_indextoname 能幫我們根據接口索引号檢視接口對應的名字:

108-網絡接口

圖3 檢視接口名稱

從圖 3 可以看到,接口 0 是不存在的。寫程式的時候,通常用 0 來表示不存在的接口。

3. 相關函數

圖 2 和圖 3 中的程式就是使用下面這兩個函數實作的,使用起來相當簡單。當然代碼我就不貼出來了,你可以自己去 ​

​unp/program/test/interface​

​ 路徑下檢視源代碼。

unsigned int if_nametoindex(const char *ifname);
char *if_indextoname(unsigned int ifindex, char      

還有一對函數(第二個用是釋放資源的),主要用來:

struct if_nameindex *if_nameindex(void);
void if_freenameindex(struct if_nameindex *ptr);      
struct if_nameindex {
  unsigned int if_index;
  char *if_name;
  // 其它成員      

4.總結

  • 掌握接口的基本概念
  • 接口名稱和接口索引

繼續閱讀