<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 2.3 TCP/IP 的網絡層相關封包與數據 ## 2.3 TCP/IP 的網絡層相關封包與數據 我們現在知道要有網絡的話,必須要有網絡相關的硬件,而目前最常見的網絡硬件接口為以太網絡,包括網絡線、網絡卡、Hub/Switch 等等。而以太網絡上面的傳輸使用網絡卡卡號為基準的 MAC 訊框,配合 CSMA/CD 的標準來傳送訊框,這就是硬件部分。在軟件部分,我們知道 Internet 其實就是 TCP/IP 這個通訊協議的通稱,Internet 是由 InterNIC([注12](#ps12)) 所統一管理的, 但其實他僅是負責分配 Internet 上面的 IP 以及提供相關的 TCP/IP 技術文件而已。不過 Internet 最重要的就是 IP 啊!所以, 這個小節就讓我們來講講網絡層的 IP 與路由吧! - - - - - - ### 2.3.1 IP 封包的封裝 目前因特網社會的 IP 有兩種版本,一種是目前使用最廣泛的 IPv4 (Internet Protocol version 4, 因特網協定第四版), 一種則是預期未來會熱門的 IPv6 。IPv4 記錄的地址由于僅有 32 位,預計在 2020 年前后就會分發完畢,如此一來, 新興國家或者是新的網絡公司,將沒有網絡可以使用。為了避免這個問題發生,因此就有 IPv6 的產生。 IPv6 的地址可以達到 128 位,可以多出 2 的 96 次方倍的網址數量,這樣的 IP 數量幾乎用不完啦!雖然 IPv6 具有前瞻性,但目前主流媒體大多還是使用 IPv4 ,因此本文主要談到的 IP 都指 IPv4 而言喔!([注13](#ps13)) 我們在前一小節談到 MAC 的封裝,那么 IP 封包的封裝也得要來了解一下,才能知道 IP 到底是如何產生的啊! IP 封包可以達到 65535 bytes 這么大,在比 MAC 大的情況下,我們的操作系統會對 IP 進行拆解的動作。至于 IP 封裝的表頭數據繪制如下:(下圖第一行為每個字段的 bit 數) 4 bits 4 bits 8 bits 3 bits 13 bitsVersion IHL Type of Service Total LengthIdentification Flags Fragmentation OffsetTime To Live Protocol Header ChecksumSource AddressDestination AddressOptions PaddingData圖 2.3-1、IP 封包的表頭資料 在上面的圖示中有個地方要注意,那就是『每一行所占用的位數為 32 bits』, 各個表頭的內容分別介紹如下: - Version(版本) 宣告這個 IP 封包的版本,例如目前慣用的還是 IPv4 這個版本就在這里宣告。 - IHL(Internet Header Length, IP表頭的長度) 告知這個 IP 封包的表頭長度,使用的單位應該是字組 (word) ,一個字組為 4bytes 大小喔。 - Type of Service(服務類型) 這個項目的內容為『PPPDTRUU』,表示這個 IP 封包的服務類型,主要分為: PPP:表示此 IP 封包的優先度,目前很少使用; D:若為 0 表示一般延遲(delay),若為 1 表示為低延遲; T:若為 0 表示為一般傳輸量 (throughput),若為 1 表示為高傳輸量; R:若為 0 表示為一般可靠度(reliability),若為 1 表示高可靠度。 UU:保留尚未被使用。 舉例來說,gigabit 以太網絡的種種相關規格可以讓這個 IP 封包加速且降低延遲,某些特殊的標志就是在這里說明的。 - Total Length(總長度) 指這個 IP 封包的總容量,包括表頭與內容 (Data) 部分。最大可達 65535 bytes。 - Identification(辨別碼) 我們前面提到 IP 袋子必須要放在 MAC 袋子當中。不過,如果 IP 袋子太大的話,就得先要將 IP 再重組成較小的袋子然后再放到 MAC 當中。而當 IP 被重組時,每個來自同一個 IP 的小袋子就得要有個標識符以告知接收端這些小袋子其實是來自同一個 IP 封包才行。 也就是說,假如 IP 封包其實是 65536 那么大 (前一個 Total Length 有規定), 那么這個 IP 就得要再被分成更小的 IP 分段后才能塞進 MAC 訊框中。那么每個小 IP 分段是否來自同一個 IP 資料,呵呵!那就是這個標識符的功用啦! - Flags(特殊旗標) 這個地方的內容為『0DM』,其意義為: D:若為 0 表示可以分段,若為 1 表示不可分段 M:若為 0 表示此 IP 為最后分段,若為 1 表示非最后分段。 - Fragment Offset(分段偏移) 表示目前這個 IP 分段在原始的 IP 封包中所占的位置。就有點像是序號啦,有這個序號才能將所有的小 IP 分段組合成為原本的 IP 封包大小嘛!透過 Total Length, Identification, Flags 以及這個 Fragment Offset 就能夠將小 IP 分段在收受端組合起來啰! - Time To Live(TTL, 存活時間) 表示這個 IP 封包的存活時間,范圍為 0-255。當這個 IP 封包通過一個路由器時, TTL 就會減一,當 TTL 為 0 時,這個封包將會被直接丟棄。說實在的,要讓 IP 封包通過 255 個路由器,還挺難的~ ^\_^ - Protocol Number(協定代碼) 來自傳輸層與網絡層本身的其他數據都是放置在 IP 封包當中的,我們可以在 IP 表頭記載這個 IP 封包內的資料是啥, 在這個字段就是記載每種數據封包的內容啦!在這個字段記載的代碼與相關的封包協議名稱如下所示: ``` | IP 內的號碼 | 封包協議名稱(全名) | | --- | --- | | 1 | ICMP (Internet Control Message Protocol) | | 2 | IGMP (Internet Group Management Protocol) | | 3 | GGP (Gateway-to-Gateway Protocol) | | 4 | IP (IP in IP encapsulation) | | 6 | TCP (Transmission Control Protocol) | | 8 | EGP (Exterior Gateway Protocol) | | 17 | UDP (User Datagram Protocol) | ``` 當然啦,我們比較常見到的還是那個 TCP, UDP, ICMP 說! - Header Checksum(表頭檢查碼) 用來檢查這個 IP 表頭的錯誤檢驗之用。 - Source Address 還用講嗎?當然是來源的 IP 地址,從這里我們也知道 IP 是 32 位喔! - Destination Address 有來源還需要有目標才能傳送,這里就是目標的 IP 地址。 - Options (其他參數) 這個是額外的功能,提供包括安全處理機制、路由紀錄、時間戳、嚴格與寬松之來源路由等。 - Padding(補齊項目) 由于 Options 的內容不一定有多大,但是我們知道 IP 每個數據都必須要是 32 bits,所以,若 Options 的數據不足 32 bits 時,則由 padding 主動補齊。 你只要知道 IP 表頭里面含有: TTL, Protocol, 來源地址與目標地址也就夠了!而這個 IP 表頭的來源與目標 IP ,以及那個判斷通過多少路由器的 TTL ,就能了解到這個 IP 將被如何傳送到目的端吶。后續各小節我們將介紹 IP 的組成與范圍,還有 IP 封包如何傳送的機制 (路由) 等等。 - - - - - - ### 2.3.2 IP 地址的組成與分級 現在我們知道 IP (Internet Protocol) 其實是一種網絡封包,而這個封包的表頭最重要的就是那個 32 位的來源與目標地址! 為了方便記憶,所以我們也稱這個 32 bits 的數值為 IP 網絡地址就是了。因為網絡是人類發明的,所以很多概念與郵務系統類似! 那這個 IP 其實就類似所謂的『門牌號碼』啦!那么這個 IP 有哪些重要的地方需要了解的呢?底下我們就來談一談吧! 既然 IP 的組成是 32 bits 的數值,也就是由 32 個 0 與 1 組成的一連串數字!那么當我們思考所有跟 IP 有關的參數時,你就應該要將該參數想成是 32 位的數據喔! 不過,因為人類對于二進制實在是不怎么熟悉,所以為了順應人們對于十進制的依賴性,因此,就將 32 bits 的 IP 分成四小段,每段含有 8 個 bits ,將 8 個 bits 計算成為十進制,并且每一段中間以小數點隔開,那就成了目前大家所熟悉的 IP 的書寫模樣了。如下所示: ``` IP 的表示式: 00000000.00000000.00000000.00000000 ==> 0.0.0.0 11111111.11111111.11111111.11111111 ==> 255.255.255.255 ``` 所以 IP 最小可以由 0.0.0.0 一直到 255.255.255.255 哩!但在這一串數字中,其實還可以分為兩個部分喔! 主要分為 Net\_ID (網域號碼)與 Host\_ID (主機號碼) 兩部份。我們先以 192.168.0.0 ~ 192.168.0.255 這個 Class C 的網域當作例子來說明好了: ``` 192.168.0.0~192.168.0.255 這個 Class C 的說明: 11000000.10101000.00000000.00000000 11000000.10101000.00000000.11111111 |----------Net_ID---------|-host--| ``` 在上面的范例當中,前面三組數字 (192.168.0) 就是網域號碼,最后面一組數字則稱為主機號碼。 至于同一個網域的定義是『在同一個物理網段內,主機的 IP 具有相同的 Net\_ID ,并且具有獨特的 Host\_ID』,那么這些 IP 群就是同一個網域內的 IP 網段啦! **Tips:** 什么是物理網段呢?當所有的主機都是使用同一個網絡媒體串在一起, 這個時候這些主機在實體裝置上面其實是聯機在一起的,那么就可以稱為這些主機在同一個物理網段內了! 同時并請注意,同一個物理網段之內,可以依據不同的 IP 的設定,而設定成多個『IP 網段』喔! ![](https://box.kancloud.cn/2016-05-13_5735736501917.gif) 上面例子當中的 192.168.0.0, 192.168.0.1, 192.168.0.2, ...., 192.168.0.255 (共 256 個) 這些 IP 就是同一個網域內的 IP 群(同一個網域也稱為同一個網段!),請注意,同一個 Net\_ID 內,不能具有相同的 Host\_ID ,否則就會發生 IP 沖突,可能會造成兩部主機都沒有辦法使用網絡的問題! - IP 在同一網域的意義 那么同一個網域該怎么設定,與將 IP 設定在同一個網域之內有什么好處呢? - Net\_ID 與 Host\_ID 的限制: 在同一個網段內,Net\_ID 是不變的,而 Host\_ID 則是不可重復,此外,Host\_ID 在二進制的表示法當中,不可同時為 0 也不可同時為 1 ,因為全為 0 表示整個網段的地址 (Network IP),而全為 1 則表示為廣播的地址 (Broadcast IP)。例如上面的例子當中,192.168.0.0 (Host\_ID 全部為 0)以及 192.168.0.255 (Host\_ID 全部為 1) 不可用來作為網段內主機的 IP 設定,也就是說,這個網段內可用來設定主機的 IP 是由 192.168.0.1 到 192.168.0.254; - 在區網內透過 IP 廣播傳遞數據 在同物理網段的主機如果設定相同的網域 IP 范圍 (不可重復),則這些主機都可以透過 CSMA/CD 的功能直接在區網內用廣播進行網絡的聯機,亦即可以直接網卡對網卡傳遞數據 (透過 MAC 訊框); - 設定不同區網在同物理網段的情況 在同一個物理網段之內,如果兩部主機設定成不同的 IP 網段,則由于廣播地址的不同,導致無法透過廣播的方式來進行聯機。 此時得要透過路由器 (router) 來進行溝通才能將兩個網域連結在一起。 - 網域的大小 當 Host\_ID 所占用的位越大,亦即 Host\_ID 數量越多時,表示同一個網域內可用以設定主機的 IP 數量越多。 所以說,貴單位公司內的計算機群,或者是你宿舍或家里面的所有計算機,當然都設定在同一個網域內是最方便的, 因為如此一來每一部計算機都可以直接透過 MAC 來進行數據的交流,而不必經由 Router (路由器) 來進行封包的轉遞呢!(Router 這部份在[第八章](http://linux.vbird.org/linux_server/0230router.php)才會提及)。 - IP 與門牌號碼的聯想 剛接觸到 IP 組成的朋友都很困擾,又分啥網域號碼與主機號碼,煩死了!其實,你不用煩惱啊!使用門牌號碼的概念來想即可。 既然 IP 是門牌,那拿我們昆山科技大學的門牌來說好了,我們的門牌是:『臺南市永康區大灣路 949 號』, 假設整個大灣路是同一個巷弄,那么我們這個門牌的網域號碼『臺南市永康區大灣路』而我的主機號碼就是『 949 號』, 那么整條大灣路上面只要是開頭為『臺南市永康區大灣路』的,就是跟我們同一個網域啰!當然啦,門牌號碼不可能有第二個 949 號啊!這樣理解否? 另外,Host\_ID 全為 0 與全為 1 (二進制的概念) 時,代表整條巷子的第一個與最后一個門牌,而第一個門牌我們讓他代表整條巷子, 所以又稱為 Network IP,就是巷子口那個 XXX 巷的立牌啦!至于最后一個 IP ,則代表巷子尾,亦即本條巷子的最后一個門牌, 那就是我們在巷子內廣播時的最后一個 IP ,又稱為 Broadcast IP 的啰。 在我們這個巷子內,我們可以透過大聲公用廣播的方式跟大家溝通訊息,例如前幾年很熱門的張君雅小妹妹的泡面廣告, 在巷子內透過廣播告訴張君雅小妹妹,你阿嬤將泡面煮好了,趕快回家吃面去!那如果不是張君雅小妹妹呢?就將該訊息略過啊! 這樣有沒有聯想到 CSMA/CD 的概念呢? 那如果你的數據不是要給本巷子內的門牌呢?此時你就得要將資料拿給巷子內的郵局 (路由器),由郵局幫你傳送, 你只要知道巷子內的那間郵局在哪里即可,其他的就讓郵局自己幫你把信件傳出去即可啊!這就是整個區網與門牌對應的想法! 這樣有沒有比較清晰啊? - IP 的分級 你應該要想到一個問題,那就是我的總門牌『臺南市永康區大灣路 949 號』中,到哪里是巷子而到哪里是門牌? 如果到『臺南市』是巷子,那么我的門牌將有好多鄉鎮的組成,如果巷子號碼到『臺南市永康區』時, 那么我們的門牌就又少了點。所以說,這個『巷子』的大小,將會影響到我們主機號碼的數量! 為了解決這個問題,以及為了 IP 管理與發放注冊的方便性,InterNIC 將整個 IP 網段分為五種等級, 每種等級的范圍主要與 IP 那 32 bits 數值的前面幾個位有關,基本定義如下: ``` 以二進制說明 Network 第一個數字的定義: Class A : 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的開頭是 0 |--net--|---------host------------| Class B : 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的開頭是 10 |------net-------|------host------| Class C : 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的開頭是 110 |-----------net-----------|-host--| Class D : 1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的開頭是 1110 Class E : 1111xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==> NetI_D 的開頭是 1111 五種分級在十進制的表示: Class A : 0.xx.xx.xx ~ 127.xx.xx.xx Class B : 128.xx.xx.xx ~ 191.xx.xx.xx Class C : 192.xx.xx.xx ~ 223.xx.xx.xx Class D : 224.xx.xx.xx ~ 239.xx.xx.xx Class E : 240.xx.xx.xx ~ 255.xx.xx.xx ``` 根據上表的說明,我們可以知道,你只要知道 IP 的第一個十進制數,就能夠約略了解到該 IP 屬于哪一個等級, 以及同網域 IP 數量有多少。這也是為啥我們上頭選了 192.168.0.0 這一 IP 網段來說明時,會將巷子定義到第三個數字之故。 不過,上表中你只要記憶三種等級,亦即是 Class A, B, C 即可,因為 Class D 是用來作為群播 (multicast) 的特殊功能之用 (最常用在大批計算機的網絡還原),至于 Class E 則是保留沒有使用的網段。因此,能夠用來設定在一般系統上面的,就只有 Class A, B, C 三種等級的 IP 啰! - - - - - - ### 2.3.3 IP 的種類與取得方式 接下來要跟大家談一談也是很容易造成大家困擾的一個部分,那就是 IP 的種類!很多朋友常常聽到什么『真實IP, 實體 IP, 虛擬 IP, 假的 IP....』煩都煩死了~其實不要太緊張啦!實際上,在 IPv4 里面就只有兩種 IP 的類別,分別是: - Public IP : 公共 IP ,經由 INTERNIC 所統一規劃的 IP,有這種 IP 才可以連上 Internet ; - Private IP : 私有 IP 或保留 IP,不能直接連上 Internet 的 IP , 主要用于局域網絡內的主機聯機規劃。 早在 IPv4 規劃的時候就擔心 IP 會有不足的情況,而且為了應付某些企業內部的網絡設定,于是就有了私有 IP (Private IP) 的產生了。私有 IP 也分別在 A, B, C 三個 Class 當中各保留一段作為私有 IP 網段,那就是: - Class A:10.0.0.0 - 10.255.255.255 - Class B:172.16.0.0 - 172.31.255.255 - Class C:192.168.0.0 - 192.168.255.255 由于這三段 Class 的 IP 是預留使用的,所以并不能直接作為 Internet 上面的連接之用,不然的話,到處就都有相同的 IP 啰!那怎么行!網絡豈不混亂?所以啰,這三個 IP 網段就只做為內部私有網域的 IP 溝通之用。簡單的說,他有底下的幾個限制: - 私有 IP 的路由信息不能對外散播 (只能存在內部網絡); - 使用私有 IP 作為來源或目的地址的封包,不能透過 Internet 來轉送 (不然網絡會混亂); - 關于私有 IP 的參考紀錄(如 DNS),只能限于內部網絡使用 (一樣的原理啦) 這個私有 IP 有什么好處呢?由于他的私有路由不能對外直接提供信息,所以,你的內部網絡將不會直接被 Internet 上面的 Cracker 所攻擊!但是,你也就無法以私有 IP 來『直接上網』啰!因此相當適合一些尚未具有 Public IP 的企業內部用來規劃其網絡之設定!否則當你隨便指定一些可能是 Public IP 的網段來規劃你企業內部的網絡設定時,萬一哪一天真的連上 Internet 了,那么豈不是可能會造成跟 Internet 上面的 Public IP 相同了嗎? 此外,在沒有可用的公開網絡情況下,如果你想要跟同學玩聯機游戲怎辦?也就是說,在區網內自己玩自己的聯機游戲, 此時你只要規范好所有同學在同一段私有 IP 網段中,就能夠順利的玩你的網絡啦!就這么簡單呢! 那么萬一你又要將這些私有 IP 送上 Internet 呢?這個簡單,設定一個簡單的防火墻加上 NAT (Network Address Transfer) 服務,你就可以透過 IP 偽裝 (不要急,這個在后面也會提到) 來使你的私有 IP 的計算機也可以連上 Internet 啰! - 特殊的 loopback IP 網段 好了,那么除了這個預留的 IP 網段的問題之外,還有沒有什么其他的怪東西呢?當然是有啦!不然鳥哥干嘛花時間來唬 XX 呢?沒錯,還有一個奇怪的 Class A 的網域,那就是 lo 這個奇怪的網域啦 (注意:是小寫的 o 而不是零喔)!這個 lo 的網絡是當初被用來作為測試操作系統內部循環所用的一個網域,同時也能夠提供給系統內部原本就需要使用網絡接口的服務 (daemon) 所使用。 簡單的說,如果你沒有安裝網絡卡在的機器上面, 但是你又希望可以測試一下在你的機器上面設定的服務器環境到底可不可以順利運作,這個時候怎么辦, 嘿嘿!就是利用這個所謂的內部循環網絡啦!這個網段在 127.0.0.0/8 這個 Class A,而且默認的主機 (localhost) 的 IP 是 127.0.0.1 呦!所以啰,當你啟動了你的 WWW 服務器,然后在你的主機的 X-Window 上面執行 <http://localhost> 就可以直接看到你的主頁啰!而且不需要安裝網絡卡呢!測試很方便吧! 此外,你的內部使用的 mail 怎么運送郵件呢?例如你的主機系統如何 mail 給 root 這個人呢?嘿嘿!也就是使用這一個內部循環啦!當要測試你的 TCP/IP 封包與狀態是否正常時,可以使用這個呦!(所以哪一天有人問你嘿!你的主機上面沒有網絡卡, 那么你可以測試你的 WWW 服務器設定是否正確嗎?這個時候可得回答:當然可以啰!使用 127.0.0.1 這個 Address 呀! ^\_^ ) - IP 的取得方式 談完了 IP 的種類與等級還有相關的子域概念后,接下來我們得來了解一下,那么主機的 IP 是如何設定的呢? 基本上,主機的 IP 與相關網域的設定方式主要有: - 直接手動設定(static): 你可以直接向你的網管詢問可用的 IP 相關參數,然后直接編輯配置文件 (或使用某些軟件功能) 來設定你的網絡。 常見于校園網絡的環境中,以及向 ISP 申請固定 IP 的聯機環境; - 透過撥接取得: 向你的 ISP 申請注冊,取得賬號密碼后,直接撥接到 ISP ,你的 ISP 會透過他們自己的設定,讓你的操作系統取得正確的網絡參數。 此時你并不需要手動去編輯與設定相關的網絡參數啦。目前臺灣的 ADSL 撥接、光纖到大樓、光纖到府等,大部分都是使用撥接的方式。 為因應用戶的需求,某些 ISP 也提供很多不同的 IP 分配機制。包括 hinet, seednet 等等都有提供 ADSL 撥接后取得固定 IP 的方式喔! 詳情請向你的 ISP 洽詢。 - 自動取得網絡參數 (DHCP): 在局域網絡內會有一部主機負責管理所有計算機的網絡參數,你的網絡啟動時就會主動向該服務器要求 IP 參數, 若取得網絡相關參數后,你的主機就能夠自行設定好所有服務器給你的網絡參數了。最常使用于企業內部、IP 分享器后端、 校園網絡與宿舍環境,及纜線寬帶等聯機方式。 不管是使用上面哪種方式取得的 IP ,你的 IP 都只有所謂的『 Public 與 Private IP 』而已!而其他什么浮動式、固定制、 動態式等等有的沒有的,就只是告訴你這個 IP 取得的方式而已。舉例來說,臺灣地區 ADSL 撥接后取得的 IP 通常是 public IP, 但是鳥哥曾接到香港網友的來信,他們 ADSL 撥接后,取得的 IP 是 Private ,所以導致無法架設網站喔! - - - - - - ### 2.3.4 Netmask, 子網與 CIDR (Classless Interdomain Routing) 我們前面談到 IP 是有等級的,而設定在一般計算機系統上面的則是 Class A, B, C。現在我們來想一想,如果我們設定一個區網, 使用的是 Class A ,那么我們很容易就會想到,哪有這么多計算機可以設定在同一個 Class A 的區段內 (256x256x256-2=16777214) ? 而且,假設真有這么多計算機好了,回想一下 CSMA/CD 吧,你的網絡恐怕會一直非常停頓,因為妳得要接到一千多萬臺計算機對你的廣播... 光是想到一千多萬臺的廣播,你的網絡還能使用嗎?真沒效率! 此外,分為 Class 的 IP 等級,是為了管理方面的考慮,事實上,我們不可能將一個 Class A 僅劃定為一個區網。舉例來說, 我們昆山取得的 Public IP 是 120.xxx 開頭的,但是其實我們只有 120.114.xxx.xxx 而已,并沒有取得整個 Class A 喔! 因為我們學校也用不了這么多嘛!這個時候,我們就得要理解一下啰,就是,怎么將 Class A 的網段變小?換句話說, 我們如何將網域切的更細呢?這樣不就可以分出更多段的區網給大家設定了? 前面我們提到 IP 這個 32 位的數值中分為網域號碼與主機號碼,其中 Class C 的網域號碼占了 24 位,而其實我們還可以將這樣的網域切的更細,就是讓第一個 Host\_ID 被拿來作為 Net\_ID ,所以,整個 Net\_ID 就有 25 bits ,至于 Host\_ID 則減少為 7 bits 。在這樣的情況下,原來的一個 Class C 的網域就可以被切分為兩個子域,而每個子域就有『 256/2 - 2 = 126 』個可用的 IP 了!這樣一來,就能夠將原本的一個網域切為兩個較細小的網域,方便分門別類的設計喔。 - Netmask, 或稱為 Subnet mask (子網掩碼) 那到底是什么參數來達成子網的切分呢?那就是 Netmask (子網掩碼) 的用途啦!這個 Netmask 是用來定義出網域的最重要的一個參數了!不過他也最難理解了~@\_@。為了幫助大家比較容易記憶住 Netmask 的設定依據,底下我們介紹一個比較容易記憶的方法。同樣以 192.168.0.0 ~ 192.168.0.255 這個網域為范例好了,如下所示,這個 IP 網段可以分為 Net\_ID 與 Host\_ID,既然 Net\_ID 是不可變的,那就假設他所占據的 bits 已經被用光了 (全部為 1),而 Host\_ID 是可變的,就將他想成是保留著 (全部為 0),所以, Netmask 的表示就成為: ``` 192.168.0.0~192.168.0.255 這個 C Class 的 Netmask 說明 第一個 IP: 11000000.10101000.00000000.00000000 最后一個 : 11000000.10101000.00000000.11111111 |----------Net_ID---------|-host--| Netmask : 11111111.11111111.11111111.00000000 <== Netmask 二進制 : 255 . 255 . 255 . 0 <== Netmask 十進制 特別注意喔,netmask 也是 32 位,在數值上,位于 Net_ID 的為 1 而 Host_ID 為 0 ``` 將他轉成十進制的話,就成為『255.255.255.0』啦! 這樣記憶簡單多了吧!照這樣的記憶方法,那么 A, B, C Class 的 Netmask 表示就成為這樣: ``` Class A, B, C 三個等級的 Netmask 表示方式: Class A : 11111111.00000000.00000000.00000000 ==> 255\. 0\. 0\. 0 Class B : 11111111.11111111.00000000.00000000 ==> 255.255\. 0\. 0 Class C : 11111111.11111111.11111111.00000000 ==> 255.255.255\. 0 ``` 所以說, 192.168.0.0 ~ 192.168.0.255 這個 Class C 的網域中,他的 Netmask 就是 255.255.255.0 !再來,我們剛剛提到了當 Host\_ID 全部為 0 以及全部為 1 的時后該 IP 是不可以使用的,因為 Host\_ID 全部為 0 的時后,表示 IP 是該網段的 Network ,至于全部為 1 的時后就表示該網段最后一個 IP ,也稱為 Broadcast ,所以說,在 192.168.0.0 ~ 192.168.0.255 這個 IP 網段里面的相關網絡參數就有: ``` 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 ``` - 子網切分 好了,剛剛提到 Class C 還可以繼續進行子域 (Subnet) 的切分啊,以 192.168.0.0 ~192.168.0.255 這個情況為例,他要如何再細分為兩個子域呢?我們已經知道 Host\_ID 可以拿來當作 Net\_ID,那么 Net\_ID 使用了 25 bits 時,就會如下所示: ``` 原本的 C Class 的 Net_ID 與 Host_ID 的分別 11000000.10101000.00000000.00000000 Network: 192.168.0.0 11000000.10101000.00000000.11111111 Broadcast: 192.168.0.255 |----------Net_ID---------|-host--| 切成兩個子網之后的 Net_ID 與 Host_ID 為何? 11000000.10101000.00000000.0 0000000 多了一個 Net_ID 了, 為 0 (第一個子網) 11000000.10101000.00000000.1 0000000 多了一個 Net_ID 了, 為 1 (第二個子網) |----------Net_ID-----------|-host--| 第一個子網 Network: 11000000.10101000.00000000.0 0000000 192.168.0.0 Broadcast: 11000000.10101000.00000000.0 1111111 192.168.0.127 |----------Net_ID-----------|-host-| Netmask: 11111111.11111111.11111111.1 0000000 255.255.255.128 第二個子網 Network: 11000000.10101000.00000000.1 0000000 192.168.0.128 Broadcast: 11000000.10101000.00000000.1 1111111 192.168.0.255 |----------Net_ID-----------|-host-| Netmask: 11111111.11111111.11111111.1 0000000 255.255.255.128 ``` 所以說,當再細分下去時,就會得到兩個子域,而兩個子域還可以再細分下去喔 (Net*ID 用掉 26 bits ....)。呵呵!如果你真的能夠理解 IP, Network, Broadcast, Netmask 的話,恭喜你,未來的服務器學習之路已經順暢了一半啦! ^*^ 例題:試著計算出 172.16.0.0,但 Net\_ID 占用 23 個位時,這個網域的 Netmask, Network, Broadcast 等參數答:由于 172.16.xxx.xxx 是在 Class B 的等級當中,亦即 Net\_ID 是 16 位才對。不過題目給的 Net\_ID 占用了 23 個位喔! 等于是向 Host\_ID 借了 (23-16) 7 個位用在 Net\_ID 當中。所以整個 IP 的地址會變成這樣: ``` 預設: 172 . 16 .0000000 0.00000000 |----Net_ID--------------|--Host---| Network: 172 . 16 .0000000 0.00000000 172.16.0.0 Broadcast: 172 . 16 .0000000 1.11111111 172.16.1.255 Netmask: 11111111.11111111.1111111 0.00000000 255.255.254.0 ``` 鳥哥在這里有偷懶,因為這個 IP 段的前 16 個位不會被改變,所以并沒有計算成二進制 (172.16), 真是不好意思啊~至于粗體部分則是代表 host\_ID 啊! 其實子網的計算是有偷吃步的,我們知道 IP 是二進制,每個位就是 2 的次方。又由于 IP 數量都是平均分配到每個子網去, 所以,如果我們以 192.168.0.0 ~ 192.168.0.255 這個網段來說,要是給予 Net\_ID 是 26 位時,總共分為幾段呢? 因為 26-24=2 ,所以總共用掉兩個位,因此有 2 的 2 次方,得到 4 個網段。再將 256 個 IP 平均分配到 4 個網段去, 那我們就可以知道這四個網段分別是: - 192.168.0.0~192.168.0.63 - 192.168.0.64~192.168.0.127 - 192.168.0.128~192.168.0.191 - 192.168.0.192~192.168.0.255 有沒有變簡單的感覺啊?那你再想想,如果同樣一個網段,那 Net\_ID 變成 27 個位時,又該如何計算呢?自己算算看吧! - 無層級 IP: CIDR (Classless Interdomain Routing) 一般來說,如果我們知道了 Network 以及 Netmask 之后,就可以定義出該網域的所有 IP 了!因為由 Netmask 就可以推算出來 Broadcast 的 IP 啊!因此,我們常常會以 Network 以及 Netmask 來表示一個網域,例如這樣的寫法: ``` Network/Netmask 192.168.0.0/255.255.255.0 192.168.0.0/24 <==因為 Net_ID 共有 24 個 bits ``` 另外,既然 Netmask 里面的 Net\_ID 都是 1 ,那么 Class C 共有 24 bits 的 Net\_ID ,所以啦,就有類似上面 192.168.0.0/24 這樣的寫法啰!這就是一般網域的表示方法。 同理可證,在上述的偷吃步計算網域方法中,四個網段的寫法就可以寫成: - 192.168.0.0/26 - 192.168.0.64/26 - 192.168.0.128/26 - 192.168.0.192/26 事實上,由于網絡細分的情況太嚴重,為了擔心路由信息過于龐大導致網絡效能不佳,因此,某些特殊情況下, 我們反而是將 Net\_ID 借用來作為 Host\_ID 的情況!這樣就能夠將多個網域寫成一個啦!舉例來說,我們將 256 個 Class C 的私有 IP (192.168.0.0~192.168.255.255) 寫成一個路由信息的話,那么這個網段的寫法就會變成: 192.168.0.0/16,反而將 192 開頭的 Class C 變成 class B 的樣子了! 這種打破原本 IP 代表等級的方式 (透過 Netmask 的規范) 就被稱為無等級網域間路由 (CIDR) 啰! ([注14](#ps14)) 老實說,你無須理會啥是無等級網域間路由啦!只要知道,那個 Network/Netmask 的寫法,通常就是 CIDR 的寫法! 然后,你也要知道如何透過 Netmask 去計算出 Network, Broadcast 及可用的 IP 等,那你的 IP 概念就相當完整了!^\_^ - - - - - - ### 2.3.5 路由概念 我們知道在同一個區網里面,可以透過 IP 廣播的方式來達到資料傳遞的目的。但如果是非區網內的數據呢? 這時就得要透過那個所謂的郵局 (路由器) 的幫忙了!這也是網絡層非常重要的概念喔!先來看看什么是區網吧! 例題:請問 192.168.10.100/25 與 192.168.10.200/25 是否在同一個網域內?答:如果經過計算,會發現 192.168.10.100 的 Network 為 192.168.10.0 ,但是 192.168.10.200 的 Network 卻是 192.168.10.128,由于 Net\_ID 不相同,所以當然不在同一個網段內! 關于 Network 與 Netmask 的算法則請參考上一小節。 如上題所述,那么這兩個網段的數據無法透過廣播來達到數據的傳遞啊,那怎辦? 此時就得要經過 IP 的路徑選擇 (routing) 功能啦!我們以下面圖示的例子來做說明。 下列圖示當中共有兩個不同的網段,分別是 Network A 與 Network B,這兩個網段是經由一部路由器 (Server A) 來進行數據轉遞的,好了,那么當 PC01 這部主機想要傳送數據到 PC11 時, 他的 IP 封包該如何傳輸呢? ![](https://box.kancloud.cn/2016-05-13_5735da4a8dbd7.jpg) 圖 2.3-2、簡易的路由示意圖 我們知道 Network A(192.168.0.0/24) 與 Network B(192.168.1.0/24) 是不同網段,所以 PC01 與 PC11 是不能直接互通數據的。不過, PC01 與 PC11 是如何知道他們兩個不在同一個網段內?這當然是透過 Net\_ID 來發現的!那么當主機想要傳送數據時,他主要的參考是啥? 很簡單!是『路由表 (route table)』,每部主機都有自己的路由表』, 讓我們來看一看預設的情況下, PC01 要如何將數據傳送到 PC02 呢? 1. 查詢 IP 封包的目標 IP 地址: 當 PC01 有 IP 封包需要傳送時,主機會查閱 IP 封包表頭的目標 IP 地址; 2. 查詢是否位于本機所在的網域之路由設定: PC01 主機會分析自己的路由表,當發現目標 IP 與本機 IP 的 Net\_ID 相同時(同一網域),則 PC01 會直接透過區網功能,將數據直接傳送給目的地主機。 3. 查詢預設路由 (default gateway): 但在本案例中, PC01 與 PC11 并非同一網域,因此 PC01 會分析路由表當中是否有其他相符合的路由設定, 如果沒有的話,就直接將該 IP 封包送到預設路由器 (default gateway) 上頭去,在本案例當中 default gateway 則是 Server A 這一部。 4. 送出封包至 gateway 后,不理會封包流向: 當 IP 由 PC01 送給 Server A 之后, PC01 就不理會接下來的工作。而 Server A 接收到這個封包后, 會依據上述的流程,也分析自己的路由信息,然后向后繼續傳輸到正確的目的地主機上頭。 **Tips:** Gateway / Router :網關/路由器的功能就是在負責不同網域之間的封包轉遞 (IP Forwarding),由于路由器具有 IP Forwarding 的功能,并且具有管理路由的能力, 所以可以將來自不同網域之間的封包進行轉遞的功能。此外,你的主機與你主機設定的 Gateway 必定是在同一個網段內喔! ![](https://box.kancloud.cn/2016-05-13_5735736501917.gif) 大致的情況就是這樣,所以每一部主機里面都會存在著一個路由表 (Route table),數據的傳遞將依據這個路由表進行傳送!而一旦封包已經經由路由表的規則傳送出去后, 那么主機本身就已經不再管封包的流向了,因為該封包的流向將是下一個主機 (也就是那部 Router) 來進行傳送,而 Router 在傳送時,也是依據 Router 自己的路由表來判斷該封包應該經由哪里傳送出去的!整體來說,數據傳送有點像這樣: ![](https://box.kancloud.cn/2016-05-13_5735da4ab8d9d.jpg) 圖 2.3-3、路由的概念 PC 01 要將資料送到 Server Bingo 去,則依據自己的路由表,將該封包送到 Server A 去,Server A 再繼續送到 Server B ,然后在一個一個的接力給他送下去,最后總是可以到達 Server Bingo 的。 上面的案例是一個很簡單的路由概念,事實上, Internet 上面的路由協議與變化是相當復雜的,因為 Internet 上面的路由并不是靜態的,他可以隨時因為環境的變化而修訂每個封包的傳送方向。 舉例來說,數年前在新竹因為土木施工導致臺灣西部整個網絡纜線的中斷。 不過南北的網絡竟然還是能通,為什么呢?因為路由已經判斷出西部纜線的終止, 因此他自動的導向臺灣東部的花蓮路線,雖然如此一來繞了一大圈,而且造成網絡的大塞車, 不過封包還是能通就是了!這個例子僅是想告訴大家,我們上面提的路由僅是一個很簡單的靜態路由情況, 如果想要更深入的了解 route ,請自行參考相關書籍喔! ^\_^ 。 此外,在屬于 Public 的 Internet 環境中,由于最早時的 IP 分配都已經配置妥當, 所以各單位的路由一經設定妥當后,上層的路由則無須擔心啊!IP 的分配可以參考底下的網頁: - 臺灣地區 IP 核發情況:[http://rms.twnic.net.tw/twnic/User/Member/Search/main7.jsp?Order=inet\_aton(Startip)](http://rms.twnic.net.tw/twnic/User/Member/Search/main7.jsp?Order=inet_aton%28Startip%29) - - \* ### 2.3.6 觀察主機路由: route 既然路由是這么的重要,而且『路由一旦設定錯誤, 將會造成某些封包完全無法正確的送出去!』 所以我們當然需要好好的來觀察一下我們主機的路由表啦!還是請再注意一下, 每一部主機都有自己的路由表喔!觀察路由表的指令很簡單,就是 route ,這個指令挺難的,我們在后面章節再繼續的介紹,這里僅說明一些比較簡單的用法: ``` [root@www ~]# route [-n] 選項與參數: -n : 將主機名以 IP 的方式顯示 [root@www ~]# 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@www ~]# 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 # 上面輸出的數據共有八個字段,你需要注意的有幾個地方: # Destination :其實就是 Network 的意思; # Gateway :就是該接口的 Gateway 那個 IP 啦!若為 0.0.0.0 表示不需要額外的 IP; # Genmask :就是 Netmask 啦!與 Destination 組合成為一部主機或網域; # Flags :共有多個旗標可以來表示該網域或主機代表的意義: # U:代表該路由可用; # G:代表該網域需要經由 Gateway 來幫忙轉遞; # H:代表該行路由為一部主機,而非一整個網域; # Iface :就是 Interface (接口) 的意思。 ``` 在上面的例子當中,鳥哥是以 PC 01 這部主機的路由狀態來進行說明。由于 PC 01 為 192.168.0.0/24 這個網域,所以主機已經建立了這個網域的路由了,那就是『 192.168.0.0 *255.255.255.0 ... 』那一行所顯示的訊息!當你下達 route 時, 屏幕上說明了這部機器上面共有三個路由規則,第一欄為『目的地的網域』,例如 192.168.0.0 就是一個網域咯,最后一欄顯示的是 『要去到這個目的地要使用哪一個網絡接口!』例如 eth0 就是網絡卡的裝置代號啦。如果我們要傳送的封包在路由規則里面的 192.168.0.0/255.255.255.0 或者 127.0.0.0/255.0.0.0 里面時,因為第二欄 Gateway 為* ,所以就會直接以后面的網絡接口來傳送出去,而不透過 Gateway 咯! 萬一我們要傳送的封包目的地 IP 不在路由規則里面,那么就會將封包傳送到『default』所在的那個路由規則去,也就是 192.168.0.254 那個 Gateway 喔!所以,幾乎每一部主機都會有一個 default gateway 來幫他們負責所有非網域內的封包轉遞!這是很重要的概念喔!^\_^! 關于更多的路由功能與設定方法,我們在[第八章](http://linux.vbird.org/linux_server/0230router.php)當中會再次的提及呢! - - - - - - ### 2.3.7 IP 與 MAC:鏈結層的 ARP 與 RARP 協定 現在我們知道 Internet 上面最重要的就是那個 IP 了,也會計算所謂的局域網絡與路由。 但是,事實上用在傳遞數據的明明就是以太網絡啊!以太網絡主要是用網卡卡號 (MAC) 的嘛!這就有問題啦!那這兩者 (IP 與 MAC) 勢必有一個關連性存在吧?沒錯!那就是我們要談到的 ARP (Address Resolution Protocol, 網絡地址解析) 協議,以及 RARP (Revers ARP, 反向網絡地址解析) 當我們想要了解某個 IP 其實是設定于某張以太網絡卡上頭時,我們的主機會對整個區網發送出 ARP 封包, 對方收到 ARP 封包后就會回傳他的 MAC 給我們,我們的主機就會知道對方所在的網卡,那接下來就能夠開始傳遞數據啰。 如果每次要傳送都得要重新來一遍這個 ARP 協定那不是很煩?因此,當使用 ARP 協議取得目標 IP 與他網卡卡號后, 就會將該筆記錄寫入我們主機的 ARP table 中 (內存內的數據) 記錄 20 分鐘 ([注14](#ps14))。 例題:如何取得自己本機的網卡卡號 (MAC)答: ``` 在 Linux 環境下 [root@www ~]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:01:03:43:E5:34 inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::201:3ff:fe43:e534/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 ..... 在 Windows 環境下 C:\Documents and Settings\admin..> ipconfig /all .... Physical Address. . . . . . . . . : 00-01-03-43-E5-34 .... ``` 那如何取得本機的 ARP 表格內的 IP/MAC 對應數據呢?就透過 arp 這個指令吧! ``` [root@www ~]# arp -[nd] hostname [root@www ~]# arp -s hostname(IP) Hardware_address 選項與參數: -n :將主機名以 IP 的型態顯示 -d :將 hostname 的 hardware_address 由 ARP table 當中刪除掉 -s :設定某個 IP 或 hostname 的 MAC 到 ARP table 當中 范例一:列出目前主機上面記載的 IP/MAC 對應的 ARP 表格 [root@www ~]# arp -n Address HWtype HWaddress Flags Mask Iface 192.168.1.100 ether 00:01:03:01:02:03 C eth0 192.168.1.240 ether 00:01:03:01:DE:0A C eth0 192.168.1.254 ether 00:01:03:55:74:AB C eth0 范例二:將 192.168.1.100 那部主機的網卡卡號直接寫入 ARP 表格中 [root@www ~]# arp -s 192.168.1.100 01:00:2D:23:A1:0E # 這個指令的目的在建立靜態 ARP ``` 如同上面提到的,當你發送 ARP 封包取得的 IP/MAC 對應,這個記錄的 ARP table 是動態的信息 (一般保留 20 分鐘),他會隨時隨著你的網域里面計算機的 IP 更動而變化,所以,即使你常常更動你的計算機 IP,不要擔心,因為 ARP table 會自動的重新對應 IP 與 MAC 的表格內容!但如果你有特殊需求的話, 也可以利用『 arp -s 』這個選項來定義靜態的 ARP 對應喔! - - - - - - ### 2.3.8 ICMP 協定 ICMP 的全名是『 Internet Control Message Protocol, 因特網訊息控制協議 』。 基本上,ICMP 是一個錯誤偵測與回報的機制,最大的功能就是可以確保我們網絡的聯機狀態與聯機的正確性! ICMP 也是網絡層的重要封包之一,不過,這個封包并非獨立存在,而是納入到 IP 的封包中!也就是說, ICMP 同樣是透過 IP 封包來進行數據傳送的啦!因為在 Internet 上面有傳輸能力的就是 IP 封包啊! ICMP 有相當多的類別可以偵測與回報,底下是比較常見的幾個 ICMP 的類別 (Type): 類別代號 類別名稱與意義0 Echo Reply (代表一個響應信息)3 Destination 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 Reply (此訊息純粹是響應 Timestamp Request 用的)15 Information Request (在 RARP 協議應用之前,此訊息是用來在開機時取得網絡信息)16 Information Reply (用以響應 Infromation Request 訊息)17 Address Mask Request (這訊息是用來查詢子網 mask 設定信息)18 Address Mask Reply (響應子網 mask 查詢訊息的)那么我們是如何利用 ICMP 來檢驗網絡的狀態呢?最簡單的指令就是 ping 與 traceroute 了, 這兩個指令可以透過 ICMP 封包的輔助來確認與回報網絡主機的狀態。在設定防火墻的時候, 我們最容易忽略的就是這個 ICMP 的封包了,因為只會記住 TCP/UDP 而已~事實上, ICMP 封包可以幫助聯機的狀態回報,除了上述的 8 可以考慮關閉之外,基本上,ICMP 封包也不應該全部都擋掉喔! - - - - - -
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看