Linux伺服器 Linux伺服器

伺服器建置實務上課教材

伺服器建置實務 > 課程內容 > 第 4 堂課 - 認識網路基礎與 Linux 網路設定

第 4 堂課 - 認識網路基礎與 Linux 網路設定

上次更新日期 2018/10/29

網路其實是個很複雜很複雜的東西,要了解網路基礎,還得要知道什麼是網路七層協定,這部份都很重要的! 因為,瞭解了網路之後,你才有辦法理解什麼是防火牆,以及如何預防你的網路服務被攻擊啊!另外,其實目前使用最廣的協定是 TCP/IP 啦!所以,我們也得知道一下什麼是 IP 位址 (IP address),以及 TCP 的埠口功能等等。

  • 4.1: 網路基礎的 OSI 七層協定與 TCP/IP
  • 4.2: 網路層的 IP 協定與 IP 位址等級
  • 4.3: 區域網路的參數與 IP 參數的取得方式
  • 4.4: Linux 系統的 IP 參數設定
  • 4.5: 本日練習
  • 4.6: 課後練習

4.1: 網路基礎的 OSI 七層協定與 TCP/IP

為了讓資料快速的傳遞,因此許多研究人員開始思考怎麼透過不同節點之間的訊號來進行連結,於是後來就有所謂的網路出現了! 接觸到資訊通訊方面的朋友,應該會聽過所謂的『第二層交換器、第三層交換器』之類的用語,那麼什麼是『分層』呢? 這是因為網路開發的時候就把程式碼的功能進行不同的分層的緣故!來聊聊先!

  • 為什麼要分層

就像做一件事情要分工一樣,如果你已經知道了一件事情可以分為五大部份去作,那麼是否可以叫五個團隊分別去進行, 等到時間截止後,將五個團隊的成果結合在一塊就好。那如果有一個團隊偷懶做的不好呢?例如第三部份的團隊做的不太好。 這時,你可以邀請專家立即完成第三部份的工作,然後『抽換』掉第三部份的資料,再進行整合,如此一來,不但工作的速度加快, 而且某一組做的不好時,還可以抽換!這就是網路設計有進行『分層』的概念了!

  • 網路開發之初,為了讓撰寫程式變得更容易,因此將整體的網路設計切成 7 個部份來撰寫
  • 每個部份只要針對自己所需要的功能來撰寫即可
  • 好處是,在開發上面就會比較不會互相干擾,你也可以自行修改其中某一部份,而且改完之後,並不會影響其他部份
  • 這就是網路堆疊的設計原理
  • 網路開發模型的標準: OSI 七層協定

依據上面的網路開發原則,將整個網路從資料打包、設計發信站與接收站,以及編碼成為電子訊號而進行實際的資訊傳遞, 根據由底層 (偏向硬體) 與上層 (偏向軟體應用面) 而發展設計共有 7 層開發的工作,這就是原本最完整的網路運作模型, OSI 七層協定了。 OSI 七層協定是用來學習網路最重要的概念!它的相關性圖示有點像這樣:

OSI 七層協定示意圖

相關的 OSI 七層協定簡易瞭解如下:

  • 根據開發原則,最早提出的網路架構就是所謂的 OSI 七層協定
  • 7 層由偏硬體的底層到偏軟體的上層分別是:實體、資料鏈結、網路、傳輸、會談、表現、應用等七層
  • 如上圖所示,發送站與接收站的七層相依性中,每一層都只認識自己的層級而已喔!
  • 上圖最有趣的想法:大箱包小箱的整人遊戲!唯一的差別是,發送端與接收端都只會知道同一個層級的資料而已!
  • 事實上,每一個層你都可以將他視為一個完整的包裹 (packet),這個包裹會有實際資料以及表頭資料 (header), 表頭資料就是『信封上面需要填寫的,收件人是誰?發件人是誰?以及內部的可能資料為何』這樣而已。
  • 透過分析表頭資料,信件就可以一關一關的發送出去!
  • 所謂的網路基礎,指的是資料鏈結 (layer 2)、網路 (layer 3) 及傳輸層 (layer 4)

在尚未進入軟體應用之前,所有的網路作業系統都應該會理解所謂的『網路基礎!』在 OSI 七層協定的架構下, 所謂的網路基礎其實就是 Layer 2, Layer 3, Layer 4 這四層協定!這四層協定主要定義了資料在網路卡間的傳送方式、 資料在網際網路間的傳遞流程,以及資料在 Server 與 Client 間的連線狀態,這就是目前最重要的傳輸行為啊! 所以就稱為網路基礎:

  • Layer2 重點在 MAC 訊框,這個訊框表頭重點在 MAC 網卡的卡號 (共有 6bytes 的記載,使用 16 進位紀錄的)
  • Layer3 重點在 IP 封包,這個封包表頭重點在 IP 位址,基本上目前台灣還是使用 IPv4 這個 32 位元 (bit) 紀錄的位址長度
  • Layer4 重點在 TCP/UDP 封包,這兩個封包的表頭資料重點在埠口號碼 (port number)
  • 關於埠口號碼

Layer 4 的 TCP 與 UDP 封包都有個目標與來源的埠口號碼 (port number),這東西的簡易理解如下:

  • 埠口號碼通常為 0~65535 號
  • 其中 < 1024 為使用在常見的通訊服務啟動之用
  • 用戶端連線主要啟動者為 > 1024 以上的埠口。

另外,由於 Server 與 Client (伺服器與用戶端) 在網際網路上面進行連結時,彼此都需要知道對方的 IP 位址與埠口號碼, 因此 Server 與 Client 之間的連線,可以使用一個所謂的 IP socket (插槽) 來進行理解,相關的 IP socket 簡易說明如下:

  • 網路是雙向的,你自己需要有 IP 才能夠連接到伺服器的 IP,同時你也需要啟動一個埠口來連線到伺服器埠口
  • 當你的 IP 位址是 1.2.3.4 且瀏覽器埠口為 10000 時,當連接到 google 時,基本上會是這樣連線的:
    1.2.3.4:10000 <==> www.google.com:443
回答下列問題:
  1. 依據 OSI 七層協定的定義,從底層 (第一層) 到上層的中文名稱為何?
  2. 承上,一般我們說網路基礎是哪幾層?
  3. 承上,上述每一層各有什麼重要的封包(或訊框),寫下封包的名稱
  4. 承上,每一層的封包表頭 (header) 資料各有哪一個重要資料?(注意,有來源與目標喔)
  5. 簡單說明什麼是 IP socket 呢?
  • 重要的基礎網路介紹 - TCP/IP

OSI 七層協定所規範的網路模型相當的嚴謹,因此在撰寫上面會比較麻煩些。後來美國軍方根據定義,自己開發了一個軍用網路, 然後將這個軍用網路的部份釋放出來,並且與柏克萊大學合作,開發出所謂的 TCP/IP 協定的模型。那麼這個模型與 OSI 七層有啥相關性呢? 大致上是這樣的:

  • 由美國國防部與柏克萊大學合作開發出的網路模型,簡化 OSI 七層成為四層,稱為 TCP/IP
  • OSI 七層與 TCP/IP 的對照如下: TCP/IP協定示意圖

一般來說,目前常見的網路連接方式是所謂的星形拓樸。這種連線方式中,最中心的部份是一個交換器或集線器 (switch or hub), 然後透過網路線將所有的設備連接在一起,這就是所謂的星形連線。那麼這樣的實體區域網路當中,資料是怎麼傳遞的呢?

  • 區域網路當中 (電腦透過網路線,直接連接到 hub/switch 而互連的環境),資料直接透過網路卡傳遞 (所謂的廣播)
  • 承上,網路卡彼此認識則是透過 layer 2 的 MAC 封包,這個封包上面有重要的來源與目標之 MAC Address (網卡卡號)

目前所謂的網際網路 (Internet) 其實是俗名,正確的學名應該就是 TCP/IP 喔!也就是說,網際網路就是 TCP/IP 囉!

  • TCP 與 UDP 傳輸的差異

在 OSI 裡面的第四層有兩個主要的封包,一個是 TCP 一個是 UDP。這兩個封包有什麼差異呢?

  • TCP 為可靠連結導向,有所謂的三向交握,大部分的網路服務都是這種封包模式
  • UDP 為非連接導向的封包,射後不理,大部分的直播影音都是這種封包模式
  • 因為 UDP 可以射後不理,因此許多的木馬、蠕蟲攻擊,都是透過這種封包格式,因此許多企業內,會將這種封包格式拒絕進出防火牆。
完成底下的練習或繪製圖片:
  1. 請依據老師在白板上面的說明,繪製出 TCP 封包在連線時的三向交握流程 (可靠連接)
  2. 在 windows 與 Linux 裡面,透過相關的指令,查詢出 Layer 2 的網卡卡號 (MAC address)
  3. 使用 ping 172.16.200.254 之後,再透過 arp -n ,找出區域網路內的其他裝置的網卡卡號
  4. 在傳輸層當中的兩種封包格式中,那一種封包是屬於可靠連線,資料肯定不會遺失?
  5. 試說明 http, https, FTP, ssh 等協定的功能與使用的正規埠口號碼

4.2: 網路層的 IP 協定與 IP 位址等級

要連上網際網路,你的主機就得需要有合法的 IP 位址才行!那麼什麼是 IP 位址?為什麼有所謂的『合法』的? 難道還有非法的!?這個就厲害了!哈哈!就來趕緊瞭解一下重要的 IP 位址以及 public, private IP 位址吧!

  • 開始之前來認識一下位元 (bit) 與位元組 (bytes)

因為 IP address (IPv4) 主要是由 32 個位元所組成的,那我們也經常聽到所謂的位元組 (bytes),這兩個東西有啥關聯性? 你除了需要知道關聯性之外,也至少需要知道位元是什麼鬼才好!不然等等講 IP 位址的計算,會崩潰的!

  • 位元 (bit) 指二進位的數值,亦即只有 0 與 1,不會出現 2 !這就是所謂的二進位。
  • 因為位元太小,因此習慣上,以 8 個位元作為一個記憶單位,稱為位元組 (bytes),因此 1 byte = 8 bits
  • 檔案容量都是使用位元組 (bytes),而網路傳輸則因為都是 0 與 1 的傳遞,因此網路單位大多使用位元。
  • 舉例來說, ADSL 非對稱傳輸 100Mbps 與 40Mbps,即是指 100Mbit/sec 以及 40Mbit/sec,轉成檔案單位,要再除以 8 才行。
假設你家的網路下載最高可達 100Mbps,請問,下載一個 1GBytes 的檔案,大約需要多久的時間?
  • Layer 3 網路層的 IP 位址 (IP address)

IP 協定目前有兩個版本,一個是 IPv4 一個是 IPv6 ,台灣目前使用上比較廣泛的還是在 IPv4 上面, 因此我們還是以 IPv4 這個封包的表頭資料來解釋。基本上,IP 封包的表頭資料當中,最重要的就是那個 32 位元的數值, 那個就是所謂的 IP 位址~再講一次,IPv4 的 IP 位址為 32 位元喔!所以, 2 進位與 10 進位的對照如下:

  • 最小:00000000.00000000.00000000.00000000 --> 0.0.0.0
  • 最大:11111111.11111111.11111111.11111111 --> 255.255.255.255
  • 使用小數點隔開,每個位置的十進位數值為 0~255,不可能大於 255 以上喔!

另外,為了方便網路的管理,因此 IP 位址是有等級之分的!主要分為 A, B, C 三級 (Class A, Class B, Class C), 分這三級的原因主要是為了方便 IP 所管理的電腦數量的發放~底下就來說說 IP 位址的等級與預設網域的相關重點:

  1. Class A:底下每一組,第 1 個十進位數字不可變,其他則由 0~255 不可重複,所以至少有 127 組
    1.0.0.0 ~ 1.255.255.255
    2.0.0.0 ~ 2.255.255.255
    ....
    127.0.0.0 ~ 127.255.255.255
  2. Class B:底下每一組前 2 個十進位數值不可變,其他則由 0~255不可重複,至少有 64*256 組
    128.0.0.0 ~ 128.0.255.255
    128.1.0.0 ~ 128.1.255.255
    ....
    128.255.0.0 ~ 128.255.255.255
    129.0.0.0 ~ 129.0.255.255
    ....
    191.255.0.0 ~ 192.255.255.255
  3. Class C:下每一組前 3 個十進位數值不可變,其他則由 0~255不可重複,至少有 32*256*256 組
    192.0.0.0 ~ 192.0.0.255
    192.0.1.0 ~ 192.0.1.255
    ....
    223.255.255.0 ~ 223.255.255.255

上面的說明要注意的是,Class A 有 1 組不可變動的數值,Class B 有 2 組,Class C 則有 3 組不可變動的數值。 事實上 IPv4 的 IP 位址等級是由二進位來決定的,不過,如果以 10 進位的方式來說,其實看第一組 10 進位的數值就可以知道等級喔! 相關的定義 (要背的資訊) 是這樣的:

  • 開頭為 0~127 為 Class A,且第 1 個 10 進位數字不變,每組共可以擁有 256^3 的 IP 位址
  • 開頭為 128~191 為 Class B,且第 1, 2 個 10 進位數字不變,每組共可以擁有 256^2 的 IP 位址
  • 開頭為 192~223 為 Class C,且第 1, 2, 3 個 10 進位數字不變,每組共可以擁有 256 的 IP 位址

那麼如何表示整個網域的 IP 位址寫法呢?基本上所謂的區域網路寫法可以是這樣的定義:

  • Class A:以 10 開頭為例:
    10.0.0.0/8 -->
    10.0.0.0/255.0.0.0 -->
    10.0.0.1~10.255.255.254 為可用 IP
  • Class B:以 172.24 開頭為例:
    172.24.0.0/16 -->
    172.24.0.0/255.255.0.0 -->
    172.24.0.1 ~ 172.24.255.254 為可用 IP
  • Class C:以 192.168.0 開頭為例:
    192.168.0.0/24 -->
    192.168.0.0/255.255.255.0 -->
    192.168.0.1 ~ 192.168.0.254 為可用 IP

根據上面的說明,我們會知道,每一組區域網路的寫法,都有底下幾個特定的 IP 位址喔:

  • IP :就是 IP 位址
  • Network IP:網域 IP,亦即整組 IP 的第一個 IP,不能用於設定 IP 位址
  • Broadcast IP:廣播 IP,亦即整組 IP 的最後一個 IP,不能用於設定 IP 位址
  • Netmask IP:子網路遮罩,亦為 32 位元,為指定網域的重要參數。
請問底下的 IP 位址,依據正常的 IP 位址等級分類,個別是在那一個網段?並嘗試寫下 Netmask IP, Network IP, Broadcast IP (hint: 先判斷 IP 等級,然後判斷那一組 10 進位數值不能變,然後再找出 netmask 的規範,最後將可變動的部份, 分別填上 0 或 255 即可找到答案了)
  1. 172.16.50.30
  2. 192.168.10.10
  3. 61.3.2.1
  • Layer 3 網路層的 IP 位址 (IP address) - IP 種類與私有 IP 的網段

就跟人類的門牌有國家給的與自己裝設給自己看的兩種,國家給的門牌號碼才是郵差先生可以找的到的, 但是自己內部設定的 (例如學校內的各系館與教室的編號等等),郵差先生是不會知道的!但是內部的我們就可以知道囉! IP 也分成全世界 Internet 都知道的正確位址,與可以提供給企業內部自己設定區域網路的私有位址。因此,IP 的總類有:

  • public (公有、公共 IP 位址):
    • 從 ISP 處取得,設定須完全依據 ISP 提供的資料來設定
    • 可以直接架設網站,Internet 上面的用戶端可以直接連線到你的這部機器上
  • private (私有、保留 IP 位址):
    • 可以自由指定在內部網路,無須考慮 Internet 的其他來源
    • 不能直接連上 Internet
    • 若需要連上 Interent 需要透過 IP 分享器 (其實是 NAT 技術)

另外,根據 IP 位址的等級區分,私有 IP 位址也分為 Class A, B, C 三大段落,根據私有 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 組)
完成底下的練習:
  • 172.24.100.2/16 的
    • network IP
    • broadcast IP
    • netmask IP
    • 可用的 IP 範圍
  • 192.168.100.32/24 的
    • network IP
    • broadcast IP
    • netmask IP
    • 可用的 IP 範圍
  • 每一部可以連上 Internet 的主機都會有的 IP 與網段分別是?

4.3: 區域網路的參數與 IP 參數的取得方式

你應該都聽過區域網路 (Local Area Network, LAN)!那這東西是什麼?基本上,LAN 可以這樣看:

  1. 區域網路除了實體的線路需要連接在一起之外, IP 位址需要為同一個區段
  2. 所謂的 IP 位址同一區段 (區域網路) ,假設 192.168.1.0/24 這一個項目:
    • 因為 /24 的關係,所以前面 24 個位元為網域 ID,不可變動 (32 位元來思考)
    • 192.168.1 為網域 ID ,不可變動 (大家都一樣)
    • 最後一個 10 位數可由 0~255,但 0 與 255 (頭尾) 有特殊用途,因此只能使用 1~254 這幾個
    • 所以可用 IP 就是 192.168.1.1 ~ 192.168.1.254 了!
  3. 區域網路裡面的所有電腦,都可以透過網路卡直接廣播溝通,無須透過路由器
  4. 但若傳輸的資料不在區域網路內(例如連上 google),則需要透過路由器 (或閘道器)。
  5. 我們通常不用 IP 直接上網,而是使用主機名稱上網,因此就得需要透過 DNS 伺服器協助我們處理主機名稱轉成 IP 的目的。
  6. 最終需要的網路參數有:
    • IP/Netmask
    • Gateway
    • DNS server

那麼上述的網路參數取得的方式有哪些呢?基本上,在台灣,我們的網路設備取得 IP 參數的方式主要有:

  1. 自動取得 (auto):
    學名為 DHCP 服務,類似 IP 分享器後面的 PC 設定值,網路參數是 DHCP 伺服器提供的,而 DHCP 伺服器則直接設定在 IP 分享器。
  2. 手動設定 (manual):
    向 ISP 取得前一小題的網路參數後,自己手動設定在你的系統中。例如崑山科大實驗室、辦公室內的電腦就是這種設定方式。
  3. ADLS 與光世代撥接:
    就是透過附掛在電話線上面的撥接方式來取得網路參數的方法,得要向 ISP 註冊並取得帳號密碼後,才能夠上網的方式。
  4. 第四台纜線 (Cable):
    有線電視台的線路內含光纖的頻段,該頻段可以拿來作為網路上網的方式。與撥接類似,需要向 ISP 申請數據機來上網, 至於網路參數的取得就有點類似 DHCP 了。

對於學術界的網路環境來說,如果要用來架站,可能都要使用所謂的手動設定,讓你的伺服器 IP 位址不會被更動,都用固定 IP 比較多。 因此就得要向你的 ISP 申請固定的 public IP 了。那如果是教室內上課使用的學生電腦,大部分就是使用透過 IP 分享器提供的 DHCP (自動取得 IP) 的方式了!

4.4: Linux 系統的 IP 參數設定

跟 Windows 比較不樣的地方是,你要處理 Linux 的網路時,必須要事先知道你有幾張網路卡,然後網路卡是有名稱的! 有一張網路卡稱為 lo (loopback) ,這張網卡是給系統自己內部使用的,原則上不會跟外部的網路有任何的交流~ 其他的網卡就可能有不同的名稱喔!因此,先來觀察網路卡的名稱吧!

  • 觀察網路卡的界面名稱

網路卡的名稱資訊檢查,可以使用兩個方法來處理~先使用一定找的到的指令,就是 ip 這個指令來查詢一下:

[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:02:80:ef brd ff:ff:ff:ff:ff:ff

從上面,我們可以看到網路界面有兩個,一個名稱為 lo,一個名稱為 eth0,通過上面的說明,我們知道 lo 先不要動它,那個東西系統自己會搞定。 因此,能夠變動的當然就是 eth0 這張網卡。另外, eth0 的第二行主要就是介紹網卡的卡號 (MAC Address) 囉!此外, ip 是個萬用指令, 而 link 你可以想到的是 OSI 七層的 layer 2 的資料鏈結層,因此當然就是主要在查看與網卡有關的參數與資訊囉。

除了 ip 這個指令之外,某些情況下,你也可以透過 ifconfig 來查詢網路卡。只是可能需要加入 -a 才行!

[root@localhost ~]# ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.9.134  netmask 255.255.0.0  broadcast 172.16.255.255
        inet6 fe80::2593:d152:94e5:2de8  prefixlen 64  scopeid 0x20
        ether 52:54:00:02:80:ef  txqueuelen 1000  (Ethernet)
        RX packets 262  bytes 34491 (33.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 121  bytes 21034 (20.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
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (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

同樣可以觀察到網路卡界面有 lo 及 eth0 喔!

  • 網路的連線資訊名稱

從 CentOS 7 開始,系統預設使用一個名為 NetworkManager 的軟體來管理網路,並且提供一個名為 nmcli 的指令來管理網路界面的設定。 你如果想要知道目前有哪些連線資訊名稱,可以使用底下的指令來查閱一下:

[root@localhost ~]# nmcli   connection   show
NAME  UUID                                  TYPE            DEVICE
eth0  0ae1fc2c-65cf-46b8-acc4-514a56f26e4c  802-3-ethernet  eth0
連線  此連線識別碼                          此連線類型      網路卡界面

那個 NAME 就是連線資訊名稱,而 DEVICE (裝置) 就是網卡界面,只是為了方便區分,通常 NAME (可以自行指定) 會設定與網卡名稱一樣! 這樣比較好找尋問題就是了。

  • 刪除與新增連線資訊名稱的方法

某些時刻我們可能想要將連線的資訊名稱整個丟掉重建,例如在虛擬機裡面,透過重製 (clone) 的方法所建立的虛擬機器,通常需要做這個動作。 但無論如何,常見的 nmcli 指令用法大致如下:

[root@localhost ~]# nmcli  connnection  [add|delete|modify|show|up|down]  連線界面
  • add:新增連線資訊名稱
  • delete:刪除連線資訊名稱
  • modify:修改該連線資訊名稱內的設定值
  • show:顯示連線資訊名稱內的詳細設定值
  • up|down:啟動或關閉該連線資訊名稱的運作

如果需要新增連線資訊名稱,可以透過 [tab] 按鍵去處理~大致上會得到需要處理的項目有:

  • con-name 連線資訊名稱:指定一個新名稱
  • type ethernet:使用乙太網路類型
  • ifname 網路卡界面:例如 eth0 這樣的網路界面
完成底下的練習:
  1. 仿照上述的功能,先列出目前你擁有的網路資訊名稱: nmcli connection show
  2. 將上述指令找到的連線名稱刪除: nmcli connection delete XXXX
  3. 重新觀察一下現有的連線名稱: nmcli connection show (應該不會有東西了!)
  4. 重建一個新的連線名稱: nmcli connection add con-name XXX type YYY ifname ZZZ
  5. 重新觀察一下現有的連線名稱: nmcli connection show (就會出現你指定的名稱)
  • 詳細的連線資訊內容與參數

設定好之後,再來詳細的觀察連線資訊的參數設定資料!資料非常龐大!你只要看底下列出來比較重要的地方即可:

[root@localhost ~]# nmcli  connection  show  eth0
connection.id:                          eth0         (連線資訊名稱)
connection.uuid:                        0ae1fc2c-65cf-46b8-acc4-514a56f26e4c
connection.stable-id:                   --
connection.interface-name:              eth0         (使用的網卡界面名稱)
connection.type:                        802-3-ethernet
connection.autoconnect:                 no           (是否預設啟動這個連線)
connection.autoconnect-priority:        0            (開頭為 connection 為連線資訊設定值)
...
802-3-ethernet.port:                    --           (開頭為 802-3 即為網卡硬體參數設定)
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          yes
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:
....
ipv4.method:                            auto         (IP 參數取得的方法,auto|manual)
ipv4.dns:                                            (DNS 的 IP 位址設定)
ipv4.dns-search:
ipv4.dns-options:                       (預設)
ipv4.dns-priority:                      0
ipv4.addresses:                                      (IP 位址的設定)
ipv4.gateway:                           --           (通訊閘 IP 位址的設定)
ipv4.routes:
ipv4.route-metric:                      -1           (開頭 ipv4 為針對 IPv4 的網路參數設定)
....
ipv6.method:                            auto         (開頭 ipv6 為針對 IPv6 的網路參數設定,都不理它!)
ipv6.dns:
ipv6.dns-search:
....
GENERAL.NAME:                           eth0         (開頭 GENERAL 為目前活動狀態下的連線資訊)
GENERAL.UUID:                           0ae1fc2c-65cf-46b8-acc4-514a56f26e4c
GENERAL.DEVICES:                        eth0
GENERAL.STATE:                          已啟用
GENERAL.DEFAULT:                        是
GENERAL.DEFAULT6:                       否
GENERAL.VPN:                            否
GENERAL.ZONE:                           --
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/0
GENERAL.SPEC-OBJECT:                    /
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         172.16.9.134/16  (開頭 IP4 為目前正在運作中的網路參數喔!)
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 肯定就是 auto 參數設定的運作值)
DHCP4.OPTION[2]:                        requested_domain_search = 1
....
IP6.ADDRESS[1]:                         fe80::2593:d152:94e5:2de8/64
IP6.GATEWAY:

上表當中,小寫的部份通常是『設定值』而已,大寫才是『實際運作狀態』喔!因此,通常你修改了設定值之後, 還得要啟動該連線資訊,這樣才算完整的設定妥當!觀察完畢之後,上表顯示 IP 的來源是 auto 意即是自動取得 IP 的狀態! 那不是我們要的!如果你想要重新手動設定網路參數的話,就得要這樣做:

[root@localhost ~]# nmcli connection [ modify eth0 ] [ connection.autoconnect yes ] 
   [ ipv4.method manual ] [ ipv4.addresses IP/NETMASK ] [ ipv4.gateway GWIP ] [ ipv4.dns DNSIP ]

相關的參數說明如下:

  • connection.autoconnect [no|yes]:指的是開機時,要不要自動啟動這個連線資訊
  • ipv4.method [auto|manual]:取得 IPv4 網路參數是使用自動還是手動設定
  • ipv4.addresses IP/NETMASK:指定 IPv4 的 IP 位址與子網路遮罩
  • ipv4.gateway GWIP:指定 IPv4 的通訊閘 IP 位址
  • ipv4.dns DNSIP:指定 IPv4 的 DNS 伺服器 IP 位址

說再多不如做一次~請進行底下的練習:

你的網路參數被要求如下設定:
  • 你的網路 IP 位址為 172.20.0.*/16 (* 為你的學號尾數)
  • 你的 Gateway 為 172.20.0.254
  • DNS Server IP 使用 120.114.100.1 及 120.114.150.1
然後開始設定你的網路環境:
  1. 修改:使用 nmcli connection modify eth0 ... 設定你的網路參數 (不能出現任何錯誤訊息)
  2. 查看:使用 nmcli connection show eth0 查看剛剛修改的參數值,有沒有正確的修改了
  3. 啟用:使用 nmcli connection up eth0 啟動剛剛的設定值
  4. 確認:使用 nmcli connection show eth0 看大寫的 IP4 位置,有沒有顯示正確的網路參數
如果沒有顯示正確的網路資訊,請再由第 1 個步驟開始一步一步去修改設定即可!
  • 網路主機名稱設定

每部主機應該都有一個合法的主機名稱比較妥當~而主機名稱的設定通常從左而右,最小單位到最大單位。舉例來說,崑山計中的 www 網站, 他的主機名稱應該是被設定為:『 www 網站, 崑山計中, 教育部, 台灣』,因此就成為『 www.ksu.edu.tw 』這樣的名稱了! 而預設我們的主機如果還沒有指定主機名稱之前,預設都會給予一個名為『本機 (localhost)』的主機名稱!查詢的方式如下:

[root@localhost ~]# hostname
localhost.localdomain

[root@localhost ~]# hostnamectl
   Static hostname: localhost.localdomain
Transient hostname: localhost.localdomain
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 741c73b552ed495d92a024bc7a9768cc
           Boot ID: 03283ca8e08941cea38b4f8d24385acb
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-514.el7.x86_64
      Architecture: x86-64

要修改主機名稱就使用 hostnamectl 直接修改即可!例如要改成 pc250.dic.ksu 時,可以這樣做:

[root@localhost ~]# hostnamectl set-hostname pc250.dic.ksu
[root@localhost ~]# hostnamectl
   Static hostname: pc250.dic.ksu
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 741c73b552ed495d92a024bc7a9768cc
           Boot ID: 03283ca8e08941cea38b4f8d24385acb
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-514.el7.x86_64
      Architecture: x86-64

不過,一般希望你的主機名稱與你的 IP 位址能夠對應起來!例如我們已經知道本機的名稱為 localhost,而且本機都有 127.0.0.1 這個 IP 位址, 所以當你使用底下的方式來檢查你的主機名稱時,就會有這樣的反應:

[root@localhost ~]# ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.046 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.026 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.026 ms
^C (這裡按下 [ctrl]+c 結束這次的 ping)
--- localhost ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.026/0.032/0.046/0.011 ms

系統怎麼知道這個主機名稱有 IP 的呢?其實答案就在 /etc/hosts 裡面!請自行參考該檔案的內容來處理! 讓你的主機名稱與你的 IP 能夠對應起來!

完成底下的練習:
  1. 讓你的主機名稱成為 pcXX.example.dic
  2. 讓這個主機名稱與你的 IP 達成對應
  3. 最後 ping pcXX.example.dic 時,會出現相對的 IP 顯示。
  4. 當 ping gateway.example.dic 時,會連線到 172.20.0.254 那個 IP 上。
  • 網路參數的檢測流程

網路不通的時候,你最好能夠有能力找出來是哪個環節出問題~這樣,比較不會耽誤自己工作的時間!畢竟沒有網路是很痛苦的! 而由上面的介紹,我們知道你應該要有正確的 IP 位址資訊,然後有正確的通訊閘資訊,有正確的 DNS 伺服器資訊之後, 理論上就能夠順利的連上網際網路了。問題是,如果網路線鬆脫、如果 IP 分享器忘記開、如果是計中自己出問題、如果是網路線被老鼠咬爛了、 如果是 switch 熱當等等、如果是外部網路世界本身的問題等等,你怎麼知道可能的問題呢?基本上,是有檢測的流程的! 從我們自己本身查起來!流程是這樣的:

  1. 判斷 IP/Netmask 是否正確:
    • 可以使用 ifconfig 或 ip addr show 或 nmcli connection show eth0 等檢查;
    • 若發現錯誤,請使用 nmcli connection modify eth0 去修改,然後 nmcli connection up eth0 重新啟動
    • 然後重頭使用 ifconfig, ip addr show 等繼續檢查,直到成功為止。
  2. 判斷 gateway 設定是否正確:
    • 可以使用 route -n 或 nmcli connection show eth0 等檢查;
    • 若發現錯誤,同樣使用 nmcli connection modify eth0 修改及 nmcli connection up eth0 重起
    • 然後重新使用 route -n 或 nmcli connection show 等繼續檢查,直到成功為止。
  3. 確定主機與 gateway 之間的連線沒有問題:
    • 檢查你的主機到 gateway 之間的連線,可以使用 ping GW_IP 來檢查
    • 若無法連接上,請勿必確認 gateway 的 IP 位址是正確的!再次調整與修改
    • 若依舊無法連上,請檢查 (1)網路線是否鬆脫 (2)switch 是否沒開機 (3)IP 分享器是否出問題等
    • 若 ping 沒有回應,但是 arp -n 有出現 gateway IP 位址的 MAC 位址,則可能是防火牆的問題了。
  4. 判斷 DNS 系統的正確性:
    • 檢查 DNS 有沒有運作,可以使用 dig www.google.com
    • 若發生錯誤,請使用 cat /etc/resolv.conf 檢查 nameserver 的設定項目是否正確
    • 若不正確請使用 nmcli connection modify 去修改,然後 nmcli connection up 去重起
    • 一直到 dig www.google.com 有回應 IP 給你為止。
  5. 最後確認與中華電信 DNS 伺服器能不能連接上:
    • 可以使用 ping 168.95.1.1 對中華電信最大的 DNS 伺服器進行連線測試
    • 一般來說應該會有回應,但如果計中有抵擋,那可能就不會有回應!
    • 某些 Server 都會抵擋 ping 的回應,因此不見得每種 server 都會有回應喔!

一般來說,步驟 A 到步驟 D 成功後,你的網路就是暢通的情況了!如果出問題,那就一步一步檢查,如果是 C 以後的問題, 那很可能就是計中出問題,只能打電話去詢問囉!

依據上述的說明,嘗試檢查你的網路設定!

4.5: 本日練習

現在來複習一下今日的動作,作為本日的點名與查驗資訊。請在目前的雲端機器上面完成底下的實做,要完成且讓老師檢查完畢後,才可以離開教室喔!

  1. 網路參數的設定 (會持續用到學期末,所以一定要完成!未到的同學,也請自行完成!)
    • 你的內部網路為 192.168.40.*/24 (* 為你的學號尾數)
    • 你的 Gateway 為 192.168.40.254
    • DNS IP 使用 172.16.200.254 及 168.95.1.1
    設定完畢之後,請務必使用 4.4 最後提到的網路檢測方式去檢測你的網路狀態是否正確喔!非常重要!
  2. 主機名稱的設定:
    • 主機名稱請設定為 serverXX.linux.dic
    • 當 ping serverXX.linux.dic 時,會自動連線到 192.168.40.XX 那個 IP 上面
    • 當 ping server254.linux.dic 時,會自動連線到 192.168.40.254 那個 IP 上面
    • 老師會將班上所有同學的 IP 都寫上白板,每個同學的 IP 與主機名稱對應也請寫上設定檔。

完成之後請告知老師你的學號與 IP 尾數,老師即可檢測你的設定狀態了。

4.6: 課後練習

請撰寫一個 word 檔案,檔名為:『 unit04-A050cxxx-你的名字.docx 』,內容回答下列問題,然後每週作業上傳到對應的 EP 上面去:

回答下列的題目:

  1. 請從底層到上層,寫出 OSI 七層協定的各層中文名稱
  2. Layer 2 使用的封包 (訊框) 為 MAC,在這個封包上的表頭,有重要的什麼位址?
  3. Layer 3 使用了 IP 封包,這個封包的表頭上有什麼重要的位址?
  4. Layer 4 主要使用了那兩種封包?
  5. Layer 4 的封包上有什麼重要的來源與目標的資訊?
  6. 寫下 http, https, ftp, ssh 這四個服務的預設埠口號碼為幾號?
  7. 當網路速度為 60Mbps 時,下載一個 500Mbytes 的檔案大概需要多久的時間?
  8. 寫下 192.168.30.10/24 的 (1)Network IP, (2)Broadcast IP, (3) Netmask IP, (4)可用 IP 範圍
  9. DNS 這個服務的主要功能為何?
  10. 私有 IP 對應的主機名稱,通常寫在哪個檔案裡面做對應?
  11. 每一部可以連上 Internet 的主機都會有的 IP 與網段分別是?

同場加映:不用上傳的資料,請 google 一下打字時,手指與鍵盤指法的對應,然後自由練習底下的資訊:

  • 小寫的 a~z (abcdefg...xyz) ,共打 10 次
  • 小寫的 0~9,a~z (012..89abcdefg...xyz) ,共打 10 次
  • 不要啟動大寫燈,用組合按鍵輸入 A-Z (ABCD...XYZ),共 10 次

每天上課各練一次,最慢 10 天,你的打字就會嚇嚇叫了!