[網路]IP&MAC地址 - 網路通訊世界的大門

每一個網卡都有一個IP和MAC,是在網路世界的通訊地址,相當於現實中家家戶戶的門牌號碼

警察要找你,他是怎麼透過你的身分證找到你的呢?
藉由身分證上的戶籍地址(IP),找到了你的家,按下你家的門鈴後,大喊了身分證號碼(MAC),你到了門口,警察就這樣找到你了

IP地址

IP地址就像是電腦網卡裡家家戶戶的門牌號碼。有了IP,資料就能一層層路由到目的地電腦。我們要怎麼查電腦裡的IP門牌號碼呢?

在Linux,有兩個指令可以查詢,分別為ifconfigip addr

ifconfig

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#> ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)
RX packets 6251 bytes 9073424 (8.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3111 bytes 170522 (166.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ip addr

1
2
3
4
5
6
7
8
9
10
11
12
13
#> ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000
link/tunnel6 :: brd ::
13: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever

ifconfig來自於Linux的net-tools,而ip addr來自於iproute2。net-tools起源於BSD,自2001年起,Linux社群已經對其停止維護,而iproute2旨在取代net-tools,並提供了一些新功能。一些Linux發行版已經停止支援net-tools,只支援iproute2。net-tools通過procfs(/proc)和ioctl system call去訪問和改變kernel網路設定,而iproute2則通過netlink socket interface與kernel通訊。net-tools中工具的名字比較雜亂,而iproute2則相對整齊和直觀,基本是ip command加後面的sub-command。不過這麼多年過去了,net-tool依然還在被廣泛使用,最好還是兩套指令都掌握吧。

IP地址是門牌號碼,所以不能大家都一樣,不然就會起衝突。舉個例子,132.128.200.32是一個IP地址,由三個”.”分成四個部分,每個部分有8個bit,四個部分加起來總共有32個bit,也就是最多只能產生2**32個門牌號碼。因為不夠用,所以有了IPv6,也就是上面的輸出結果fe80::ca61:d665:1750:e806,總共有128位,看起來應該是夠了。

現有的32bit IP地址不夠用,於是IP地址分為私人IP(內網IP)和公共IP(任何地方都能連的IP,例如Google)。私人IP地址的目的是為了安全以及讓更多電腦能有自己的IP地址。試想一下,如果大家都能訪問你的電腦,如果你的電腦被植入了惡意程式,某個port被打開,是如此的不安全。下面的IP地址範圍就是私人地址:

地址範圍 數量
10.0.0.0–10.255.255.255 16,777,216
172.16.0.0–172.31.255.255 1,048,576
192.168.0.0–192.168.255.255 65,536

所以下次你跑ip addr看到你的IP是192.168.2.132,不用懷疑,你在私人IP裡,外面的電腦無法和你的電腦連結。

MAC地址

MAC地址是一個容易和IP地址誤解的地址,因為MAC地址號稱全世界唯一,那既然唯一了,為何我們還要IP地址呢?其實MAC地址與其說是個地址,不如說它是個網路ID。

舉個例子,我們要找一個人,他的身分證是A123456789,身分證上面寫的地址是台北市文山區興隆路五段9弄18號4樓。後面的地址就像是電腦的IP,而身分證就是這個人。

MAC地址其實是可以改的,只要不要在同個內網下有多個相同的MAC地址。就像是同個家庭,不要有重複的”身分證”。從上面的ip addr指令,我們可以看到MAC地址是02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff

總結

本篇文章講述了IP地址和MAC地址的差別,以及怎麼查詢我們的IP和MAC地址:

  • IP地址 - 電腦的門牌地址,目的是路由,常見於TCP/IP五層的第三層
  • MAC地址 - 電腦的唯一ID,目的是最終指向目的地電腦,常見於TCP/IP五層的第二層(鏈接層)