--- tags: 講義 slideOptions: # 簡報相關的設定 theme: solarized # 顏色主題 transition: 'fade' # 換頁動畫 allottedMinutes: 120 # 預計簡報花幾分鐘 --- # IND網路概論 2023 [TOC] ---- ## 數值系統 進位制的原理非常簡單 一個 $n$ 進位代表著使用 $n-1$ 個數字來代表一個數 而每位數字都是 $n$ 的冪次方 以一般的使用的十進位為例 87 這個數字可以被拆成 $8*10^1 + 7*10^0$ ### 二進位(binary) 二進位是在電腦實際在運算時使用的進位系統 只使用 0 跟 1 來表示 87 在二進位中等同 $1010111_2$ $1*2^6 + 0*2^5+ 1*2^4+ 0*2^3+ 1*2^2+ 1*2^1+ 1*2^0$ ### 十六進位(hexdecimal) 在分析網路或是逆向工程時,我們常用的進位制反而是十六進位 由於我們只有 10 個數字無法呈現十以上的數值 所以使用 A~F 來分別代替 10~15 87 在十六進位中等同 $57_{16}$ $5*16^1+7*16^0$ ## 網路 ---- 什麼是網路? 通俗的來講 網路就是拿網路線插一插就形成一個網路了  ---- 在很久以前 網路是各家資訊公司自己推出的一套硬體 所以每個公司之間的溝通十分麻煩 要有各種軟體在進行每個硬體技術間的轉換 ---- 因為這樣的制度實在是很困擾 於是各方大老就共同制定了一項 [IEEE 802.3](https://en.wikipedia.org/wiki/IEEE_802.3) 標準 也就是現在比較會聽到的 乙太網路 --- ## 乙太網路 ---- 在最早期的乙太網路標準 802.3 的 IEEE 10BASE5 網路傳輸的速度被規定在 10Mbps 也就是 10 M bits per second 1 個字母 = 1 byte = 8 bits 1 Mb = 1024 Kb = $2^{20}$ bits ---- 更後期的 IEEE 100BASE-T 不僅把速度提昇至 100Mbps 更支援了星狀網路 不用再把每一台裝置都各自連起來了  vs  ---- ### LAN vs WAN ---- <img src="https://i.imgur.com/mByX1gs.png" width="150%"> ---- #### ISP 網際網路服務供應商(?) 以台灣來說的話最熟的就是種花電信 對外電纜也基本上都是種花的 ---- <img src="https://miro.medium.com/max/1400/1*m2nDLFzrsAECfesS9imE9A.png" width="50%"> --- ## OSI 七層模型 | OSI 七層模型 | 大致功能 | |:----------------:|:---------------------- | | 第7層 應用層 | 應用程式 | | 第6層 表達層 | 轉換資訊 | | 第5層 會議層 | 建立網路連線 | | 第4層 傳輸層 | 資料傳輸及控制 | | 第3層 網路層 | 定義網路路由及定址功能 | | 第2層 資料連結層 | 在網路之間建立邏輯連結 | | 第1層 實體層 | 網路(物理) | ---- ### MAC<br>(Media Access Control) --- 每張網路卡在出廠的時候就被設定了一張身份證 也就是所謂的MAC address MAC address 共有 6 bytes 分別由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF ---- - Windows: <span class="green">ipconfig /all</span> - Unix: <span class="green">ifconfig</span> or <span class="green">ip address</span>  ---- ### IP<br>(Internet Protocol) --- 有了 MAC,我們就可以分辨出每台電腦了 那要怎麼在網路上知道那台電腦的位置呢? ---- 如果說 MAC address是電腦的身分證的話 那 IP address 就像是一台電腦的地址 而他的格式會長的像這樣 `11000000.10101000.00000001.00000001` ---- 嘿嘿 事實上 在電腦裡才會長那樣啦 如果轉換成十進制的話會長得像 `192.168.1.1` 而每個欄位的範圍是從0~255 也就是 `0.0.0.0 ~ 255.255.255.255` ---- 若是以這樣來規範的話, 總共的 IP 位址只有 $2^{8*4} = 2^{32} = 4294967 296$ 約四億個 IP 位址在好幾十年前以為非常夠,但到如今卻發現完全不夠用 於是人們想出了兩種方法,一種是動態 IP,另一種是 [IPv6](https://zh.wikipedia.org/zh-tw/IPv6) 原本的 IP 則被稱為 IPv4 #### IPv6 IPv6 從原本的 4 個 byte 擴展成了 16 個 byte `2001:0db8:02de:0000:0000:0000:0000:0e13` 也從原本十進位表示改成了十六進位 若有一個以上的連續位元為 0,則可以使用雙引號省略 `2001:0db8:02de::0e13` 要從 IPv4 轉換成 IPv6 也非常簡單 將 IPv4 的位置轉換成十六進位,填入至最後 4 個 byte 而前面所有 byte 則變為 0,倒數第 5 跟 6 個 byte 則為 `ffff` `::ffff:dead:beef` ---- ### ARP<br>(Address Resolution Protocol) --- 在知道 MAC 與 IP 之間的關係後,就會自然而然地想到一個問題 我們要怎麼把這兩個東東對應起來呢? 這時候 ARP 就派上用場啦 ---- 在 command line 打上`arp -a`來看看吧  ---- ### DHCP<br>(Dynamic Host Configuration Protocol) --- 剛才有說過,其實 IP 的數量是有限制的 那當然不能隨便分配啊 不然總有一天會用完的 那如果我們一個班級只有分配到一個IP的話 難道就只有一個人可以上網了嗎 ---- 如果只有public IP 要給很多人用的話 需要分配private IP給每個人 通常會是192.168.x.x (還有10.x.x.x及172.x.x.x) ---- 而一個一個裝置去分配IP實在是太麻煩且繁瑣了 於是 DHCP 就可以來解決這個問題了 ---- 一個裝置在發現自己沒有可用的 IP 的時候,會在廣播裡喊出 DHCPDISCOVER 當有 DHCP server 看到之後,會跟該裝置發一個 DHCPOFFER 並帶上提供的 IP 位址 裝置接受到之後,會向廣播再喊 DHCPREQUEST 告訴 DHCP server 我接受這個 IP 了 並發出一個 arp 封包 避免有人的ip跟他重複了 DHCP server 接收到 request 之後 會發出一個 `DHCPACK` 結束這整個要 IP 的過程 並把 IP 及 MAC 的對應記下來,以便下次可以直接找到 ---- 如果剛剛有用 Wireshark 看到 arp 封包的話 可能會看到有裝置在跟 router 的 DHCP server 要IP之後發了一個arp封包來確認沒有跟別人重複 ---- ### NAT<br>(Network Address Translation) --- <img src="https://images-cdn.9gag.com/photo/av7LX5b_700b.jpg" width="50%"> ---- ### DNS<br>(Domain Name System) --- 看到這裡你可能會想說 誒? 我平常上網的時候也沒有看到這些什麼IP的啊 那我是怎麼知道這些電腦的地址的 這時候 你就需要去了解一下DNS的東東了 ---- 在電腦世界中 用數字代表一個東西是再平常不過的了 但是人類對於記憶這個東西就不太擅長 我們比較偏好於用可以理解的詞語去記憶 像是我們的系網 `www.cse.ntou.edu.tw` 就是一些有意義的詞語組合而成的 這就稱為Domain Name ---- 而要怎麼從Domain Name轉換到實際的IP呢 DNS Server就是專門做這件事的 他會先從快取中看看有沒有人曾經存取過這個網站,如果有的話就直接回應client快取中的IP 而如果沒有從快取中得到IP的話,則會把Domain Name以點拆開,從最後一個讀起,一個一個伺服器問到實際需要的網址 ---- 例如我們的系網:  ``` root -> tw -> edu.tw -> ntou.edu.tw -> cse.ntou.edu.tw -> www.cse.ntou.edu.tw ``` #### Lab 透過 `dig` 或是 `nslookup` 來觀察 DNS query ```shell $ dig +trace google.com or $ nslookup -debug google.com ``` ### TCP(Transport Control Protocol) & <br>UDP(User Datagram Protocol) | TCP/IP & UDP/IP | 對應OSI的哪些層 | |:----------------:|:-------------------------- | | 第4層 應用層 | 應用層<br>表達層<br>會議層 | | 第3層 傳輸層 | 傳輸層 | | 第2層 網路層 | 網路層 | | 第1層 資料連結層 | 資料連結層<br>實體層 | --- 如果說 Mac address 是在硬體層對應網路介面 則 IP address 則是對應主機的網路位置 而 port 則便用來對應機器上服務的位置  在 TCP 中會有稱為三項握手以及序列號等東西來確保封包傳遞無誤 若在之中有封包遺失則會讓發送者重新傳送 許多通訊協定如 HTTP、SSH 等皆基於 TCP UDP 則不會確保封包送達,常用於一些遺失一些內容也無所謂的場景,如串流等 許多遊戲為了效率會在 UDP 之上設計自己的封包 ---- ## URL(Uniform Resource Locator) 我們在瀏覽網頁時常常會需要打上網址,而我們打上的網址其實被稱為 URL 一個 URL 的規格長這樣 ``` https://foo:bar@mywebsite.com:443/path/to/file ^ ^ ^ ^ ^ 協定 憑證 主機名稱 埠口 路徑 protocol auth hostname port path ``` 一般來說我們只需要指定 protocol、hostname 以及 path 即可 --- ## 現在常看到的router  --- ## Lab 觀察封包 Windows 可以下載 [Wireshark](https://www.wireshark.org/)來劫持並觀察流量 Linux 則有 [tcpdump](https://www.tcpdump.org/manpages/tcpdump.1.html) 可以使用 # ~ THE END ~ ---- <style> .green { color: #6DCC28; } </style>
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up