Try   HackMD

IND網路概論 2023


數值系統

進位制的原理非常簡單
一個

n 進位代表著使用
n1
個數字來代表一個數
而每位數字都是
n
的冪次方

以一般的使用的十進位為例
87 這個數字可以被拆成

8101+7100

二進位(binary)

二進位是在電腦實際在運算時使用的進位系統
只使用 0 跟 1 來表示
87 在二進位中等同

10101112
126+025+124+023+122+121+120

十六進位(hexdecimal)

在分析網路或是逆向工程時,我們常用的進位制反而是十六進位
由於我們只有 10 個數字無法呈現十以上的數值
所以使用 A~F 來分別代替 10~15

87 在十六進位中等同

5716
5161+7160

網路


什麼是網路?

通俗的來講
網路就是拿網路線插一插就形成一個網路了

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


在很久以前
網路是各家資訊公司自己推出的一套硬體
所以每個公司之間的溝通十分麻煩
要有各種軟體在進行每個硬體技術間的轉換


因為這樣的制度實在是很困擾
於是各方大老就共同制定了一項 IEEE 802.3 標準

也就是現在比較會聽到的 乙太網路


乙太網路


在最早期的乙太網路標準 802.3 的 IEEE 10BASE5
網路傳輸的速度被規定在 10Mbps
也就是 10 M bits per second

1 個字母 = 1 byte = 8 bits
1 Mb = 1024 Kb =

220 bits


更後期的 IEEE 100BASE-T
不僅把速度提昇至 100Mbps
更支援了星狀網路
不用再把每一台裝置都各自連起來了

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
vs
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


LAN vs WAN


Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

ISP

網際網路服務供應商(?)

以台灣來說的話最熟的就是種花電信

對外電纜也基本上都是種花的


Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

OSI 七層模型

OSI 七層模型 大致功能
第7層 應用層 應用程式
第6層 表達層 轉換資訊
第5層 會議層 建立網路連線
第4層 傳輸層 資料傳輸及控制
第3層 網路層 定義網路路由及定址功能
第2層 資料連結層 在網路之間建立邏輯連結
第1層 實體層 網路(物理)

MAC
(Media Access Control)


每張網路卡在出廠的時候就被設定了一張身份證
也就是所謂的MAC address
MAC address 共有 6 bytes
分別由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF


  • Windows: ipconfig /all
  • Unix: ifconfig or ip address

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


IP
(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 位址只有

284=232=4294967296
約四億個 IP 位址在好幾十年前以為非常夠,但到如今卻發現完全不夠用
於是人們想出了兩種方法,一種是動態 IP,另一種是 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
(Address Resolution Protocol)


在知道 MAC 與 IP 之間的關係後,就會自然而然地想到一個問題
我們要怎麼把這兩個東東對應起來呢?

這時候 ARP 就派上用場啦


在 command line 打上arp -a來看看吧


DHCP
(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
(Network Address Translation)


Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

DNS
(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

$ dig +trace google.com
or
$ nslookup -debug google.com

TCP(Transport Control Protocol) &
UDP(User Datagram Protocol)

TCP/IP & UDP/IP 對應OSI的哪些層
第4層 應用層 應用層
表達層
會議層
第3層 傳輸層 傳輸層
第2層 網路層 網路層
第1層 資料連結層 資料連結層
實體層

如果說 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來劫持並觀察流量
Linux 則有 tcpdump 可以使用

~ THE END ~