Transcript CH7

第七章 網際網路

7-1 網際網路的歷史 7-2 資料連結層 7-3 網路層 7-4 傳輸層 7-5 應用層 7-6 網際網路的基本設定和除錯方式

7-1 網際網路的歷史

 「網路」和「網際網路」是常常混淆的二 個名詞  網路:把電腦與電腦使用網路線相連成網  網際網路(Internet):連結各個網路所成的 大型網路(inter-network),特指今日全球個人 電腦等設備所連結上的大型網路  連結上網的機器常稱為主機(host)或是終端 (terminal)

上網

• 一般所謂的「上網」指的是「連上網際網 路(Internet)」 • 一般使用者上網都是透過ISP業者(Internet Service Provider)連上網路 – 知名的ISP業者如中華電信、台灣固網等 – 各家電信公司的行動網路 – 提供學術單位連接網路的臺灣學術網路(TANet)

網際網路(Internet)示意圖

線路交換 – Circuit Switching

 早期電信系統的網路使用線路交換  兩方溝通採用獨占線路的方式

封包交換 – Packet Switching (1/3)

 網際網路使用封包交換技術傳輸資料  1961年由學者Leonard Kleinrock所提出  所有的資料均切割包裝為「封包」後,再 進行傳輸  封包大小有其限制  以Ethernet為例,其上限為1500位元組

封包交換 – Packet Switching (2/3)

• 資料傳送時,需要先切割為小片段的封包 • 接收端收到資料後,再將小片段的封包組 合起來 • 每個封包由發送端傳送到接收端,其傳輸 過程所經過的網路路徑可能會有所不同 – – 和傳統的線路交換比較起來,封包交換可以充份 利用網路資源,減少資源浪費,執行效率更佳 但缺點是,因為資源是共享的,所以網路的品質 較難掌握

封包交換 – Packet Switching (3/3)

網際網路的歷史

網際網路的歷史 (續)

網際網路的運作

 分層介紹  資料連結層  網路層  傳輸層  應用層

7-2資料連結層

• 資料連結層和網際網路的運作,並無直接 關係 – 大多負責區域網路內,或是點對點網路的連線 • 但要連上網際網路,得把封包交由區域網 路內負責對外的 路由器 (router)轉送 • 區域網路內的裝置通常用硬體編號加以識 別 • 上網主機的網路卡上有實體位址;路由器 的網路介面上也有實體位址

實體位址

• 「實體位址」(Physical Address)有時也稱 為MAC位址 • 區網裡的每一個網路卡都有實體位址,且 不得重複 • 以Ethernet或是802.11無線網路為例,實 體位址是六組8-bit的數字,以16進位表示 法表示 • 每一組數字之間以「:」號或「-」號隔開 • 實體位址的前三組數字,通常是廠商代碼

查詢實體位址

 以Windows作業系統為例: 使用「ifconfig /all」指令

查詢實體位址 (續)

• 查詢到的實體位址,以上頁為例 – 乙太網路卡(有線網路): 00-24-BE-D8-12-9F – 無線網路卡: 00-27-10-DD-94-F8 • 可透過前三碼查詢網路卡的廠牌 – IEEE-SA - Registration Authority OUI Registration網站: http://standards.ieee.org/develop/regauth/ oui/public.html

– 00-24-BE: Sony Corporation – 00-27-10: Intel Corporate

7-3 網路層

• 網路層在網際網路裡扮演十分重要的角色 • 重要的功能包括 – 網路位址 (addressing)、資料切割 (fragmentation)以及網路路由 (routing) • 常用的網路層協定為IPv4及IPv6 – IP (Internet Protocol)協定的第四版和第六版 – 目前最常用的網路層協定是IPv4 – 但一直以來也有人在推廣IPv6

IPv4

 IPv4的網路位址是一個  32-bit 的數字 常常用 4組8-bit 的十進位數字表示,並用「.」符號區隔   如10.0.0.1、192.168.1.1、202.169.175.89等等 世界上每一台連上Internet的電腦,都要一個網路位址  32-bit的數字,最多可以提供 4,294,967,296 個網路位 址  還要扣除一些保留使用的位址  聽起來是很大的數字,但 實際上已經幾乎用光了  所以需要IP分享器—讓多台電腦共用一個網路位址

IPv6

• IPv4的位址不夠用,所以推廣IPv6 • IPv6的網路位址是128-bit的數字,最多可以有 340,282,366,920,938,463,463,374,607,431,768 ,211,456 個網路位址: 地球上每一隻螞蟻都可以配一個位址 • 網路位址常常用8組16-bit的十六進位數字表示, 並用「:」號隔開 – 如 fe80::92e6:baff:fe8c:631d 或是 2404:6800:4008:c01::8b – 如果是二個「::」接在一起,表示中間都是「0」

IPv4 與 IPv6

• 雖然IPv6的位址很多,但只有IPv4位址的主機是 無法直接連線到IPv6的主機的,反之亦然 – 中間需要有特別的設備進行轉址 • 推廣使用者從IPv4轉換到IPv6的環境是一條漫長 的路 – 相關的設備(作業系統、路由器)都要更新 • 部份電信業者開始讓手機上網使用IPv6 – 手機裝置的數量成長的太快了 • 暫時解決IPv4 網路位址的不足: IP分享器、NAT技 術

IPv4位址的傳統分段

• 傳統IPv4的位址分為五段: ABCDE • ABC為一般用途;D為群播(multicast)用途; E為保留段 • 分段的目的是為了方便路由,但這種分法 太粗糙了

私有位址 – Private Address

 ABC段裡各自有保留一小段位址做為「私 有位址」  私有位址只能在區域網路裡使用,不能連上 Internet  私有位址常常被IP分享器拿來分配給區網下 的使用者  使用私有位址的電腦主機,要連上Internet 時,需要透過轉址(轉為非私有位址)後,才 連得出去  轉址的動作則是由IP分享器負責進行

IPv4位址的一般分段

• IPv4傳統分段過於粗糙 • 實務上,通常使用不特定段落(classless)的 分段 • 分段時,使用「網路遮罩」(netmask)或稱 為「子網路遮罩」(sub-netmask)來進行計 算和判斷 • 同一段裡的IP位址通常是位於同一個區域網 路裡,可以直接相連 • 不同段的IP位址,通常需要透過路由器轉送, 才得以相連

網路遮罩 – Netmask

• 網路遮罩和IP位址的一樣是32-bit的數字 (或是用4組8-bit十進位的數字表示) • 網路遮罩的值,是一個從MSB(最左邊的位 元)起,連續n個bit-1 的正整數(n < 32) • 舉例來說 – 若n=8:11111111 00000000 00000000 00000000 則網路遮罩為:255.0.0.0

– 若n=20:11111111 11111111 11110000 00000000 則網路遮罩為:255.255.240.0

網路遮罩 – Netmask (續)

 已知網路遮罩和IP位址,可以用AND運算 計算出所謂的「網路識別碼」(network ID)  若 IP 為 192.168.1.234

 網路遮罩為 255.255.255.0 (n = 24 )  則網路識別碼為 192.168.1.0

 這個網路也可以用這種方式表示: 192.168.1.0

/ 24  計算: 11000000 10101000 00000001 11101010 (192.168.1.234) AND) 11111111 11111111 11111111 00000000 (255.255.255.0) 11000000 10101000 00000001 00000000 (192.168.1.0)

網路遮罩、網路大小、網路位址

• 同一個網路的網路識別碼和網路遮罩會相同 • 網路遮罩也決定網路的大小(網路裡可用的 IP數量) – 網路遮罩含蓋的部份不可變動(前面n個位元) – 其餘的部份則是同一個網路下的可用的IP – 但要扣除位址部份全部為0以及全部為1的部份 • 請見下頁範例

網路位址的計算

• 給定網路:202.169.173.192/26 – 網路識別碼: 202.169.173.192

– 網路遮罩:255.255.255.192 (n = 26) – 可用IP數量為64,其中全為0的是網路識別碼 • 11001010 10101001 10101101 11 000000 – 全為1的則是廣播位址:202.169.173.255

• 11001010 10101001 10101101 11 111111 – 藍色部份為網路識別碼;紅字部份為可變的位 址

網路遮罩與路由

 從網路主機計算路由的角度而言,同一個 網路的網路識別碼會相同  當網路識別碼不同時,就必需將封包傳給 路由器,讓路由器來進行轉送

資料切割

• 網路上傳輸的基本單位是封包 • 封包即是由網路層負責將資料進行切割 – 當資料長度超過一個封包可允許的上限時,就 要進行切割 • 每一個封包裡都會帶有各層相關的標頭(header) • 網路層切割出來的封包,每一個都會帶有網路層 標頭 • 網路層IPv4的標頭裡的資訊包含:來源IP位址、 目的地IP位址、協定的版本、封包切割的紀錄、 資料的大小等等資訊

資料切割示意圖

• 將資料切割為三個封包,每個封包有各自 的標頭

資料重組

• 切割後的資料便丟傳送到網路上 • 接收端接收到後,必需先把被切割的資料 重新組合 • 重組時,網路層標頭會被移除,而切成片 段的資料會重新組合回原本未切割前的資 料 • 重組後,便可以再交由上層(傳輸層)處理

網路路由 - Routing

• 路由也是網路層十分重要的功能 • 整個網際網路便是由眾多大小不一的路由 器連接起來,通力合作,才得以連通 • 路由器裡有「路徑表」,記錄封包要如何 繞徑 • 路徑表可以是手動設定,或是由演算法計 算而得到

網路路由 – Routing (續)

• 全世界的網路路由十分的複雜 • 當路徑出狀況時(如斷線),路由可能需要動 態改變 • 因此路徑表通常是由繞徑演算法計算,以 得到最佳的路由方式 • 全世界的網路路由概況

查詢路徑

• 查詢由本機到網際網路上任一主機,所經 過的路由器 – Windows上的「tracert」指令或是 UNIX上的「traceroute」指令

7-4 傳輸層

• 網路層可決定網路主機的位址和路由 • 傳輸層則提供主機之間建立傳輸通道的服 務 – 二個網路主機之間可能需要同時建立多條連線 – 若只有網路層,無法滿足這個需求 – 透過傳輸層,可以建立多個連線 – 這個服務我們稱其為「多工」(multiplexing)

傳輸層的其他服務

• 傳輸層的其他服務 – 流量控制 (flow control) – 壅塞控制 (congestion control) – 連接導向及無連接導向連線 – 可靠傳輸 • 常用的傳輸層協定:TCP及UDP • 各個傳輸層協定也有其相對應的標頭,紀 錄其相關資訊

多工 – Multiplexing

• 允許任二主機之間連立多條連線 • 使用「連接埠號」(port number)來識別不同的連線 • 連接埠號通常為一個16-bit的正整數 • 所謂的「five-tuple」 – (來源IP位址、來源連接埠號、 目的IP位址、目的連接埠號、傳輸層協定) • 例:主機140.121.1.1連線到Google 173.194.72.138,進行瀏覽網頁的動作,其five tuple可能為 (140.121.1.1、56732、173.194.72.138、80、TCP)

多工 – Multiplexing (續)

• five-tuple裡只有要一個號碼不同,可視為不同 的連線 – 以下為二條不同的連線 – (140.121.1.1、 56732 、173.194.72.138、80、TCP) – (140.121.1.1、 56733 、173.194.72.138、80、TCP) • 由於網路傳輸是雙向的,若只有來源目的對換, 則仍是同一條連線(只是方向不同),如下例 – ( 140.121.1.1、56732 、 173.194.72.138、80 、TCP) – ( 173.194.72.138、80 、 140.121.1.1、56732 、TCP)

連接埠號

• 網路連線通常由某一端發起 • 通常是由用戶端連線到伺服器端 • 用戶端的連接埠號通常是隨機產生 • 伺服器端的連接埠號通常是有特別指定的 – 否則用戶端會無所適從,不曉得要連到哪一個 連接埠,才能取得服務 • 常用服務的連接埠號由IANA組織訂定 – 不過連接埠號的使用並不是強制性的,使用者 還是可以自由選擇

常見的連接埠號

查詢本機建立的連線

 在Windows或是UNIX系統上,使用 「netstat -na」指令  IP位址和連接埠號之間是用「:」號隔開

連接導向服務

• Connection-oriented service • 指的是在開始使用連線傳送資料前,必需 要先有建立連線的動作 • 不是所有的傳輸層協定都支援:TCP一定要 事先建立連線,而UDP不需要(也不行) – 所謂的「TCP三方交握」 TCP three-way handshaking

三方交握

三方交握 (續)

 三方交握可以得到的資料  資料傳送的序號(sequence number)  資料區段(segment)的大小  緩衝區大小等等  三方交握如果沒有完成,則連線會建立失 敗

連接導向服務的好處

• 在開始資料傳輸前,先了解連線雙方的狀 態 • 許多進階的傳輸層功能,必需先建立連線 才得以提供 – 流量控制、壅塞控制、可靠傳輸等 • 因此,上述功能UDP協定都不提供 – UDP屬於無連接導向(connectionless)服務 • 大部分服務都以連接導向的TCP連線為主

無連接導向服務

 Connectionless service  不提供流量控制、壅塞控制、可靠傳輸等服務  優點:負擔小、傳送迅速  無連接導向的UDP適合低延遲、即時性高 的應用服務  常見的應用  DNS服務使用UDP:不需建立連線,反應較快  網路視訊使用UDP傳輸:重視即時性,且傳輸的 資料本身可容錯

可靠傳輸

• 傳輸層可以提供可靠傳輸的服務 – 偵測傳輸內容是否正確 (TCP、UDP皆支援) – 偵測傳輸封包是否正確送達 (TCP) • 使用錯誤檢查碼(checksum)偵測傳輸內容 是否正確 • 使用封包序號(sequence number)偵測封 包是否正確送達

TCP及UDP的錯誤檢查碼

• IP、TCP及UDP的錯誤檢查碼基本上是以1補數的 方式來計算 • IP(網路)層只針對標頭做檢查碼的運算 • TCP及UDP層則針對標頭和內容進行檢查碼的運 算 – 註:TCP和UDP在計算檢查碼時所使用的標頭 是所謂的「pseudo-header」,我們不在此討 論 • 當檢查碼計算結果異常時,表示傳輸內容有誤 – IP以及UDP僅將有錯誤的封包丟棄 – TCP協定則會讓發送端重新傳送

計算錯誤檢查碼

• 錯誤檢查碼是一個16-bit的整數 • 計算流程如下: 1. 將標頭裡的錯誤檢查碼欄位值填為0 2. 建立一個32-bit的無號數變數sum,其初始值 亦為0 3. 將要驗證的範圍資料(標題或是標頭+內容), 切割為以16-bit為單位的無號數 4. 將所有切割出來的無號數加總起來,並結果存 入sum變數

計算錯誤檢查碼 (續)

5. 若sum變數的結果大於65535,則同樣將sum 變數切割為二個16-bit的無號數,再加總一次 6. 若sum的結果仍然大於65535,則重覆步驟5, 直到sum的結果小於等於65535 7. 將sum變數,較小的16-bit數字取1補數後回 傳 • 計算完成後,可將結果填入標頭的錯誤檢 查碼欄位後,一併傳送

錯誤檢查碼 – 計算範例

• 假設封包資料含標頭共12個位元組(byte) • 錯誤檢查碼欄位在第3和第4個位元組 (紅色字 體)

0x12 0x34 0x00 0x00 0x56 0x78 0x9a 0xbc 0xde 0xff 0xff 0xff

• 計算部分 – 以16-bit為單位後切割,進行加總 – sum =0x1234 + 0x0000 + 0x5678 + 0x9abc + 0xdeff + 0xffff = 0x0002e266 – sum = 0x0002 + 0xe266 = 0xe268 – sum的1補數 = 0x1d97,填入後傳送

錯誤檢查碼 – 驗證範例

• 承前例,接收到封包後,進行同樣的運算

0x12 0x34 0x1d 0x97 0x56 0x78 0x9a 0xbc 0xde 0xff 0xff 0xff

• 驗證部分:計算方式相同 – sum =0x1234 + 0x1d97 0x9abc + 0xdeff + 0xffff = 0x0002fffd + 0x5678 + – sum = 0x0002 + 0xfffe = 0xffff – sum的1補數 = 0x0000 (檢查無誤) – 計算結果若為0,表示內容正確,否則表示內 容有誤

檢查封包序號

• 錯誤檢查碼只能偵測內容是否是確 • 無法偵測封包是否送達 (封包遺失) • TCP使用封包序號(sequence number),檢查 封包是否遺失 • 作法的概念如下: – 序號的初始值在三方交握時,收發端二邊要先講好 – 傳送封包時,封包序號以連號方式傳送累加上去 – 接收端收到時,會將已接到到的序號回覆給傳送端 – 傳送端可得知哪些封包遺失了,並重新傳送

流量控制 – Flow Control

• 接收端通常會將資料存放在一個緩衝區,慢慢 處理 • 流量控制的目的是希望發送端不要傳送過多的 資料給接收端,以免接收端來不及處理,把緩 衝區塞滿 • 當接收端處理不夠快時,緩衝區滿了,封包只 能被 丟棄

流量控制 – Flow Control (續)

• TCP可得知封包沒送達,必需重傳,但如此 就浪費了頻寬 – 當TCP封包被接收端丟棄時,發送端就不會收 到相對應的封包序號回覆通知 • UDP協定本身沒有提供這樣的機制

壅塞控制 – Congestion Control

 壅塞控制主要是避免網路塞車的情況  就好比高速公路會塞車,所以需要匝道儀控  UDP沒有這個功能  壅塞控制主要也是依賴封包遺失的偵測來 判定

壅塞控制 – Congestion Control

• 作法概念如下 – TCP一開始先用比較慢的速度傳送封包 – 如果封包都沒有遺失,就慢慢提升速度 – 當封包開始遺失了,則要再降低傳送速度 • 對比高速公路的匝道儀控的話… – 一開始,紅燈久一點,讓車子不要太快進入 高速公路 – 如果都不會塞車,再慢慢縮短紅燈的時間, 讓車子進入高速公路的速度快一點 – 萬一開始塞車了,就讓紅燈時間再拉長一點,

7-5 應用層

• 應用層是最貼近使用者的一層 • 應用層的協定包山包海 – 瀏覽網頁的HTTP – 傳剸檔案的FTP – 寄送郵件的SMTP – 還有很多公開以及非公開的各種協定

例子一 – 寄送Email

 使用者開始寫信  user@domain1 寫信給 friend@domain2  寫完後按下「寄信」

寄Email的流程

• 使用者看不到流程, 但其實底層是一連 串用戶端程式和伺 服器的對話 • 寄信過程如果有誤, Email 軟體會再通知使用 者 • 寄信成功時,就保 留寄信備份

例子二 – 查詢網域主機位址

• 目前Internet上非常重要的協定 • 使用者連網路需要知道服務主機的IP位址 • 但IP位址不易記住,所以大家都記「網域名 稱」 – 如www.google.com或是tw.yahoo.com。 • DNS服務,負責將「網域名稱」查詢其對 應之IP位址 • 如果DNS服務不正常,使用者查不到IP位 址,那就無法連上服務主機

DNS伺服器

• 提供DNS查詢服務的主機 • 幾乎所有的網路服務都需要在連線前先查 詢DNS • DNS伺服器通常會選擇離使用者較近的主 機 – 查詢起來才快 • DNS查詢通常使用UDP協定傳送 – 不用三方交握,可以節省查詢時間

如何查詢DNS

 在Windows和UNIX作業系統,都可以使用 「nslookup」指令,以google.com為例:

7-6 網際網路的基本設定和除錯

• 基本設定 – IP位址 – 網路遮罩 – 預設閘道器(路由器) – 名稱(DNS)伺服器 • 可以手動設定,也可以自動取得 – 要看網 路環境而定 – 自動取得通常使用DHCP協定 • 同一個網路下,每個主機都要使用不同的IP 位址

不同系統的設定介面 – Windows

不同系統的設定介面 – Mac OS X

使用「ipconfig /all」 檢查IP設定

使用「netstat -rn」檢查路由

 網路目的地為 0.0.0.0 的為預設路由器

使用「ping」指令來檢查連線情況

 注意:ping沒有回應不代表網路不通  成功的情況

「ping」失敗的情況

 主機連不上,或是連線逾時

使用「arp -a」指令檢查第二層

• 使用Ethernet或無線網路時,可用「arp -a」 指定查詢鄰近主機的網路界面實體位址 • 連線狀態有誤時, 相關紀錄會查詢不到 • 通常可以配合 「ping」指令: 先ping預設閘道, 然後馬上用arp查詢

使用nslookup指令,檢查DNS

 若DNS服務不正常,也會無法正常存取網 路服務  「要求逾時」 表示DNS服務 可能有問題  「找不到」 可能是近端 網路沒問題, 但對外可能 有問題