由前一章節『架站前的技巧分析』當中,我們已經知道網路基礎是很重要的呢!在這個章節當中,我們主要針對網路基礎來進行比較深入的談論。當然啦,光是網路基礎裡面的 OSI 七層協定,就可以寫了滿滿的一大本書了,我們的目的僅是讓大家對於網路基礎有點認識就是了!因此,在這個章節中,我試圖以較為簡單的方式介紹網路的基礎概念,這裡面包括了 IP, route, TCP, 以及類似三向交握等等的網路基礎,希望能夠讓大家早一點進入狀況喔! ^_^ |
1. 在 Linux
底下:
[root@test root]# ifconfig eth0 Link encap:Ethernet HWaddr 00:05:D3:43:E4:80 inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 ..... 2. 在 Windows 2000 底下: C:\> ipconfig /all Windows 2000
IP Configuration
|
[root@test
root]# arp [-and] hostname
[root@test root]# arp -s hostname(IP) Hardware_address 參數說明: -a :顯示出目前主機所有的 IP 對應 MAC 狀態 -n :將主機名稱以 IP 的型態顯示 -d :將 hostname 的 hardware_address 由 ARP table 當中刪除掉 -s :設定某個 IP 或 hostname 的 MAC 到 ARP table 當中 範例: [root@test root]# arp Address HWtype HWaddress Flags Mask Iface localhost ether 08:00:20:C5:89:4D C eth0 [root@test root]# arp -n Address HWtype HWaddress Flags Mask Iface 192.168.1.1 ether 08:00:20:C5:89:4D C eth0 [root@test root]# arp -s 192.168.1.100 01:00:2D:23:A1:0E |
IP 的表示式:
00000000.00000000.00000000.00000000 ==>0.0.0.0 11111111.11111111.11111111.11111111 ==>255.255.255.255 |
192.168.0.0~192.168.0.255
這個 C Class 的說明:
11000000.10101000.00000000.00000000 11000000.10101000.00000000.11111111 |----------Net_ID---------|-host--| |
以二進位說明
Network 第一個數字的定義:
A Class : 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>開頭是 0 |--net--|---------host------------| B Class : 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>開頭是 10 |------net-------|------host------| C Class : 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>開頭是 110 |-----------net-----------|-host--| 以十進位說明 Network 的定義: A Class : 0.xx.xx.xx ~ 126.xx.xx.xx B Class : 128.xx.xx.xx ~ 191.xx.xx.xx C Class : 192.xx.xx.xx ~ 223.xx.xx.xx |
192.168.0.0~192.168.0.255
這個 C Class 的說明:
11000000.10101000.00000000.00000000 11000000.10101000.00000000.11111111 |----------Net_ID---------|-host--| 11111111.11111111.11111111.00000000 <== Netmask 二進位 255 . 255 . 255 . 0 <== Netmask 十進位 |
Netmask 表示方式:
A Class : 11111111.00000000.00000000.00000000 ==> 255. 0. 0. 0 B Class : 11111111.11111111.00000000.00000000 ==> 255.255. 0. 0 C Class : 11111111.11111111.11111111.00000000 ==> 255.255.255. 0 |
Netmask:
255.255.255.0 <==網域定義中,最重要的參數
Network: 192.168.0.0 <==第一個 IP Broadcast: 192.168.0.255 <==最後一個 IP 可用的 IP 數: 192.168.0.1 ~ 192.168.0.254 |
Network/Netmask
192.168.0.0/255.255.255.0 192.168.0.0/24 |
原本的 C Class:
11000000.10101000.00000000.00000000 11000000.10101000.00000000.11111111 |----------Net_ID---------|-host--| 切成兩個子網路 子網路一: 11000000.10101000.00000000.00000000 <==Network 11000000.10101000.00000000.01111111 <==Broadcast |----------Net_ID----------|-host-| 11111111.11111111.11111111.10000000 <==Netmask 二進位 255 . 255 . 255 . 128 <==Netmask 十進位 所有 IP 與網域表示式: 192.168.0.0 ~ 192.168.0.127 192.168.0.0/25 或 192.168.0.0/255.255.255.128 子網路二: 11000000.10101000.00000000.10000000 <==Network 11000000.10101000.00000000.11111111 <==Broadcast |----------Net_ID----------|-host-| 11111111.11111111.11111111.10000000 <==Netmask 二進位 255 . 255 . 255 . 128 <==Netmask 十進位 所有 IP 與網域表示式: 192.168.0.128 ~ 192.168.0.255 192.168.0.128/25 或 192.168.0.128/255.255.255.128 |
[root@test
root]# route [-n]
參數說明: -n :將主機名稱以 IP 的方式顯示 範例: [root@test root]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 127.0.0.0 * 255.0.0.0 U 0 0 0 lo default 192.168.0.254 0.0.0.0 UG 0 0 0 eth0 [root@test root]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 eth0 |
曾經有一個朋友問過我說:『一部主機上面這麼多服務,那我們跟這部主機進行連線時,該主機怎麼知道我們要的資料是
WWW 還是 FTP 啊?!』呵呵!這就是 port 的不同的結果啦!因為每種 Client
軟體他們所需要的資料都不相同,例如上面提到的 Netscape 以及 IE 他們所需要的資料是
WWW ,所以該軟體預設就會向主機的 80 port 索求資料;而如果您是使用 cuteftp
來進行與主機的 FTP 資料索求時, cuteftp 這個 Client 軟體當然預設就是向主機的
FTP 相關埠口 ( 預設就是 port 21 ) 進行連接的動作啦!所以當然就可以正確無誤的取得
Client 端所需要的資料了。
舉個例子來說,一部主機就好像是一間多功能銀行,該銀行內的每個負責不同業務的窗口就好像是通訊埠口,而我們民眾就好像是 Client 端來的封包。當您進入銀行想要繳納信用卡帳單時,一到門口服務人員就會指示您直接到該窗口去繳納,當然,如果您是要領錢,服務人員就會請您到領錢的窗口去填寫資料,您是不會跑錯的對吧! ^_^。萬一跑錯了怎麼辦?呵呵!當然該窗口就會告訴您『我不負責這個業務,您請回去!』,呵呵!所以該次的連線就會『無法成功』咯! |
Source Port(16) | Destination Port(16) | ||||||||
Sequence Number(32) | |||||||||
Acknowledgment Number(32) | |||||||||
Data Offset(4) | Reserved(6) | U
G R |
A
C K |
P
S H |
R
S T |
S
Y N |
F
I N |
|
|
Checksum(16) | Urgent Pointer(16) | ||||||||
|
|||||||||
...... Message |
UDP Source Port(16) | UDP Destination Port(16) | ||||||||
Message Length(16) | UDP checksum(16) | ||||||||
...... Message |
|
|
|
0 | Echo Reply | 代表一個回應信息 |
3 | Distination Unreachable | 表示目的地不可到達 |
4 | Source Quench | 當 router 的負載過時,這個類別碼可以用來讓發送端停止繼續發送訊息 |
5 | Redirect | 用來重新導向路由路徑的資訊 |
8 | Echo Request | 請求回應訊息 |
11 | Time Exceeded for a Datagram | 當資料封包在某些路由傳送的現象中造成逾時狀態,此類別碼可告知來源該封包已被忽略的訊息 |
12 | Parameter Problem on a Datagram | 當一個 ICMP 封包重複之前的錯誤時,會回覆來源主機關於參數錯誤的訊息 |
13 | Timestamp Request | 要求對方送出時間訊息,用以計算路由時間的差異,以滿足同步性協定的要求 |
14 | Timestamp Replay | 此訊息純粹是回應 Timestamp Request 用的 |
15 | Information Request | 在 RARP 協定應用之前,此訊息是用來在開機時取得網路信息 |
16 | Information Reply | 用以回應 Infromation Request 訊息 |
17 | Address Mask Request | 這訊息是用來查詢子網路 mask 設定信息 |
18 | Address Mask Reply | 回應子網路 mask 查詢訊息的 |
除了上面提到的最基本的網路基礎概念之外,這裡還必須要先談一個基本的觀念,否則後續的主機名稱查詢設定挺難說明白的!好了,我們知道電腦在網路上面要找尋主機的時後,是利用 IP 來定址,而以 TCP/UDP/ICMP 等資料來進行傳送的,並且傳送的過程中還會去檢驗封包的資訊。總歸一句話,網路是靠 TCP/IP 家族來達成的,所以必須要知道 IP 之後,電腦才能夠連上網路以及傳送資料。
問題是,電腦網路是依據人類的需要來建立的,不過人類對於 IP 這一類的數字並不具有敏感性,即使 IP 已經被簡化為十進位了,但是人類就是對數字沒有辦法啊!怎麼辦?!沒關係,反正電腦都有主機名稱嘛!那麼我就將主機名稱與他的 IP 對應起來,未來要連接上該電腦時,只要知道該電腦的主機名稱就好了,因為 IP 已經對應到主機名稱了嘛!所以人類也容易記憶文字類的主機名稱,電腦也可以藉由對應來找到他必須要知道的 IP ,啊!真是皆大歡喜啊!
這個主機名稱 (Hostname) 對應 IP 的系統,就是鼎鼎有名的 Domain Name System (DNS) 咯!也就是說, DNS 這個服務的最大功能就是在進行『主機名稱與該主機的 IP 的對應』的一項協定。DNS 在網路環境當中是相當常被使用到的一項協定喔!舉個例子來說,像鳥哥我常常會連到奇摩雅虎的 WWW 網站去看最新的新聞,那麼我一定需要將奇摩雅虎的 WWW 網站的 IP 背下來嗎?!天吶,鳥哥的忘性這麼好,怎麼可能將 IP 背下來?!不過,如果是要將奇摩站的主機名稱背下來的話,那就容易的多了!不就是 http://tw.yahoo.com 嗎?!而既然電腦主機只認識 IP 而已,因此當我在瀏覽器上面輸入了『http://tw.yahoo.com』的時後,我的電腦首先就會藉由向 DNS 主機查詢 tw.yahoo.com 的 IP 後,再將查詢到的 IP 結果回應給我的瀏覽器,那麼我的瀏覽器就可以藉由該 IP 來連接上主機啦!
發現了嗎?我的電腦必須要向 DNS 主機查詢 Hostname 對應 IP 的資訊喔!那麼那部 DNS 主機的 IP 就必須要在我的電腦裡面設定好才行,並且必須要是輸入 IP 喔,不然我的電腦怎麼連到 DNS 主機去要求資料呢?呵呵!在 Linux 裡面,DNS 主機 IP 的設定就是在 /etc/resolv.conf 這個檔案裡面啦!
目前各大 ISP 都有提供他們的 DNS 主機 IP 給他們的用戶,好設定客戶自己電腦的 DNS 查詢主機,不過,如果您忘記了或者是您使用的環境中並沒有提供 DNS 主機呢?呵呵!沒有關係,那就設定中華電信那個最大的 DNS 主機吧! IP 是 168.95.1.1 咯!要設定好 DNS 之後,未來上網瀏覽時,才能使用主機名稱喔!不然就得一定需要使用 IP 才能上網呢!DNS 是很重要的,他的原理也頂複雜的,更詳細的原理我們在後面的『DNS 伺服器架設』裡面進行更多更詳細的說明喔!這裡僅提個大綱!
圖七、星形網路連線的概要
|
1 2 3 4 5 6 7 8 |
|
白綠 綠 白橙 藍 白藍 橙 白棕 棕 |
|
白橙 橙 白綠 藍 白藍 綠 白棕 棕 |
本文在 2002/07 發出之後,收到相當多朋友的關心,也從而發現了自己誤會的一些基礎的網路理論,真的是感謝好朋友 Netman 兄與 ZMAN 兄的指導!這篇短文在 2003/08/03 做了相當大幅度的修訂,與原來的文章 ( 上次更新日期 2002/09 ) 已經有一定程度的差異了,希望網友們如果有時間的話,能夠再次的閱讀,以釐清一些基本概念喔!