第2章 網路模型運作、ICMP與ARP協定
章節大綱 OSI 網路模型 模擬器的動畫功能觀察網路模型 應用層 使用Wireshark來觀察網路模型 傳輸層 ICMP協定 網路層 ARP 協定 資料連接層 跨不同網路區域的ARP運作
2.1 OSI 網路模型
OSI 網路模型 ISO(國際標準組織) 發表了OSI模型,其定義網路系統分成7層 (Layer) Layer 1簡稱為L1,其他各層以此類推,每層各自負責特定的工作
OSI 的7 Layers 網路模型
TCP/IP網路模型 TCP/IP網路模型建立於1970年代初期,又稱為 Internet 模型 由於網際網路最初起源於美國國防部軍事用途,因此這個模型又稱為DoD模型(Department Of Defense),但是文件常見到的稱呼為TCP/IP 模型 TCP/IP 模型定義了四層協定
TCP/IP 的4 Layers 模型
OSI與TCP/IP對照 雖然TCP/IP 的四層網路模型與OSI的七層網路模型各有自己的架構,但是大體上兩者仍能互相對應,如下圖所示 (data) (Segment) (Package) 資料元(datagram) (Frame) (Bit)
網路分層模型的優點 訂定標準,讓全世界的廠商來參考,以避免網路產品的相容性問題產生。 有助於通訊協定設計,因為對於在特定層工作的通訊協定而言,它們的工作方式及其與上下層之間的介面都已經確定。 避免一個通訊協定層的技術或功能性變化影響相鄰的其他層。 提供了說明網路功能和能力的通用語言。
各分層表頭檔(Header) 當資料由來源端的應用程式產生時,要對應到應用程式的種類(參照OSI的L7~5或TCP/IP的L4),資料要送出時就要參考網路模型中由上層往下層傳送,每經過一層,都會在前端增加一些該層專用的資訊,這些資訊稱為表頭檔(Header),然後才傳給下一層 在目的端收到資料時,相反的,要由下層往上層傳送,每經過一層,會將該層的表頭檔拿掉 資料連結層表頭檔 Preamble (7) 10101010 SFD (1) 10101011 Destination MAC Addr. (6) Source Length (2) Data (46~1500) FCS (4) Start Frame Delimiter, SFD/Synch Frame Check Sequence, FCS (Cyclic Redundancy Check)
表頭檔的封裝 當資料送出時,資料是由上而下將表頭檔加到到資料前面,此動作稱為封裝(encapsulation)
表頭檔的解封裝 當資料由下而上到,此時就要將此表頭檔從資料中拿掉,此動作稱為解封裝(decapsulation)
各層資料單位 在封裝過程中,每一層都根據使用的通訊協定的表頭檔封裝從上一層接收的通訊協定資料單元(PDU,Protocol Data Unit)。如下圖 (資料) (區段) (封包) (訊框)
2.2 應用層
應用層 在OSI模型的上三層(L7~5)功能為使用者應用程式,提供 網路服務定義相對應於TCP/IP 應用層。用於在來源主機 和目的主機上執行的程式之間進行資料交換,常見到 的應用層協定有如下: 網域名稱服務協定 (DNS):用於將網際網路網域名稱 解析為 IP 位址。 動態主機IP配置協定(DHCP):用於電腦的IP自動分配 超文字傳輸協定 (HTTP):用於傳輸組成全球資訊網 網頁(WWW)的檔案。 簡易郵件傳輸協定 (SMTP):用於傳輸郵件及其附件 資訊。
應用層 郵件接收協定(POP):用於使用者接收郵件及其附件資訊。 遠端登入協定(Telnet or ssh):一種終端模擬協定,用於遠端存取伺服器和網路裝置,telnet 傳輸資料為明碼方式,ssh則有加密。 檔案傳輸協定 (FTP):用於在系統之間相互傳輸檔案。 檔案傳輸協定 (TFTP):簡易版的FTP,不需要登入帳號。
應用協定的編號 每種應用層協定都會有一個編號,如下表所示為常用到的應用協定的編號,此編號稱為port no. 應 用 協 定 編 號 應 用 協 定 編 號 網域名稱服務協定 (DNS) 53 動態主機IP配置協定(DHCP) 67 和 68 超文字傳輸協定 (HTTP) 80 安全超文字傳輸協定(HTTPS) 443 網管軟體協定(SNMP) 161 簡易郵件傳輸協定 (SMTP) 25 郵件接收協定(POP) 110 網頁郵件協定(IMAP4) 143 遠端登入協定(Telnet) 23 檔案傳輸協定 (FTP) 20 和 21 簡易檔案傳輸協定(TFTP) 69
查詢所有應用程式服務的編號 http://www.iana.org/assignments/service-names-port-numbers
2.3 傳輸層特性
傳輸層 傳輸層的主要目的為決定應用資料要以何種方式來傳送,有兩種方式可以選擇,TCP方式是一種可靠性(reliable)傳送協定,另一種UDP方式是種不可靠(unreliable)的傳送協定 常見 TCP 通訊協定的應用程式包括: Web 瀏覽器 電子郵件 檔案傳輸協定 (FTP) 遠端登入協定 Telnet 常見UDP 協定的應用包括: 網域名稱系統 (DNS) 網管軟體協定 (SNMP) 視訊串流 簡易檔案傳輸協定 (TFTP)
TCP vs. UDP Protocol TCP UDP 傳送特點 Reliable Best Effort(盡量傳送) 流量控管 有 無 連線需求 Connection-oriented Connectionless 常見的應用程式 .Email .File sharing .HTTP .Voice streaming .Video steaming
TCP與UDP表頭檔 選擇TCP傳送需要付出網路頻寬耗損代價(資料前有20bytes),UDP的資料前僅有8bytes。 TCP表頭檔
TCP與UDP表頭檔重要的欄位功能 TCP與UDP表頭檔中一些比較重要的欄位功能: Source Port 與 Destination Port 這兩個欄位在 TCP 與 UDP 都有定義,其功能為埠定址 (port address),在 Destination Port 表示使用的應用程式,因此要把應用程式的編號填入此欄位,Source Port 表示視窗編號,此編號會由作業系統指定給開啟的視窗。 TCP 中 Sequence Number 與 Acknowledgement Number 兩個欄位要互相配合來達成資料是否有傳送到目的。 TCP 中 Flag 欄位主要控制TCP連線會談的建立與結束。 TCP 中 Windows 欄位用來做流量控管。
TCP建立連線 TCP是連接導向(Connectionion-oriented),也就是TCP傳送資料前,來源端與目的端要先做一些資訊交換,如下圖。SEQ表示電腦送出資料的序號,ACK表示要收到對方資料的序號
TCP 可靠傳送的作法(接收端) 使用SEQ及ACK欄位的資訊
TCP 可靠傳送的作法(傳送端) 使用ACK封包來確認,這種傳遞機制會影響傳送的速度,因為傳送端只要傳送一筆資料就要等待接收端的ACK。
TCP流量控管作法 TCP 中有Windows欄位用來控制 ACK 封包的數目。當網路流量好的情況下TCP就會調大 Windows 欄位。
傳輸層Port Addressing 作用 傳輸層Port Addressing又稱為L4的定址,TCP與UDP的表頭檔都有 source port 與 destination port 欄位。
2.4 網路層
網路層 主要負責傳送資料的來源端與目的端的定址(IP)及選擇傳送資料路徑,其表頭檔如下圖,當資料從傳輸層往下傳送到網路層時,就要下圖表頭檔封裝到資料中 網路層IPv4表頭檔
網路層協定 網路層在傳送使用者資料的通訊協定包括如下,其中IPv4為我們目前主要用的網路層協定。 Internet 通訊協定第四版 (IPv4) Internet 通訊協定第六版 (IPv6) Novell 互連網路封包交換通訊協定 (IPX) AppleTalk 非連結導向網路服務 (CLNS/DECNet)
網路層IPv4表頭檔重要的欄位 以下是網路層IPv4表頭檔中比較重要的欄位功能介紹: Destination Address為IP 目的位址欄位包含一個 32 位元二進位值,代表封包目的主機的網路層位址。 Source Address為IP 來源位址欄位包含一個 32 位元二進位值,代表封包來源主機的網路層位址。 Time to Live (TTL)存活時間表示封包的剩餘傳送時間
網路層IPv4表頭檔重要的欄位 Protocol通訊協定 表示封包傳送的資料負載類型,網路層參照通訊協定欄位將資料傳送到對應的上層通訊協定,常見的值有01表示 ICMP,06表示 TCP及17表示UDP。 Type of Service服務類型欄位用於確定每個封包的優先順序別,此欄位主要用於服務品質 (QoS) 機制。 Fragment offset 片偏移量用於傳送資料封包遇到頻寬較小時必須將封包分割為較小的片段。 …
Protocol 欄位的值 在Protocol 欄位是記錄IP所乘載其它網路協定的資料,所以每個網路協定都會有自己的編號,稱為協定編號(Protocol Numbers) 這些編號是由IANA組織在管理
查詢協定號碼 http://www.iana.org/assignments/protocol-numbers
2.5 資料連接層
資料連接層 資料連接層主要功能控制如何使用網路媒介控制和錯誤檢測之類的各種技術將資料放置到媒體上 在區域網路中資料連接層主要以乙太網路(Ethernet)協定 WAN中的資料連接層會有不同的協定,例如:HDLC、PPP、Frame-Relay等等 乙太網路表頭檔如圖下所示,其中Destination MAC Address與Source MAC Address表示媒體存取控制 (MAC) 位址,此MAC提供資料連結層定址和資料分界方法。 資料連結層表頭檔
2.6 模擬器的動畫功能觀察網路模型
觀察網路模型 觀察網域名稱服務協定(Domain Name System, DNS) 與超文字傳輸協定(HyperText Transfer Protocol,HTTP)兩種應用程式來示範網路模型的運作 網域名稱 服務協定 (範例檔案:OSI.pka)
設定DNS 將Web Server的網域名稱(www.com)與其IP位址(192.168.20.1)的對應設定到DNS中,如下圖所示,在DNS Server設定DNS服務為網域名稱服務協定,執行『Add』即完成設定。
執行DNS 先切換到動畫模式並選擇動畫封包為DNS,再開啟PCA,在『Desktop』中選擇Web Browser程式並輸入網址http://www.com 如下圖所示其中當輸入網址後就會出現動畫封包,此封包為DNS封包
DNS的封裝內容 當執行動畫功能後,將動畫封包打開後的畫面如下圖所示,其中有網路模型的每一層封裝後表頭檔內容
使用乙太網路協定,DEST 為DNS Server的MAC位址,SRC為PCA的MAC位址 SRC IP為PCA的IP位址,DST IP為DNS Server IP位址,PRO 0x11表上層協定(十進位17為UDP) 使用UDP方式傳送,53表DNS,1026 表Web Browser 視窗編號 顯示DNS應用程式相關資訊
執行HTTP 先關閉上述的DNS動畫功能後,再選擇動畫封包為HTTP後,開啟PCA的 Web Browser程式並輸入網址http://www.com,在輸入網址後就會出現動畫封包,此封包為HTTP封包,我們將HTTP封包打開後畫面如下圖所示
使用乙太網路協定,DEST 為PCA的MAC位址,SRC為fa0/0的MAC位址 SRC IP為PCA的IP位址,DST IP為Web Server IP位址,PRO 0x6表TCP協定編號 HTTP標號為80,使用TCP方式傳送,SRC port為1027 表Web Browser 視窗編號 顯示HTTP應用程式相關資訊
2.7使用 Wireshark 來觀察網路模型
Wireshark 官網 (http://www.wireshark.org/) 捕捉封包的軟體 在Wireshark主畫面先選擇要捕捉封包的網路卡(如區域網路),再執行開始捕捉封包。 Wireshark 官網 (http://www.wireshark.org/)
Wireshark 捕捉到的封包
選擇要看的封包種類設定 選擇TCP封包
HTTP封包表頭檔資訊 選擇一筆HTTP封包(TCP要進行連線的Sync封包)來觀察表頭檔資訊,從DEST port可看出為HTTP應用
DNS封包表頭檔資訊 選擇一筆DNS封包來觀察UDP表頭檔資訊,DEST port 53為DNS應用服務,DNS要詢問網域名稱為tw.rd.yahoo.com,將網路模型的表頭檔展開才能看到內容
2.8 ICMP協定
ICMP協定 ICMP (Internet Control Message Protocol)主要是用來回報網路狀況給管理者 ICMP 屬於在網路層運作的協定,當作是IP的輔助協定,用來回傳網路中遭遇到的問題
常見ICMP 的type代表的意思 ICMP 只負責報告問題,不管如何解決問題 常見的ICMP的工具有 Ping 與 Traceroute Echo Reply* 3 Destination Unreachable* 4 Source Quench* 5 Redirect* 8 Echo Request* 11 Time Exceeded for a Datagram* 12 Parameter Problem on a Datagram 13 Timestamp Request 14 Timestamp Reply ICMP 只負責報告問題,不管如何解決問題 常見的ICMP的工具有 Ping 與 Traceroute
Ping運作原理 Ping是最常用來測試網路連線的工具,主要測試來源端與目的端的設備連線是否有通 ping的運作原理像是迴音(echo),如果有聽到自己的迴音就代表有網路有通,若沒有則代表網路發生問題 ping 的兩種封包 - Echo Request封包與Echo Reply封包
ICMP協定測試練習架構-測試PC0 ping PC1 因 ICMP 為網路層通訊協定,因此沒有看到傳輸層的表頭檔,在 IP 的表頭檔中,TTL 預設為128,PRO欄位為1 (表網路層乘載ICMP協定),在ICMP表頭檔中 type 欄位為8 ,表示此封包為 ping echo request 。 (範例檔案: ICMP.pka)
PC0執行ping 10.10.10.1 通常第一次執行 ping 時第一個封包回應為 Request timed out,這是因為路由器要執行 ARP 的原因,之後再執行 ping 同一部電腦就不會有這種現象。 1. 表示由 10.10.10.1 回應 PC0 的 ping request 2. Ping 封包大小 3. 回應時間,時間越長表示網路有壅塞 4. 預設 ping 封包的 TTL (Time to Live)為128,124 表示 ping Echo Reply 封包經過了4個路由器
控制ping封包數目 用-n 參數來控制 ping 封包數目,如果 n 的數字很大,就會形成阻斷服務(DoS, Denial-of-Service)攻擊,或是多對一的分散式阻斷服務攻擊(DDoS, Distributed Denial-of-Service)
阻斷服務攻擊 阻斷服務(Denial-of-Service,簡稱DoS)攻擊 PC0執行ping –n 100 10.10.10.1,表示PC0產生100個ping封包給PC1,當100個ping封包送給PC1,PC1就要回應100次,如果n用的很大,就成為阻斷服務攻擊 由於 ping 很容易變成攻擊工具,因此一般 Windows 系統的 ping echo reply 功能預設都是關閉
測試PC0 ping PC3 PC0執行ping 10.10.10.2,4個 ping封包都是 Request timed out訊息,可能是網路連線發生問題或主機故障,須使用traceroute工具來檢測哪一段網路有問題
測試PC0 ping PC2 PC0執行ping 172.30.10.1,有192.168.10.254回應PC0的 ping 封包 此IP為R0中fa0/1的IP,也就是PC0的預設閘道回應Destination host unreachable訊息給PC0,此訊息的ICMP Type值為3,表R0無法轉送ping封包到PC2 1. 要確認是誰回應給 PC0,若 ip 不同表示網路連線架構設定有問題 2. Routing 有問題
Router執行ping 的結果 R0執行ping 10.10.10.1 與 ping 10.10.10.2,路由器預設送出5個ping封包,『!!!!!』表回應成功, 『……』表失敗
使用WireShark看ping封包-封包過濾設為ICMP 網路層可看到預設TTL為128,在 ICMP 的 type 欄位為8,表示此封包為 Ping echo request 封包
Traceroute 作用 Ping只會顯示來源端與目的端的網路連線結果 Traceroute 會顯示經過的路由器的IP,如下圖 PC1使用traceroute PC2,若PC1與PC2連線成功,則會顯示R1、R2、與 R3 的 IP;否則會顯示哪一個路由器不通
Traceroute 原理 如上圖,第一次PC1送出ping request封包給PC2,因TTL設定為1,當ping request到達R1時,TTL為0,此時R1就必須丟棄ping request封包,並回ping error message給PC1,如此PC1就得到R1的IP為192.168.10.2 第二次PC1再送出ping request封包給PC2,TTL就設定為2,所以ping request封包到R2就被丟棄,R2回應ping error message給PC1,PC1又可以知道R2的IP為172.30.10.2 第三次把TTL設定為3,這樣PC1就可以知道第三個路由器R3的IP為10.10.10.2 如果過程有網路不通,此時網路通到哪一個路由器
PC0 tracert PC1 當tracert 10.10.10.1執行完畢如下圖,第一次經過的路由器為192.168.10.254,而且是使用三個ping封包來追蹤,如192.168.10.254為R0中fa0/1的IP,第二次經過的路由器為10.10.10.2,總共經過4個路由器,最後一個表示PC1
PC0 tracert PC1 在PC0執行tracert 10.10.10.2結果如下圖,可看到10.0.0.10以後就一直無法成功回應,表示網路連線到10.0.0.10是沒問題,tracert執行30次後沒回應就停止,『*』表ping封包沒有回應
PC0 tracert PC2 最後在PC0執行tracert 172.30.10.1結果如下圖,tracert 只能到達192.168.10.254這個路由器,後面就無法連通,此狀況是R0有問題,所以要先檢查R0的設定。若回應時間突然增加很多,則表示該路由器負荷太重不然就是該路由器在國外。
R0 traceroute 10.10.10.1 DOS的指令是tracert,而路由器是traceroute,兩這指令的用法都是一樣
使用WireShark 觀察tracert Tracert確實是使用ping在運作,第一次 TTL 設定為1,每次送出三個 ping request 封包,並等待 TTL 逾時回應來計算經過的路由器。
2.9 ARP 協定
IP位址與MAC位址作用 IP位址目的僅是在辨識電腦在哪一個網路區域,而在一個網路區域中資料要傳送到目的電腦就得依靠MAC。 IP位址有時稱L3位址,MAC位址稱L2位址 交換器的運作是靠MAC,所以交換器被視為L2設備;而集線器看不懂MAC,被視為L1設備。
(範例檔案:ARP-mac-ip.pka) ping 192.168.10.3 過程 每台PC均標示 MAC 及 IP PC0執行ping 192.168.10.3, PC2就會回應PC0,這裡完全沒用到PC2的MAC,PC0就可以與PC2連通。不過這只是表面看到現象,其實PC0還是有使用到PC2的MAC,這樣ping封包才算是完整封包。 (範例檔案:ARP-mac-ip.pka)
ARP 協定 ARP(Address Resolution Protocol)協定的功能就是給定一個同網路的電腦 IP 位址,這個協定會找出該 IP對應的電腦MAC。當PC0執行 ping 192.168.10.3,PC0會先執行ARP就得到相對應的 MAC 為 000D.BD26.7E4C,有了 PC2 的 MAC,PC0 的資料就可以透過交換器送到PC2。ARP 的運作有三個步驟: 來源電腦發送廣播資料,含要尋找目的 IP。 同一網路下的電腦收到廣播資料後,進行比對本身的IP與廣播資料中要尋找目的 IP。 比對正確的電腦回應本身的MAC給來源電腦。
ARP暫存查詢與刪除 當ARP已經有詢問目的IP的MAC位址後,會將目的IP對應的MAC暫存(Cache)起來,以備下次使用 在電腦的DOS模式使用arp -a 來查詢ARP暫存資料,表PC0剛剛有使用ARP詢問192.168.10.3的MAC位址,因此PC0會暫存此筆對應如下圖所示 使用arp -d為刪除ARP暫存資料。 使用arp -s為可手動加入IP與MAC,arp -s 157.55.85.212 00-aa-00-62-c6-09 (PT模擬器沒支援)
(範例檔案: ARP-mac-ip.pka) 選擇觀看的封包,ARP及ICMP PC0先執行 arp -d 來清除 ARP 暫存資料,再執行 ping 192.168.10.3 以找尋該電腦的MAC,打開ARP 動畫封包 (範例檔案: ARP-mac-ip.pka)
(範例檔案: Router-mac-ip.pka) 跨不同網路區域的APR運作 資料送到目的PC是同一個網路區域,這時使用集線器或交換器來傳送,使用的目的MAC位址是目的電腦的MAC 如果資料送到目的PC是不同一個網路區域時,這時候就要使用路由器來做繞送,使用的目的MAC位址是預設閘道的MAC 下圖有兩個區域網路,一個為 192.168.10.0網路內有兩台電腦,預設閘道為fa0/0;另一個網路為 172.30.0.0內有兩台網路,其預設閘道為fa0/1 。 (範例檔案: Router-mac-ip.pka)
預設閘道的作用 - PC0 執行 ping PC3 PC0執行 ping 172.30.0.2 (PC3),PC0的 ARP 的暫存資料會是 172.30.0.2 對應 0005.5E95.1232嗎 ? 原因是 PC0 送出 ARP 的廣播資料到不了 PC3,廣播封包被路由器擋下,因此 ARP 無法詢問到 172.30.0.2 的 MAC 位址 1. 執行 ping 172.30.0.2 成功 2. 查詢 PC0 的 ARP 暫存資料,結果 ARP 暫存資料為IP : 192.168.10.254 對應 MAC : 0001.C925.5301
(範例檔案: Router-mac-ip.pka) 預設閘道的作用 - PC0 執行 ping PC3 當 PC0 要送資料到其他網路區域時, 此時 PC0 會先將資料送到 192.168.10.0 網路的預設閘道 fa0/0 ,fa0/0 再將資料轉給路由器做繞送 因此,PC0 要送給PC3 的資料會先送到 PC0 的預設閘道,IP 為 192.168.10.254,PC0 會先使用 ARP 查詢 192.168.10.254 的 MAC 位址,再將資料送到 192.168.10.254,所以在 PC0 查詢到的 ARP 暫存資料為 IP :192.168.10.254 對應 MAC : 0001.C925.5301 來源端 PC 傳送資料到目的端 PC 屬同一個網路區域時,用集線器或交換器來傳送,使用的位址是 MAC ; 如果來源端 PC 傳送資料到目的端 PC 分屬不同網路區域時,要使用路由器來繞送,使用的位址是 IP (範例檔案: Router-mac-ip.pka)
(範例檔案: Router-mac-ip.pka) 資料在192.168.10.0網路中傳送 PC0 ping PC3(i.e. PC0送資料給PC3),當資料在192.168.10.0網路中傳送時,資料是從PC0送到fa0/0 如下圖所示,來源的MAC為PC0而目的MAC為fa0/0 (範例檔案: Router-mac-ip.pka) 在192.168.10.0網路中的來源位址與目的位址 來源 IP 目的 IP 來源 MAC 目的 MAC 192.168.10.1 172.30.0.2 000D.BD93.ACE1 0001.C925.5301
(範例檔案: Router-mac-ip.pka) 資料在172.30.0.0網路傳送 當 ping 封包資料在 172.30.0.0 網路中傳送時,資料是從預設閘道 fa0/1 送到 PC3 如下圖所示,來源的MAC為 fa0/1 而目的MAC為 PC3 請注意來源與目的IP都不會變 (範例檔案: Router-mac-ip.pka) 在172.30.0.0網路中的來源位址與目的位址 來源 IP 目的 IP 來源 MAC 目的 MAC 192.168.10.1 172.30.0.2 0001.C925.5302 0005.5E95.1232
路由器的ARP暫存資料 上述範例封包在 172.30.0.0 網路中傳送,封包由路由器的 fa0/1送到PC3,路由器如何知道PC3的MAC? 路由器會從該封包中拿出目的 IP,並在 fa0/1 執行 ARP 協定來詢問目的IP(172.30.0.2)的MAC(0005.5E95.1232),所以路由器會有ARP的暫存資料(可使用放大鏡功能查看ARP Table) 使用IOS的 show arp 指令來查詢,查詢結果如下圖所示 在 fa0/1 下有 3 個 IP 與 MAC 對應,Age 欄位為此筆對應學習到的分鐘時間,『-』表示此 MAC 與 IP 就是網路介面本身的卡 MAC 與 IP
ARP的攻擊 一些駭客就會使用ARP運作的缺點來攻擊網路或是竊取資料 最常見的攻擊手法就是電腦中ARP暫存資料,讓目的IP對應到假的MAC位址 如此就無法將資料送到目的IP電腦,造成網路無法連結,這就稱作ARP攻擊 因為一般的ARP暫存資料是根據經過的ARP封包來不斷的變更本身的ARP暫存資料。所以當接收到的ARP封包所提供的資料是偽造的,就會無法傳送或將資料導向某特定電腦。