電腦網路與作業系統 電腦網路與作業系統

電腦網路與作業系統上課教材 - 2018 年版

電腦網路與作業系統 > 課程內容 > 第 10 堂課 - 區域網路與 IP 設定 (vim 使用)

第 10 堂課 - 區域網路與 IP 設定 (vim 使用)

上次更新日期 2018/05/08

大致了解了網際網路相關的網路模型與重要的 TCP/IP,並且大概理解現今在機房常見的網路連線設備後,現在讓我們來了解一下什麼是 IP , 還有 IPv4 與 IPv6 的差別,以及透過 vim 這個 Linux 的軟體來嘗試修改相關的設定資料。還有,在 Linux 上面要如何建立、修改、啟動、觀察網路的功能, 這都需要理解理解。

  • 10.1: IP 位址與區域網路
  • 10.2: 區域網路與網際網路連線
  • 10.3: Linux 網路參數設定與觀察 + vim
  • 10.4: 課後練習

10.1: IP 位址與區域網路

網際網路很多的設計其實應該是有參考人類的郵務系統~所以,我們說,網路主機都會有個門牌,這個門牌就是代表人家怎麼來到你的伺服器的主要目標, 這個目標就是 IP 位址囉!目前常用的 IP 位址還是 IP 第四版 (IPv4),這一版的 IP 位址共佔用 32 bit 的長度,也就是 32 個 0 與 1 組合而成的位址長度。 亦即最小與最大:

  • 二進位最小:00000000000000000000000000000000
  • 二進位最大:11111111111111111111111111111111

上述的字串你背的出來倒也真是相當不容易~為了讓人類使用習慣的 10 進位數字來記憶,因此許多作業系統都提供 8 位元為一組共拆成 4 組的 IP 位址設計方式, 並且四組之間透過小數點 (.) 來區分,因此就變成這樣:

  • 二轉十進位最小:00000000.00000000.00000000.00000000 ==> 0.0.0.0
  • 二轉十進位最大:11111111.11111111.11111111.11111111 ==> 255.255.255.255
  • 同一區域網路的 IP 位址:從定義上來講 (需要背的定義)

從前一小節我們知道所謂的『區域網路』裡面的所有主機,都可以透過網路卡的廣播來直接溝通,因此,區域網路的大前提是所有的 node 都是透過同一段物理網段來連接, 中間並沒有經過什麼閘道器或路由器的環境。這就是硬體廣播環境。

但是,網際網路的電腦主要是透過 IP 位址作為門牌的,因此,我們得需要在同一個 IP 位址網段內才能夠直接溝通!這也像是『住在巷子內的住家, 門牌前面會是相同的 XX區XX路XX巷YY號,只有 YY 會不同,其他都一樣,就是同一個巷子,就是同一個 IP 位址網段』!這是屬於軟體的定義。

在相同的 IP 位址網段內,並且接在同一個物理廣播網段,則所有的網路主機都可以直接透過廣播來溝通,無須經過路由器來轉遞封包! 但在不同的 IP 位址網段內,即使是接在同一個物理廣播網段,那麼資料也是不能溝通的!仍須透過路由器才能夠進行轉遞溝通。

為了讓 IP 網段能夠較簡單的定義出來,因此 IP 位址一開始設計時,給了最原始的三個等級,分別如下:

  • Class A: 2 進位開頭為 0 的那個位址
  • Class B: 2 進位開頭為 10 的那個位址
  • Class C: 2 進位開頭為 110 的那個位址
依據上述的 IP 等級 (class A, B, C),計算出 10 進位的 IP 位址的第一組數值。
  1. Class A 第一組 8 個位元最小 0-0000000,最大為 0-1111111,因為根據定義來說,開頭第一個位元必須是 0 才是 class A 的 IP 位址。 因此,算出第一組 10 進位的 IP 位址在 0 ~ 127 之間,都是 Class A 的 IP 位址範圍。
  2. 計算 Class B 的第一組 10 進位數值範圍
  3. 計算 Class C 的第一組 10 進位數值範圍

那根據 Class A, B, C 這三個等級的 IP 位址中,哪些範圍內的 IP 位址被稱為是同一個 IP 網段呢?同樣的以人類郵務系統的門牌來說, 我們怎麼知道某些門牌跟崑山科大是同一個巷子內的門牌呢?讓我們來拆解崑山科大的門牌號碼:

  • 台南市 . 永康區 . 崑大路 . 195 號

若『台南市』的 IP 位址範圍是在 Class A 以內,那麼任何的『 台南市 . XX . YY . ZZ 』都可以算是同一個 IP 網段喔! 若『台南市』的 IP 位址範圍是在 Class C 以內,那麼任何『台南市 . 永康區 . 崑大路 . ZZ 』才能算是同一個 IP 網段。也就是說:

  • Class A 只要第一組 10 進位數值相同,其他可以隨意設定
  • Class B 則是前兩組 10 進位數值要相同,其他可以隨意設定
  • Class C 則是前面三組 10 進位數值要相同,其他可以隨意設定
底下的題目是『從定義上來說』,請問:
  1. 168.95.1.1 是 Class 多少的 IP 位址?
  2. 請問 168.33.1.1 與 168.95.1.1 是否為同一個 IP 網段
  3. 請問 201.66.3.2 與 201.66.3.253 是否為同一個 IP 網段
  4. 請問 8.8.8.8 與 8.10.10.10 是否為同一個 IP 網段?
  5. 請問 138.8.8.8 與 138.10.10.10 是否為同一個 IP 網段?
  6. 請問 168.95.1.1 這個 IP 位址,是在哪一個 IP 網段的範圍內 (寫下第一個與最後一個 IP 位址)
並且依據定義來說,請問:
  1. Class A 共有幾組?
  2. Class B 共有幾組?
  3. Class C 共有幾組?
  • 子網路遮罩: netmask 的定義

另外,除了定義上的 Class A, B, C 之外,還有另一個參數可以影響 IP 位址的範圍!那就是 netmask (子網路遮罩)。 同樣的,依據標準定義, netmask 針對 Class A, B, C 制定了標準數值:

  • Class A 的 netmask 為 255.0.0.0
  • Class B 的 netmask 為 255.255.0.0
  • Class C 的 netmask 為 255.255.255.0

基本上,IP 位址需要與 netmask 位址做搭配才行~舉例來說, 8.8.8.8 為 Class A 的 IP 範圍,而這個 Class A 的 netmask 為 255.0.0.0,你可以假想一下, netmask 裡面規範的 255 指的是巷子的號碼, 0 為各戶的號碼,因此,與 IP 位址搭配時,第 1 組的 10 進位數值就是巷子號碼,不能變更, 而後面的 3 個 0 ,就代表有 3 組 10 進位的數值不能重複的意思。也因此,這個 IP 位址段落習慣上就會被寫成:

  • 8.8.8.8/255.0.0.0

然後根據定義,我們也能夠知道 8.8.8.8 所在的 IP 位址網段的第一個 IP 為 8.0.0.0 而最後一個 IP 位址則為 8.255.255.255 囉。 你有沒有發現到 IP 範圍與 netmask 的關係了呢?

寫下 172.30.0.1 這個 IP 位址所在的 IP 網段之:
  • netmask 位址:
  • 同 IP 網段的第一個 IP 位址
  • 同 IP 網段的最後一個 IP 位址

另外,我們知道 255.0.0.0 轉成 2 進位其實是 11111111.00000000.00000000.00000000,其中位元為 1 的有 8 個,因此, 8.8.8.8/255.0.0.0 也能夠寫成:

  • 8.8.8.8/8
在標準定義下:
  • 192.168.30.30 寫成 IP/netmask 是如何?
  • 同時將 netmask 轉成位元數,又該如何寫?

我們取 172.16.0.0 這一個 IP 來說明一段區域網路的話,那麼區域網路的參數就會有:

  • netmask (子網域遮罩):255.255.0.0 或 /16:功能是在定義出區域網路的『巷子』號碼所在處,也是 32 位元,只是作為網域 ID 的位置全部為 1 , 而作為主機 ID 的位置則全部為 0 ,因此 Class B 的預設 netmask 就會是 11111111.11111111.00000000.00000000
  • network IP(網域 IP 位址,亦即是第一個 IP 位址的意思):172.16.0.0:網域 ID 是不可變的,而主機 ID 可以全部是 0 (最小),此時就是網域 IP 位址! 這個位址搭配 netmask 則是一整個網域的代表數字
  • broadcast IP (廣播 IP 位址,亦即是最後一個 IP 位址的意思):172.16.255.255:網域 ID 是不可變的,而主機 ID 可以全部是 1 (最大),此時就是廣播 IP。 network IP 與 broadcast IP 是有特殊用途的,因此不能作為一般裝置設定 IP 之用
  • 可用 IP 位址範圍:172.16.0.1 ~ 172.16.255.254 :就是去掉 network IP 與 broadcast IP 之後的其他 IP 位址。

基本上,目前許多的設定值都已經取消了 Class A, B, C 的規範,而是透過『 Network IP / Netmask 』來規範整組 IP 網段的!因此,你要學著熟悉這種 IP 網段表示方法! 當然,最傳統的 Class A, B, C 定義也是需要理解的,那是一切的基礎!

有個 IP 網段為: 201.25.31.50/24,以 10 進位的數值寫出下列的位址:
  • Netmask
  • Network IP
  • Broadcast IP
  • 可用於設定在網際網路主機上面的可用 IP (是一組範圍)
那麼可用的 IP 數量各不同的 IP 等級範圍具有幾台?
  • Class A
  • Class B
  • Class C
  • IP 的種類 (Public/Private)

人類的郵務系統中,門牌號碼有真的也有假的~也就是說,門牌有公開的也有私有的~公有的門牌是政府所制定的,所以,任何人在街道上面查詢, 都可以順利的找到你家的公有門牌號碼。那我們也可以自己在門牌上面貼上假門牌喔!舉例來說,假設我們巷子裡面的所有用戶想要美化自己的門牌, 所以就會在真的門牌底下貼上一個自己巷子內自訂的美麗門牌~這個門牌只有自己巷子內的其他用戶知道,外面世界的人其實是找不到這樣的門牌的!

IP 位址是軟體制定的,所以我們可以在主機系統上面隨意設定 (你可以自己買門牌貼紙貼在你家的門口上)。但是能不能讓外界查詢的到呢? 那就得要看你的 IP 是公開的 (public) 還是私有的 (private) 了!

  • public IP (公共 IP 或公開 IP 位址):
    這種 IP 必須要從 ISP 申請而來,以學校來說,就是要跟計算機中心申請;以住家來說,就是需要向類似中華電信申請 (要花錢)。 這種 IP 可以直接上網,也可以架設網站,全世界都可以直接跟這個 IP 連線與溝通。
    • 從 ISP 處取得,設定須完全依據 ISP 提供的資料來設定
    • 可以直接架設網站,Internet 上面的用戶端可以直接連線到你的這部機器上
  • private IP (私有 IP 或保留 IP 位址):
    當初設計 IPv4 時,預設保留給內部網路設定用的 IP 區段。這種 IP 位址不能直接上網, 需要透過 IP 分享器 (透過 NAT 技術) 後才能夠上網。當區域網路還不需要連上 Internet 時,可以使用這種 IP 位址來設定裝置, 未來有 Internet 的需求,只需要加上 IP 分享器即可。這種 IP 位址所架設的網站,也需要透過 IP 分享器的轉遞 (port mapping) 後, 才有可能讓 Internet 瀏覽到。
    • 可以自由指定在內部網路,無須考慮 Internet 的其他來源
    • 不能直接連上 Internet
    • 若需要連上 Interent 需要透過 IP 分享器 (其實是 NAT 技術)

所以,學會使用私有 IP 是很重要的!舉例來說,在教室內我們想要將所有的系統串接在一起,此時你無須跑去跟 ISP 申請,而是透過私有 IP 直接設定, 這樣教室內的所有電腦就可以串成一個物理與 IP 網段的區域網路環境,就可以順利傳輸資料。同時,你的兩部 notebook 同樣可以使用私有 IP 直接插上網路線, 就可以直接傳輸,根本不需要透過 USB 喔!那麼私有 IP 位址有哪些呢?一樣的,根據 IP 等級的定義有:

  • Class A: 10.0.0.0/8 (一組)
  • Class B: 172.16.0.0/16 ~ 172.31.0.0/16 (16 組)
  • Class C: 192.168.0.0/24 ~ 192.168.255.0/24 (256 組)
下列哪幾個是屬於 private IP,這種 IP 需要透過 IP 分享或偽裝才能夠連上 Internet
  1. 172.15.1.1/16
  2. 192.28.1.1/24
  3. 10.100.1.1/8
  4. 172.20.1.1/16
  5. 192.168.5.1/24
  6. 61.5.5.1/8
  • 特殊的 IP 位址

為了讓每一部網際網路主機都可以使用網路,而且可以透過內部網路環境來測試網路的連線資訊,因此,每一部網路主機都會有一個特別的 IP 與網段, 提供主機進行各項內部網路的連結。這個網段使用的界面稱為 loopback 或 localhost 界面,而實際作用的網段則是:

  • 網段: Class A 的 127.0.0.0/8
  • 慣用的 IP: 127.0.0.1

由於網際網路的連線需求是存在的,但是一部主機可能無法安裝好就立刻提供 public 或 private IP 位址。同時,很多主機本身的軟體就有需要用到網路, 那如果沒有網路卡或網路卡沒有驅動成功時,這些軟體的運作是可能會失敗的。此外,為了讓本機的許多動作外界實體網卡分離,因此,這個主機本身內部的 lo 界面就很重要了!因為外部的實體網卡預設是無法連接到 lo 界面的,同時,許多系統目前也設定了,當本機的軟體要使用實體網卡連接到自己時, 該封包也很可能會轉而使用 lo 界面的 127.0.0.1 喔!

基本上來說,lo 界面 (loopback, 內部迴圈測試界面,就是 127.0.0.1) 就是一個主機內部的虛擬網卡,主機本身要使用網路時, 大多數的時間都是透過這個超級快速的 lo 界面!也能夠隔絕外部的干擾!

完成底下的練習:
  1. 在 Linux 環境下,使用 ping localhost ,出現的 IP 位址是?
  2. 在 Linux 環境下,使用 ifconfig lo,說明 (1) IP 、 (2) Netmask
  3. 在 windows 環境下,使用 cmd 界面,下達 ping 127.0.0.1,能有回應否?
未來如果有人說要攻擊你,請你跟他說你的 IP 是多少的時候,記得告訴對方小駭客,說你的 IP 是 127.0.0.1 喔!那是攻擊到誰?

除了這個特別的 127.0.0.0/8 網段之外,還有一個網段也是保留使用的!還記得我們常常講到的當我不知道對方的 MAC 或者是 IP 時,會發送一個沒有接收目標的廣播封包, 那這個封包大家都會去探索一下,看看跟自己有沒有關係~那你怎麼發送出去呢?就是透過這個沒有定址的目標,異即是:

  • 0.0.0.0/0 或 0.0.0.0/8

基本上,大多數保留的是 Class A 的 0.0.0.0/8,至於 0.0.0.0/0 則是任意位置,亦即所有的 IP 位址都被規範在內的意思。 這個部份的定義也需要留意的!

10.2: 區域網路與網際網路連線

現在我們知道了 IP 位址以及網段的計算,也知道了 IP 位址其實分為兩部份,透過 netmask 的協助,可以知道具有巷子號碼與門牌號碼兩段, 例如 192.168.1.0/24 的意思,就是從 192.168.1.0 ~ 192.168.1.255 都算同一個 IP 網段,因此, 192.168.1. 就是巷子號碼, 0~255 就是戶號, 所以連在一起,就成為每一戶的總門牌了。

但是,如果我們現在需要傳輸的目標是 google 呢?或者是 youtube 或 facebook 呢?那個伺服器 IP 位址並不在本巷子內啊?怎麼辦? 此時就得要透過離開區域網路的重要資料,亦即是 Gateway 或者是稱為 router 囉!

  • 離開區域網路的重要關鍵: Gateway, Router...
  1. 在區域網路內可以透過網路卡直接廣播,當然, IP 位址也需要是在同一個區域網路內
  2. 如果要前往的目標 IP 位址並不在區域網路內呢?則此時需要將 IP 封包送給一個專門轉送資料的地方,那就是區網內的通訊閘 (Gateway) 或稱為路由器 (Router)。
  3. 想像泡麵廣告,在區域網路內可以透過廣播呼叫小妹妹回家吃泡麵。但小妹妹如果不在巷子內呢?此時就得要將泡麵送到小 7 , 透過宅即便的功能轉送出巷子外!
  4. 但是你還是得要走到小 7 才行,所以這個小 7 必須要跟你在同一個區域網路內!
  5. 一般建議 Gateway 設定為最後一個可用 IP,例如 192.168.5.0/24 當中,建議 gateway 應設定為 192.168.5.254 較好。

也就是說,當目標是內部的區域網路時,你的目標很清楚的可以撰寫本區域網路內的 192.168.1.0/24 來進行廣播。如果是不在區域網路內的, 那就使用 0.0.0.0/0 而交給 gateway !這就是所謂的路由!亦即是,當目標不在區網內的封包,就交給 gateway 去處理即可!自己就不用理會 gateway 怎麼傳了!

  • 重要的路由概念

那系統是怎麼知道我的封包是透過廣播直接在區網內傳?還是交給 gateway 去傳送呢?其實這與路由 (route) 有關!所謂的路由就是你怎麼去到目的地的路線。 最簡單的觀察,可以在 Linux 底下輸入 route -n 即可!

[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.200.254  0.0.0.0         UG    100    0        0 eth0
172.16.0.0      0.0.0.0         255.255.0.0     U     100    0        0 eth0

如上所示,你會發現系統上對於網路規範了 2 條路,你應該要將 Destination/Genmask 搭在一起看成是一個網段, 因此,上面的 route -n 的顯示就是:

  • 0.0.0.0/0.0.0.0 的目標,請透過 eth0 傳送給 172.16.200.254 去處理
  • 172.16.0.0/255.255.0.0 的目標,請透過 eth0 進行廣播!
參考上面的 route -n 的輸出,回答底下的問題:
  1. 當你要傳送資料給 172.16.3.20 時,該封包的傳輸行為是?
  2. 當你要連線到 google 查資料時,該封包的傳輸方式是?

也就是說,主機的網路封包或透過分析本身的路由表來判斷這個封包會怎麼傳輸,在區網內就是透過廣播來直接傳送, 在區網外就是直接透過交給 gateway 來處理。那接下來怎麼跑?你把包裹交給郵局之後,你會問郵局怎麼送的嘛?當然不會! 你只會知道對方可能在什麼時候會交到目標去~因為,郵局也有自己的路由表~這跟你無關。所以,每部主機的路由表都只與自己有關啊!

在 windows 的 cmd 界面中,使用『 route print -4 』來查看路由表,自行判斷一下:
  1. 你的 IP 位址有哪些個?
  2. 你的 gateway IP 位址是多少?
  3. 詳細的區域網路資料 (network IP/Netmask) 有哪些?
  • 誰還用 IP 位址?笨!都是用主機名稱好不好?

再來想一想,你怎麼連線到崑山科大的首頁?很多同學都只記得 KSU 這三個大字,然後跑到 google 去輸入這三個字, 之後找到網址,直接點下去~不對喔!那你是怎麼跑去 google 的?現代人過太爽了!瀏覽器都有內建搜尋引擎, 所以他會自動將你找的關鍵字丟給內建的搜尋引擎的 IP 位址,因此你都不用背 IP ,現在連主機名稱都不用背了...有夠糟糕!遲早少年癡呆啦!

假設你已經知道主機名稱了,例如 www.ksu.edu.tw ,那直接填網址就可以連接到該 Web server,而不用填寫 IP 啦!問題是, 要上網一定是 TCP/IP 啊!你的瀏覽器怎麼會知道該 Web server 的 IP 位址呢?其實這是透過 DNS 系統。

事實上 DNS 是個很龐大的系統,任何加入 DNS 系統的名稱解析服務後,就可以將你的主機名稱與 IP 位址的對應提供給網際網路的所有主機查詢。 而你可以選擇 ISP 提供的任何一部合法的 DNS 伺服器幫你代查尋你想要知道的主機名稱之 IP 位址,簡易的流程有點像底下這樣:

簡易的 DNS 查詢示意

也就是說,你的主機必需要指定一台 DNS 伺服器,然後當你有任何需要解析的主機名稱時,你的系統會主動跑去詢問 DNS 伺服器, 然後 DNS 伺服器就會跑去幫你查詢,等到查詢到正確的 IP 之後就會告知你,之後你就可以連線到你想去的任何主機名稱了!

未來的世界會使用到更多的 IPv6 的位址,IPv6 的位址使用的是 128bits 的位址長度,比 IPv4 更難背!所以,未來的 DNS 服務會更吃重! 另外,現在人連網不會輸入 IP 了,一定是輸入主機名稱~所以,沒必要不要架設 DNS 伺服器,原因是,未來會更容易被攻擊! 因為,只要攻擊 DNS 服務,所有網際網路世界的主機名稱就無法使用,那整個網路就 crash 了!要注意!要注意!

  • 一部主機需要設定的網路參數

那麼一部主機在適當的環境中,到底要取得哪些網路參數才能夠上網呢?基本上就是底下這些了:

  • IP 位址與 netmask:因為 network IP 與 broadcase IP 都可以透過 IP/Netmask 計算出來,因此需要 IP 位址與 Netmask 即可。
  • Gateway 的 IP 位址:當然, gateway 也是能否連上 Internet 的重要關鍵
  • DNS server 的 IP 位址:想要使用主機名稱上網,就一定要有 DNS server 的 IP 位址才行。

那這些參數都需要使用者自己手動來設定嘛?基本上網路參數的給予跟你的主機所在的環境有關系。如果是自己教室內部的環境, 自己指定私有 IP 位址後,再跟計中要一個 public IP 的參數即可~如果是一般住家,可以考慮 ADSL、光纖到府、第四台纜線的網路等等, 如果是跟 ISP 申請伺服器代管,就可以透過手動設定 IP 來處置。基本上,常見的網路參數取得方式有:

  1. 自動取得:學名為 dhcp 這個協定,通常使用 auto 取代此方法。網路參數統一放置於 DHCP server 上面,用戶端電腦開機時會去詢問 DHCP 伺服器, 藉以得到正確的網路參數的方式,常見於宿舍網路環境與辦公環境下。
  2. 手動設定:手動處理 (manual) 的方式,自己向 ISP 取得相關的網路參數,直接手動設定好網路參數之意。 常見於伺服器本身的環境設定中。
  3. 撥接:台灣地區包括 ADSL 以及中華電信光世代,對外都是走電話線,或者是 CAT5 (通常最多到 CAT 5e) 的網路線,只是都附掛在電話上, 需要透過數據機撥接的情況,這種情況的 IP 網路參數也是由 ISP 機房主動分配的,使用者無法手動設定。
  4. 第四台纜線 (Cable):透過電視纜線,第四台提供的線路來連網,同樣需要透過數據機,而 IP 的取得與 DHCP 雷同。
  • windows 系統下的網路參數觀察與設定

在 windows 10 的環境下,如果想要觀察你的網路參數,可以這樣呼叫出來你的網路卡設定值:『控制台』 --> 『網路和網際網路』 --> 左側的『乙太網路』或『區域網路』項目 --> 『變更介面卡選項』 --> 跳出的新視窗中,選擇你的乙太網路 (或區域網路) 連線界面 --> 新的狀態視窗中選擇『內容』 --> 新的視窗當中選擇『網際網路通訊協定第 4 版 (TCP/IPv4)』項目,連續點擊兩下或者是按下『內容』 --> 最後出現如下的視窗

Windows 網路設定示意

如果你的區域網路內有 DHCP 伺服器 (就是類似 IP 分享器的東西),那請在 1 的地方選擇『自動取得 IP 位址』即可。如果你想要手動設定, 那就自己填寫確定的 IP 位址。不過,這些設定都需要 ISP 給予才行,而且不見得可以順利連上 Internet 喔!因為最重要的 gateway 可能並不存在之故。 至於第 3 個項目則是 DNS 伺服器的指定位置。目前 (2018) 台灣地區常用的有中華電信提供的 168.95.1.1 以及 google 提供的 8.8.8.8 來設定。 當然,也能用自己 ISP 提供的來設定喔!例如崑山提供 120.114.100.1 以及 120.114.150.1。

我們系上的電腦教室使用的是 DHCP 自動取得網路參數的方法,讓我們改為使用固定方式:
  • 請自行使用 cmd 的方式,透過 ipconfig /all 去找到正確的 IP 位址資料
  • 然後再到上述的畫面中,使用固定 IP 位址的方式來設定好剛剛的資訊
  • 按下確定後,再次測試網路的連線是否成功。

事實上一張網路卡是可以設定多個 IP 位址的~你看上圖的 4 號位置,有個『進階』,在進階的部份就可以設定第二組 IP 位址。 不過,gateway 最多只設定一個,所以,第二組以後的 IP 位址,只要填寫正確的 IP/Netmask 即可!

在 windows 環境下完成下列的工作:
  1. 再次呼叫出上圖的畫面,並且點選『進階』項目
  2. 新視窗中,點選 IP 位址的『新增』按鈕,填寫新的 192.168.222.*/24 的設定。
  3. 按下確定後,回到原本的畫面,最終按下『確定』來生效。
  4. 再以 cmd 界面的『 route print -4 』查看相關的路由表與網路界面。
  5. 最後 ping 老師的 IP,亦即是 192.168.222.100,看看能否有回應?
  6. 檢查一下 arp -an 看看老師主機的網卡卡號 (MAC address) 是多少?
等到確認網路資訊沒問題之後,回到原本的畫面,然後將 IP 的取得改回『自動取得 IP 位址』,以恢復原本的網路環境設定。

10.3: Linux 網路參數設定與觀察 + vim

Linux 雖然也有圖形界面的設定方式,不過,畢竟文字界面的處理才是未來更加的學習方式!所以,我們這裡使用文字界面的方式來設定一下網路。 另外,你應該要先想想剛剛 windows 的畫面,流程包括有: (1)乙太網路介面卡 (2)點入乙太網路介面卡的內容設定 (3)按下確定來確認讓網路參數生效。

  • Linux 網路卡代號

新的 Linux 網路卡代號名稱相當的複雜,主要是跟主機板的匯流排名稱有關。無論如何,想要觀察 Linux 主機上面的網路卡有多少, 直接使用底下的指令來查詢即可:

[root@localhost ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:78:6f:a3 brd ff:ff:ff:ff:ff:ff

你可以看得出來,我們有兩張網卡,一張名稱為 lo ,就是內部迴圈測試網路,一張名稱為 eth0 ,就是實體網卡。另外, 你也可以透過上述輸出的 link/ether 52:54... 去找到你的網卡卡號喔!

  • Linux 的網路界面觀察、刪除與新建

知道卡號之後,現在讓我們來了解一下網路連線的界面。要注意,網路界面與網路卡代號並不相同~我們可以使用 nmcli 來查詢所有系統的網路界面。

[root@localhost ~]# nmcli connection show
NAME  UUID                                  TYPE            DEVICE
eth0  0ae1fc2c-65cf-46b8-acc4-514a56f26e4c  802-3-ethernet  eth0

上面的 NAME 項目就是網路連線界面,而 DEVICE 就是剛剛查詢到的你的網路卡代號。通常網路界面名稱會與網路卡代號相同! 這樣在設定時比較不容易搞錯就是了。至於 UUID 則是裝置識別碼,基本上每個裝置的識別碼都不一樣才對。最終的 TYPE 當然就是乙太網路 (etherner) 囉。

不過,你在左右同學看一看,你會發現到 UUID 都一樣耶~老師你不是說都不同?沒辦法,因為我們的系統是 clone 出來的,因此每個人的環境都一樣! 但是這樣會造成未來設定時的困擾,所以,你可以先讓界面停止運作,然後重新針對同一個網卡來產生一個相同的連線界面喔! 處理的方法是這樣的:

  • 停止界面運作: nmcli connection down 界面名稱
  • 刪除界面的方法: nmcli connection delete 界面名稱
  • 新增的方法: nmcli connection add [type ethernet] [con-name eth0] [ifname eth0]
  • 重新觀察界面的詳細設定: nmcli connection show eth0

在實體機器上面不需要進行這個步驟~在虛擬機器上面就需要這樣進行!畢竟這個連線界面是假的!所以我們要改成真的啦!

請透過上面的步驟,完成新的界面,界面名稱依舊為 eth0 即可。
  • Linux 的網路界面細部資料的詳細觀察

讓我們來透過剛剛的指令,詳細檢查一下 eth0 這個連線界面的相關預設設定值有哪些?

[root@localhost ~]# nmcli connection show eth0
connection.id:                          eth0
connection.uuid:                        8c38bf34-8d3e-4379-b0bf-61abeac5d9d8
connection.stable-id:                   --
connection.interface-name:              eth0
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.timestamp:                   1525763852
connection.read-only:                   no
connection.permissions:
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:
connection.gateway-ping-timeout:        0
connection.metered:                     不明
connection.lldp:                        -1 (default)
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          yes
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist:
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:
802-3-ethernet.wake-on-lan:             1 (default)
802-3-ethernet.wake-on-lan-password:    --
ipv4.method:                            auto
ipv4.dns:
ipv4.dns-search:
ipv4.dns-options:                       (預設)
ipv4.dns-priority:                      0
ipv4.addresses:
ipv4.gateway:                           --
ipv4.routes:
ipv4.route-metric:                      -1
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv4.dad-timeout:                       -1 (default)
ipv6.method:                            auto
ipv6.dns:
ipv6.dns-search:
ipv6.dns-options:                       (預設)
ipv6.dns-priority:                      0
ipv6.addresses:
ipv6.gateway:                           --
ipv6.routes:
ipv6.route-metric:                      -1
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.ip6-privacy:                       -1(不明)
ipv6.addr-gen-mode:                     stable-privacy
ipv6.dhcp-send-hostname:                yes
ipv6.dhcp-hostname:                     --
ipv6.token:                             --
GENERAL.NAME:                           eth0
GENERAL.UUID:                           8c38bf34-8d3e-4379-b0bf-61abeac5d9d8
GENERAL.DEVICES:                        eth0
GENERAL.STATE:                          已啟用
GENERAL.DEFAULT:                        是
GENERAL.DEFAULT6:                       否
GENERAL.VPN:                            否
GENERAL.ZONE:                           --
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/1
GENERAL.SPEC-OBJECT:                    /
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         172.16.0.239/16
IP4.GATEWAY:                            172.16.200.254
IP4.DNS[1]:                             172.16.200.254
IP4.DOMAIN[1]:                          gocloud.vm
DHCP4.OPTION[1]:                        requested_routers = 1
DHCP4.OPTION[2]:                        requested_domain_search = 1
DHCP4.OPTION[3]:                        requested_time_offset = 1
DHCP4.OPTION[4]:                        requested_domain_name = 1
DHCP4.OPTION[5]:                        requested_rfc3442_classless_static_routes = 1
DHCP4.OPTION[6]:                        requested_classless_static_routes = 1
DHCP4.OPTION[7]:                        dhcp_server_identifier = 172.16.200.254
DHCP4.OPTION[8]:                        requested_wpad = 1
DHCP4.OPTION[9]:                        requested_broadcast_address = 1
DHCP4.OPTION[10]:                       next_server = 0.0.0.0
DHCP4.OPTION[11]:                       broadcast_address = 172.16.255.255
DHCP4.OPTION[12]:                       requested_interface_mtu = 1
DHCP4.OPTION[13]:                       requested_subnet_mask = 1
DHCP4.OPTION[14]:                       expiry = 1526022896
DHCP4.OPTION[15]:                       dhcp_message_type = 5
DHCP4.OPTION[16]:                       ip_address = 172.16.0.239
DHCP4.OPTION[17]:                       routers = 172.16.200.254
DHCP4.OPTION[18]:                       domain_name = gocloud.vm
DHCP4.OPTION[19]:                       requested_static_routes = 1
DHCP4.OPTION[20]:                       requested_nis_servers = 1
DHCP4.OPTION[21]:                       requested_ntp_servers = 1
DHCP4.OPTION[22]:                       requested_domain_name_servers = 1
DHCP4.OPTION[23]:                       dhcp_lease_time = 259200
DHCP4.OPTION[24]:                       domain_name_servers = 172.16.200.254
DHCP4.OPTION[25]:                       requested_ms_classless_static_routes = 1
DHCP4.OPTION[26]:                       subnet_mask = 255.255.0.0
DHCP4.OPTION[27]:                       network_number = 172.16.0.0
DHCP4.OPTION[28]:                       requested_host_name = 1
DHCP4.OPTION[29]:                       requested_nis_domain = 1
IP6.ADDRESS[1]:                         fe80::1a80:784e:d469:78bc/64
IP6.GATEWAY:

上述輸出的訊息中,小寫的部份為設定值,大寫的部份為目前實際運作中的情況!如果有出現任何 DHCP4 的資訊,那就表示目前這個界面透過自動取得 IP 來取得網路參數的。 從上面我們可以看到這組網路設定中,IP/Netmask 為 172.16.0.239/16,Gateway 為 172.16.200.254,DNS 為 172.16.200.254,就已經是我們需要的四個數值囉! 所以理論上應該是能夠上網才對的。至於設定項目的意義是:

  • connection.autoconnect [yes|no]:是否需要啟動這個網路界面
  • ipv4.method [auto|manual]:取得的方式為自動或手動
  • ipv4.addresses [IP/Netmask]:直接設定 IP 位址與子網路遮罩
  • ipv4.gateway [GWIP]:設定 Gateway 的 IP 位址
  • ipv4.dns [DNSIP]:設定 DNS server 的 IP 位址
  • Linux 的網路界面的修改與啟動

如果需要修改界面的網路參數,應該要透過底下的指令去處理!

nmcli connection [ modify eth0 ] [ connection.autoconnect yes ] [ ipv4.method manual ]
                 [ ipv4.addresses IP/NETMASK ] [ ipv4.gateway GWIP ] [ ipv4.dns DNSIP ]
嘗試使用底下的設定值來處理好你的網路參數:
  • 你的內部網路為 192.168.5.*/24 (* 為你的學號尾數)
  • 你的 Gateway 為 192.168.5.254
  • DNS Server IP 使用 120.114.100.1 及 120.114.150.1

如果修改完畢,並且使用『 nmcli connection show eth0 』確認設定值無誤,那就可以啟動這個修改過後的資料!啟動的方式為:

nmcli connection up eth0
nmcli connection show eth0

建議啟動完畢後,立即去瞧瞧所有的大寫參數~看看是否為正確的項目:

[root@localhost ~]# nmcli connection show eth0
.....
IP4.ADDRESS[1]:                         192.168.5.100/24
IP4.GATEWAY:                            192.168.5.254
IP4.DNS[1]:                             120.114.100.1
IP4.DNS[2]:                             120.114.150.1
IP6.ADDRESS[1]:                         fe80::b527:d9b6:3348:b3fd/64
IP6.GATEWAY:
  • vim 的使用

事實上我們在 Linux 裡面比較常使用的應該是 vim 這個程式編輯器~vim 有三種基本的模式,亦即是:

  • 一般指令模式 (command mode):使用『 vim filename 』進入 vim 之後,最先接觸到的模式。 在這個模式底下使用者可以進行複製、刪除、貼上、移動游標、復原等任務。
  • 編輯模式 (insert mode):在上述模式底下輸入『 i 』這個按鈕,就可以進入編輯模式,終於可以開始打字了。
  • 指令列命令模式 (command-line mode):回到一般模式後,可以進行儲存、離開、強制離開等動作。

簡單的說,讀者可以將三種模式使用底下的圖示來思考一下相關性:

vi三種模式的相互關係
使用 vim 來新建一的文字檔
  1. 以 student 的身份,在家目錄裡面,使用『 vim myfile.txt 』檔案
  2. 在 vim 的畫面中,按下『 i 』之後,左下角會變成『插入 --INSERT--』,此時開始隨意打字
  3. 持續輸入至少 5 行文字
  4. 最後按下 [esc] 按鈕 (鍵盤最左上角的按鍵),你會發現『插入 --INSERT--』不見了。
  5. 按下『 :w 』,你會發現該檔案就被寫入了
  6. 若需要再次編輯與離開編輯,按下『 i 』與『 [esc] 』來反覆處理即可。
  7. 最後按下『 :q 』來離開 vim。
  8. 離開 vim 之後,輸入 ll 查看一下有沒有名為 myfile.txt 的新建檔案。
使用 vim 來查看與編輯設定檔
  1. 使用 vim /etc/fstab 來處理設定檔
  2. 最後一行編輯以前曾經做過得檔案系統,看看 6 個欄位的設計情況。
  3. 結束後,離開編輯模式
  4. 一直輸入『 u 』回覆之前的狀況
  5. 輸入『 :q! 』不儲存離開

在 vim 環境下,常見的指令有:

慣用的指令說明
i, [esc] i 為進入編輯模式, [esc] 為離開編輯模式
G 移動到這個檔案的最後一列
gg 移動到這個檔案的第一列
dd dd 為刪除游標所在行,5dd 為刪除 5 行,ndd 為刪除 n 行
yy yy 為複製游標所在行,5yy 為複製 5 行,nyy 為複製 n 行
p 在游標底下貼上剛剛刪除/複製的資料
u 復原前一個動作
:w 將目前的資料寫入硬碟中
:q 離開 vim
:q! 不儲存 (強制) 離開 vim
  • Linux 主機名稱的設定
  • 每部主機應該都有自己的主機名稱,而這部主機名稱最好能夠有相對應的 IP 才好!
  • 可以使用 hostnamectl 來進行主機名稱的查詢
  • 可以使用『 hostnamectl set-hostname 主機名 』來設定你的主機名稱
  • 若需要讓這個主機名稱與你的 IP 對應,應該要修改 /etc/hosts 這個檔案的內容才行。
完成底下的練習:(請用 root 身份處理)
  1. 使用 hostnamectl 查看一下目前的主機名稱,重點是『 Static hostname 』的設定。
  2. 使用『 hostnamectl set-hostname 主機名稱 』假設主機名稱為『 pcXX.dic.ksu 』XX為你的學號尾數
  3. 再次使用 hostnamectl 看看主機名稱修訂沒有?
  4. 使用 ping pcXX.dic.ksu 看看有沒有找到你的 IP?
  5. 使用 vim /etc/hosts 去編輯,原本的兩行內容請不要更動,於第 3 行新增一行,內容為
    『 IP yourhostname yourhostname2..』
  6. 使用 ping pcXX.dic.ksu 看看有沒有找到你的 IP?
  7. 使用 ping pc100.dic.ksu 時,會主動跑到老師的 192.168.5.100 這部系統上。

為什麼 localhost 代表 127.0.0.1 呢?就是因為 /etc/hosts 設定的關係!這個檔案在 1990 年代以前是非常重要的! 目前只對私有網域的幫助較大~其他的,都已經透過 DNS 來處理了。不過記得,常用的 IP 與主機名稱對應可以寫入這個檔案中, 主機達成連線的等待時間會比較短!

  • 網路檢測的流程:

網路連線不通是每個人心口的痛...但是連線不通是我們自己的問題還是 ISP 的問題?這就有需要查詢查詢了! 在你詢問到 ISP 關於你這部主機的網路參數之後,就可以透過底下的步驟來測試你的網路是否通暢無比!

  1. 先從 ISP 處取得正確的 IP, gateway, DNS 等設定資訊
  2. 檢查 IP/netmask 可以使用『 ifconfig 』、『 ip addr show 』、『 nmcli connection show eth0 』
  3. 檢查 gateway 可以使用『 route -n 』、『 nmcli connection show eth0 』
  4. 檢查你的主機到 gateway 之間的連線,可以使用 ping
  5. 檢查 DNS 有沒有運作,可以使用 dig www.google.com
  6. 可以使用 ping 168.95.1.1 對中華電信最大的 DNS 伺服器進行連線測試
  7. 上述流程每一步都要成功!
針對上述的流程,回答下列問題:
  1. 如果第 1 步驟就錯誤,那應該如何處理?
  2. 如果第 2 步驟是錯誤的,那該如何處理?
  3. 如果第 3 步驟是錯誤的,但是前 2 個步驟都正確,你覺得可能的問題在哪裡?
  4. 如果第 4 步驟是錯誤的,但是前 3 個步驟都正確,你覺得可能的問題在哪裡?
  5. 如果第 5 步驟是錯誤的,但是前 4 個步驟都正確,你覺得可能的問題在哪裡?

10.4: 課後練習

請使用 word 檔案 (.doc 或 .docx) 進行下列題目的撰寫(某些題目需要加上圖檔),且檔案容量請不要超過 2MBytes 以上, 以 1Mbytes 為宜,亦即你的圖檔需要限制解析度,並請注意:

  • 首次使用上傳系統時,務必使用 pietty 更改一次密碼,並請將密碼自己記憶下來,未來不能隨時變更密碼的。
  • 檔名請設定為: os_4XXXCYYY_unit10.doc (4XXXCYYY 是你的學號,請填正確,有分大小寫,請確認)
  • 請使用 filezilla 搭配 FTP 協定 (port 21) 上傳
  • 請上傳到你家目錄底下的 os 目錄中 (若不存在,請自行建立該目錄)

開始本章節題目:

  1. 寫下 IP 等級中, Class A, B, C 的第 1 組 10 進位的數值範圍各是多少?
  2. 寫下 IP 等級中, Class A, B, C 的 netmask 位址又個別是多少?
  3. 以標準定義來說, 128.100.20.5 這個 IP 位址所在區域網路的 (A) Netmask (B) Network IP (C) Broadcase IP 個別是多少?
  4. 寫下私有 IP 的 Clase A, B, C 所在區段
  5. 每一部網際網路主機都會有的內部 IP 位址是多少?所在的區域網路是哪一段?屬於 Class A, B, C 哪一等級?
  6. 要連上 Internet 你必須要跟 ISP 取得哪 4 個網路參數才可以?
  7. 改變你的網路參數,使用底下的設定來處理你的網路:
    • IP/Netmask: 172.20.100.*/16,其中 * 為你的 IP 尾數
    • Gateway: 172.20.0.254
    • DNS: 120.114.100.1, 8.8.8.8
    設定完畢之後,使用『 cat /etc/sysconfig/network-scripts/ifcfg-eth0 』,然後輸入『 nmcli connection show eth0 | grep IP4 』指令, 將輸出的結果拍照貼上 word。
  8. 讓 172.20.100.* 對應主機名稱為 pc*.dic.ksu,設定完畢後,使用『 ping -c 5 pc*.dic.ksu 』,將結果拍照貼上
  9. 讓你的主機名稱變成 pc*.dic.ksu,設定完畢之後,輸入『 cat /etc/hostname 』將結果拍照貼上
  10. 根據 10.3 最後一個網路檢測的流程,請回答:
    1. 如果第 1 步驟就錯誤,那應該如何處理?
    2. 如果第 2 步驟是錯誤的,那該如何處理?
    3. 如果第 3 步驟是錯誤的,但是前 2 個步驟都正確,你覺得可能的問題在哪裡?
    4. 如果第 4 步驟是錯誤的,但是前 3 個步驟都正確,你覺得可能的問題在哪裡?
    5. 如果第 5 步驟是錯誤的,但是前 4 個步驟都正確,你覺得可能的問題在哪裡?