owned this note
owned this note
Published
Linked with GitHub
- Book mode: https://hackmd.io/@ncnu-opensource/book
[TOC]
---
# OSI七層架構介紹
## 各分層定義
### 第七層 應用層
#### 主功能:處理應用程式
提供使用者網路應用服務,
專指為應用軟體而設計的介面,
以設定與另一應用軟體之間的通訊。
>[!NOTE]常見的通訊協議
>1. DHCP(Dynamic Host Configuration Protocol)
>2. FTP(File Transfer Protocol)
>3. HTTP(HyperText Transfer Protocol)
>4. POP3(Post Office Protocol-Version 3)
第七層的應用軟體(網路瀏覽器、電子郵件、線上遊戲、即時通訊等)透過單一或多種通訊協定傳達資料,依據不同的網路服務方式,這些協定能定義各自的功能及使用規範等細部規則,像是網路瀏覽器藉由HTTP的溝通,即可呈現出完整的網頁。
這些和使用者最貼近且直接的應用軟體就屬於第七層應用層的規範。
### 第六層 表達層/展示層
#### 主功能:轉檔編碼
資料透過網路傳輸時,
需要將內容予以加密或解密,而這個過程就屬於展示層
>[!NOTE]常見編碼
ASCII、JPGE、MIDI……
### 第五層 會議層/會話層
#### 主功能 :數據傳輸中設定和維護電腦網路中兩台電腦間的通訊連接
此層級負責建立網路連線使得電腦間得以傳輸資料,
等到資料傳輸結束時,連線將會中斷
>[!NOTE]常見應用:
NetBIOS names,是一種用來識別電腦資源的依據,
讓在不同電腦上運行的不同程式,可以在區域網路中,
互相連線,以及分享資料。
Windows系統中的網路上的芳鄰,
或是「檔案及列印分享」,通常會看到群組及電腦名稱,
這些就是NetBIOS names定義的。
### 第四層 傳輸層
#### 主要功能:將傳輸表頭併入資料形成封包,負責整體電腦整體的資料傳輸及控制
傳輸層可以將一個較大的資料切割成多個8位元組表示的資料流來傳輸,
替模型頂端的第五、六、七等三個通訊層提供流量管制及錯誤控制。
傳輸控制協定(Transmission Control Protocol,簡稱TCP)
則是最長見具有傳輸層功能的協定。
TCP將資料流分割成適當長度的報文段(受該電腦連接的網路資料鏈路層的最大傳輸單元限制)。
TCP為了保證不發生丟包,
因此會給每個封包序號,同時序號也保證了傳送到接收端實體的包的按序接收。
然後接收端實體對已成功收到的包發回一個相應的確認資訊(ACK),
如果傳送端實體在合理的往返時延(RTT)內未收到確認,
那麼對應的封包就被假設為已遺失並進行重傳。
### 第三層 網路層/IP層
#### 主功能 : 提供路由及定址功能,將網路表頭加至數據包,形成封包,以便在網路間傳遞。
主要的通訊協定是網際網路協定(Internet Protocol,IP)目的主要是為這筆資料定下傳送目的地的位址
資料在傳輸時,該協定將IP位址加入傳輸資料內,並把資料組成封包(Packet)。
在網路上傳輸時,封包裡面的IP位址會告訴網路設備這筆資料的來源及目的地。
由於網路層主要以IP運作為主,故又稱為「IP層」。
>[!NOTE]常見設備
企業機房
路由器
Layer3 交換器
>[!NOTE]其它
IP分享器
俗稱小烏龜的ADSL用戶終端設備
>[!NOTE]其他協定
IPX
X.25
### 第二層 資料連結層
#### 主要功能:負責網路尋址、錯誤偵測和改錯,為網路之間建立邏輯連結。
資料連結層將實體層的數位訊號封裝成一組符合邏輯傳輸資料,這組訊號稱為資料訊框(Data Frame)。
訊框內包含媒體存取控制(Media Access Control,MAC)位址、
邏輯鏈路控制(Logical Link Control, LLC) 兩部分。
而資料在傳輸時,這兩項資訊可讓對方主機辨識資料來源。
#### - 子層1:邏輯鏈路控制 LLC
主要工作:
控制訊號的交換
資料的流量
解釋上層通訊軟體傳來的命令並產生回應
克服資料在傳送的過程中所可能發生的種種問題(資料發生錯誤、重覆資料...)
#### - 子層2:媒介存取控制 MAC
主要工作:
資料幀的封裝/卸裝
定址和識別
接收與傳送
差錯控制
鏈路的管理
位址格式:
由48個位元(6個位元組)構成。
以16進位的方式來表示
>MAC子層的存在消除了不同物理鏈路種類的差異性
MAC和IP一樣,都是提供「定址」的方式,好讓各個設備了解網路資料應該要往什麼地方發送。MAC的位址都是唯一的,所有的網路卡都有一個MAC位址,而這個位址不會與世界上其他的網路卡的MAC位址相同
>MAC主要負責控制與連線物理層的物理介質。在傳送資料的時候,MAC協議可以事先判斷是否可以傳送資料,如果可以傳送將給資料加上一些控制資訊,最終將資料以及控制資訊以規定的格式傳送到物理層;在接收資料的時候,MAC協議首先判斷輸入的資訊並是否發生傳輸錯誤,如果沒有錯誤,則去掉控制資訊傳送至LLC層。
### 第一層 實體層
#### 主要功能:區域網路上傳送資料框,負責管理電腦通訊裝置和網路媒體之間的互通。
>[!NOTE]硬體:
針腳、線纜、電壓值、集線器、中繼器、網卡、主機介面卡...等
___
雖然OSI模型劃分了七層,但在實際應用中,很少有產品可以符合OSI模型的定義,有些層數在實務上是可以合併的,以下來討論TCP/IP模型。
___
1. 應用層(Application Layer):應用層提供了用戶與網路之間的交互。所有的應用程序協議,如 HTTP(網頁瀏覽)、FTP(文件傳輸)、SMTP(電子郵件)等,都是在這一層運行的。這層是最接近用戶的一層,它負責解釋數據並展示給最終用戶。
2. 網路層(Internet Layer):網路層負責在不同網段之間進行路由選擇和數據傳遞。最重要的協議是 IP 協議(IPv4 或 IPv6),用來確保數據包能夠正確地在全球範圍內傳輸。這一層的核心任務是根據 IP 地址確定路由路徑。
3. 傳輸層(Transport Layer):傳輸層負責數據的端到端傳輸控制。TCP 和 UDP 是這一層的主要協議。TCP 提供了可靠的數據傳輸,包括數據重傳、錯誤檢查和流量控制,而 UDP 則是一種更簡單的協議,適用於那些對延遲敏感且不需要數據重傳的應用。
4. 鏈路層(Link Layer):鏈路層負責數據在本地網路的傳輸,**類似於 OSI 模型中的實體層和數據鏈路層**。它處理數據包的物理傳輸,確保數據可以在本地網路中進行點對點傳輸。該層使用的協議包括以太網、Wi-Fi 和 PPP。
> TCP/IP 模型的設計特點在於簡單且高效,尤其適合現代互聯網的需求。TCP/IP 架構不僅廣泛應用於局域網(LAN),還是全球互聯網的基礎架構。它通過分層協作,使得網路通信能夠跨越多種不同的設備和網路。

以下試著用Wireshark來抓取幾個封包
# Wireshark
下載: `sudo apt install wireshark`
開啟: `sudo wireshark`
>[!Note]楷賀有說網卡比較靠近底層Kernel的東西,所以必須得下sudo
>

選 e 開頭的網卡(ethernet)

- 指定 ip.addr 及 Protocol
- ip.addr==44.211.137.141 && ssh

- 試著ssh到lsa server


>[!Note]切記這裡一定要開兩個terminal去執行操作,一個下sudo wireshark之後執行上述的操作,另一個下ssh 到 lsa群組試著傳送封包。
- 抓到封包了

# Link Layer
## MAC Address

一張網卡,一個MAC Address
> 同一區域網路 mac addr 絕對不能重複到但不同區域可以接受(因為不同IP)
- 乙太網路將封包送出後,最終目的地地所有電腦都會收到封包,但為了知道封包要傳送的對象,所以每張Ethernet網路卡都編有一個獨一無二的位置,稱為**Media Access Control Address**
- 在每一張Ethernet網卡出廠之前就已經將MAC Address寫在網路卡的ROM,一張網卡九有一個MAC Address在裡面
- 可以虛擬、重設定
- MAC層的每個封包都會記載「從哪裡送出」(Source MAC Address),「到哪裡去」(Destination MAC Address),比對過後就可以得知自己是否為傳送的對象,看是要丟起此封包,還是要繼續處理封包
>舉例:XxX電話!如果不關我的事就假裝沒聽到
- 試著打`ifconfig`,可以看到電腦有的網卡

>[!Note]MAC 地址的 48-bit 表示法介紹
MAC 地址是一種硬體地址,用來標識網路卡,長度為 48 位元(bit)。通常分成 6 組,每組用 16 進位數字來表示,每組之間用冒號(:)或連字號(-)分隔。
例如:
48 位元的 MAC 地址:10101100 00101101 01101001 10010111 11110010 00011001
轉成 16 進位表示:AC:2D:69:97:F2:19

## Connetcion device
- 早期用hub

>有幾個特性
>1.會挑一個port,當成是它的input,(網路上的資料會隨機從一個port進來),無論今天送給1號還是2號,其他port也都會接收到,所以不安全。
>2.半雙工,一次只能決定要收還是送
- 現在改switch

>Switch 的特性
基於 MAC 地址進行數據轉發
1.交換器會記錄每台設備的 MAC 地址,並建立一個 MAC 地址表,以決定數據包應該發送到哪個設備。
優點:資料不會亂傳,只會送到目標設備,節省網路資源。
2.全雙工通信(Full-Duplex)
交換器支援設備同時發送和接收數據。
優勢:傳輸速度更快,比集線器(Hub)的單工或半雙工通信更高效。

## CSMA
CSMA 全稱 **Carrier Sense Multiple Access**,是一種資料傳輸的控制方法,意思是「偵測通道是否空閒,多個設備共同使用」。
- CS:傳資料前 MAC 先觀察 port 是否有空
- MA:讓很多人共同來使用的資訊通道
- CA:多個設備同時要傳輸,CA 會隨機決定設備使用的時間
- CD:發生碰撞的時候,碰撞的每一方會停止傳送、隨機等待一段時間再重新傳送
- CSMA/CD:用於有線網路(Ethernet)->碰撞容易被偵測和處理
- CSMA/CA:用於 Wi-Fi ->避免碰撞來減少碰撞
# Network Layer
## Intrnet Portocol(IP)
:::info
小操作 Traceroute
下載: sudo apt install traceroute
- 顯示只有一個( getway 10.0.2.2 )表示網路出不去,要把網路改成**橋接**(可能需要重新開機)
:::
以這個範例來說這是要送封包到英國的bbc,中間看到的1-16就是中間經過的router

:::info
遇到可以 `ping 8.8.8.8` 但無法 `ping google.com` 解法:
[[Ubuntu 22.04] DNS設定 - Ianyc - Medium](https://medium.com/ianyc/ubuntu-22-04-dns%E8%A8%AD%E5%AE%9A-b75d6383cf2f)
:::
## Method used in Network
### IP Routing
- ip 可分成 Network ID 跟 Host ID
- 網路位址(Network ID)
- 位於 IP 的前端部分,用來辨識所屬的網路
- 暨大是 `163.22.0.0`
- 主機位址(Host ID)
- 位於 IP 的後端部分,用來辨識網路上的各個裝置
- 暨大學校網站`163.22.12.20`
- 只要在暨大網段裡面的網路都是163.22.x.x
>舉例來說,某天拿到192.168.117.x的網段,前面的192.168.117就是用來辨別所屬網路的網路位址(24 bits),後面的x則對應到可以分配的主機位址,x的長度總共有8 bits,所以可能的排列組合有256種(2的8次方),換句話說總共有256個主機位址可以分配給256個裝置使用。
### IP Address 的等級(class)
將這個概念做延伸,不難發現前面的網路位址越短,可以分配的主機位址就會越多,為了滿足不同規模的網路需求,又依據網路位址的長度區分出不同的 IP 位址等級。
IP 位址的等級
當初設計 IP 時,將 IP 位址分成五個等級(Class A、B、C、D、E)
一般常用的是 Class A、B、C 這三種等級的 IP 位址,分別適用在大、中、小型網路,負責管理IP位址的機構,可以依照申請者所需要的網路規模,賦予不同等級的IP位址。
#### Class A
網路位址為 8 bits,第1個 bit(前導位元)必須是0。
網路位址從00000000~01111111,總共有128(2的7次方)個可以運用的網路位址(2的7次方)。主機位址為 24 bits,可以運用的位址總數為16777216個(2的24次方)。目前大部分的 Class A 都已經分配給過去有參與 ARPANET(Internet的前身) 實驗的政府機關、學術單位等等,所以現在無法取得 Class A 的IP位址。

#### Class B
網路位址為 16 bits,前2個 bits(前導位元)必須是 10。Class B 的 IP 位址必定介於128.0.0.0~191.255.255.255。主機位址為 16 bits,可以運用的位址總數為65536個(2的16次方)。大部分的 Class B 都被分配給大企業或ISP使用。

#### Class C
網路位址為 24 bits,前3個 bits(前導位元)必須是 110。Class C 的 IP 位址必定介於192.0.0.0~223.255.255.255。主機位址為 8 bits,可以運用的位址總數為256個(2的8次方)。Class C 通常都被分配給小企業使用。

#### 特殊的IP位址
主機位址全為0
用來代表這個網路,以 Class C為例,196.67.208.0用來代表該 Class C 網路。
主機位址全為1
代表網路中的所有位址,主要是用在廣播上面。假設有電腦送出目的地為196.67.208.255的封包,則代表對196.67.208.0這個網路的所有裝置進行廣播(所有裝置都會收到封包)。
:::info
2^n-2
- n是所用的位數,減2是因為第一個和最後一個位址都是無效的
- *.*.*.00000000 此段網路第一個IP,代表此區段網路 Subnet
*.*.*.11111111 最後一個IP,用作 Broadcast
:::
#### 段落重點整理
從 IP 位址的第一段我們就能看出它所屬的 IP 位址等級。例如: 168.0.0.1可以從 168 判斷它是一個 Class B 的 IP 位址,IP 位址的前 16 bits 為網路位址,後 16 bits 為主機位址。
- Class A : 0.0.0.0~127.255.255.255
- Class B : 128.0.0.0~191.255.255.255
- Class C : 192.0.0.0~223.255.255.255
### Subnet 子網路
Subnet 子網路
- 切割網段 ⇒ 先決定想要分配的主機數:
- Class C 網路為例:
11111111.11111111.11111111.**00000000** => 255.255.255.0
#### NetMask(子網路遮罩)
- 由一串連續的1,加上一段連續的0
>例如: 11111111 11111111 11111111 00000000
通常寫作:255.255.255.0
::: success
Q: 有一IP Address:3.4.5.6 為class A, Net ID. Host ID為何?
class A 有8 bits Network ID, 24 bits Host ID
Netmask 是11111111.00000000.00000000.00000000
8 個 bits 的 1,那就保留
- Net ID: `3.0.0.0`
- Host ID: `0.4.5.6`
:::info
1.有一IP Address: 192.168.38.26 class c, 請問Default Mask, Net ID, Host ID 為何?
2.有一IP Address: 130.48.93.73 為class B, 請問Default Mask, NetID, HostID為何?
:::
### IP的種類:主要分為兩種
剛才是有拆解IP,至於哪裡可以應用呢?
1.public IP(公共IP或公開IP位址):
- 簡單來說我們能看到的所有網站
2.private IP(私有IP或保留IP位址):
- 當初設計IPV4時,預設保留給內部網路設定用的IP區段。
- 無法在公開網路上使用,只能在家裡、實室驗等等地方使用。
每個class裡都預留了一段作為private,提供給用戶或企業來設定規劃自己的區域網路:
- classA:10.*. *. *,一組class A
- classB: 172.16. *. * , 172.17. *. * ...,172.31. * . *,共16組class B
- classC:192.168.0.* , 192.168.1. * ... ,192.168.255.*,共256組class C
一樣下`ifconfig`,可以看到10.107.29.251是private IP

:::success
作業: 下列哪幾個是屬於private IP,需要透過IP分享或偽裝才能夠連上INTERNET?
1. 172.15.11
2. 192.28.1.1
3. 10.100.1.1
4. 172.20.1.1
5. 192.168.5.1
6. 61.5.5.1
::: spoiler
私有 IP 的範圍
A 類私有 IP:10.0.0.0 - 10.255.255.255
B 類私有 IP:172.16.0.0 - 172.31.255.255
C 類私有 IP:192.168.0.0 - 192.168.255.255
私有 IP 地址只能用於內部網路,如果要連接 Internet,必須使用 NAT(網路地址轉換)來進行 IP 偽裝。
檢查每個 IP 是否屬於私有範圍
172.15.11:
不在 172.16.0.0 - 172.31.255.255 的範圍內,因此 不是私有 IP。
192.28.1.1:
不在 192.168.0.0 - 192.168.255.255 的範圍內,因此 不是私有 IP。
10.100.1.1:
在 10.0.0.0 - 10.255.255.255 的範圍內,因此 是私有 IP。
172.20.1.1:
在 172.16.0.0 - 172.31.255.255 的範圍內,因此 是私有 IP。
192.168.5.1:
在 192.168.0.0 - 192.168.255.255 的範圍內,因此 是私有 IP。
61.5.5.1:
不屬於任何私有 IP 範圍,因此 不是私有 IP。
:::
:::info
分類網路(Classful Addressing),是引入**CIDR**之前在網際網路中使用的技術,但class a,class b,class c這樣的分類仍不夠彈性。
試想我們家裡有一台router,.被分類到最小的class c,我們家裡可能最多只有10台需要連網的設備,然而class c仍然給了我們254台的空間作使用,這樣就浪費了244台空間。
在意識到這個問題後,工程師們發布了新的技術**CIDR**,取代分類網路只能以8bits為單位分類class的問题,簡單來說就是沒有硬性規定HostID只能是16 or 8bits,可以是10bits,又或是以上面10台為例,就可以切出28bits的Net ID,剩下4bits 共 16台就可以涵蓋我
們需求了。
:::
### Domain Name Server(DNS)
回到IP address,無論是分類網路法還是CIDR,還有一個間题,電腦看的懂這串數字,但我們實在是記不住,就像我們要用mood1e時,我們不會在瀏覽器打163.22.5.234,反過來說moodle
的網站也只會顯示
moodle.ncnu.edu.tw,此時我們會稱moodle是主機名稱**Host name**,
ncnu.edu.tw
是Domain name,而電腦知道
moodle.ncnu.edu.tw
對應163.22.5.234的原因就
是因為有DNS,DNS就像是一個纪錄主機名稱與ip位址的資料庫。
1.不多人會在瀏覽器的網址列(URL)填寫IP了,大部分都是透過主機名稱来處理的。
2.因為Internet就是TCP/IP,因此上網一定要用IP才行(不論是IPv4還是IPv6)。
3,所以就需要透過DNS系統,讓瀏覽器直接去DNS系統詢間某主機名稱的IP後,瀏覽器再自行連上該伺服器!
### Address Resolution Protocol(APR)
主機剛連接到這個區域網路時或者重新啟動之後,是不知道目的方的MAC addr 的,如要向目地機器傳送一個IP packet,就需要先知道目的機器的MAC addr,所以會傳送一個ARP請求的封包。
::: success
查看 ARP table
- `arp -n`:以ip address查看table

- `arp -d<ip 位址>`:刪除特定紀錄
- `arp -s<ip 位址><Mac 位址>`:新增一筆靜態紀錄
>過了兩分鐘部會被刪除,但重新哀機後就會被清除
:::
- 只能在區域網路內解析網路裝置的MAC Address
- 知道裝置的IP時,查尋對應的MAC Address
- `A` (163.22.1.1)要傳送封包給`B` (163.22.1.1),`A`知道`B`的IP位址,但不知道MAC位址
- `A`發送ARP request給區網上的所有裝置(廣播封包)
- 用這個IP的裝置會回應ARP reply(`B`會產生回應)
- `A`把`B`的MAC位址回傳
- Cache:`A`將該筆IP/MAC寫入ARP Table中,保持20分幢
這樣,`A`就知道`B`的MAC位址,它就可以向B傳送資訊。同时它還更新自己的ARP table,下次再向`B`傳送資訊時,直接從ARP table裡尋找就可。
### DHCP(Dynamic Host Configuration Protocol,動態主機組態協定)
- DHCP使裝置能夠在連接到網路時自動獲取相關配置(IP Address、子網路遮罩、DNS sever address等)
>DHCP Server(餐廳服務生):主動詢問ˊ裝置需要多少個IP地址,然後提供相應的網路配置給要連線的裝置(客人):進入網路的設備,ex.電腦、手機等
- 運作步驟
- **DHCP Discover**:Client發送一個DHCP Discover 封包(廣播),通知網路上的DHCP Server:「我需要一個IP」
- **DHCP Offer**:DHCP Server收到Discover 封包後,回應一個DHCP Offer封包,其中包含:一個可用的IP地址、子網路遮罩、網關(Gateway)。DNS server等
- **DHCP Request**:Client收到DHCP Offer後,發送一個DHCP Request封包,確認要使用的IP底止
- **DHCP Ack**:同意Client可以使用這個IP address

### NAT 網路位址轉譯(Network Address Translation, NAT )
可以改變 封包 的傳送端 IP 位址與接收端 IP 位址,減少真實 IP 的使用量,也可以將私有 IP(內部 IP)改變成真實 IP(外部 IP)再傳送到網際網路,只需要向網際網路服務供應商,例如:中華電信(2412-TW)申請一個真實 IP,就可以將公司內部所有的電腦連接到網際網路了,因此 NAT 伺服器 是最重要的 <font color=#f00>防火牆</font> 成員,也是一種「封包過濾器(Packet filter)」。
NAT 伺服器的原理
NAT 伺服器的連接方式如<圖一>所示,一端連接私有網路(內部網路),由企業內部網管人員自行設定私有 IP,可以自由設定但是不可以重覆,不需要支付費用,而且可以減少真實 IP 的使用量;一端連接外部網路(網際網路),由企業向網際網路服務供應商(例如:中華電信)申請真實 IP,必須支付費用。
假設台大電機系的網管人員將網路切割為內部與外部,內部網路的網址設定為 192.168.1.1、192.168.1.2、192.168.1.3;而外部網路的網址為 140.112.66.88,則 NAT 伺服器的功能就是更改封包表頭的傳送端 IP 位址與接收端 IP 位址。
➤傳送封包:假設私有網路(內部網路)的電腦 A 要傳送封包到網際網路(外部網路),所以將封包表頭內的傳送端 IP 位址設定為 192.168.1.1,如<圖一(a)>所示。
➤轉送封包:NAT 伺服器將封包表頭的傳送端 IP 位址改成 140.112.66.88 再傳送到網際網路(外部網路),並且記錄這個封包來自電腦 A,如<圖一(b)>所示。
➤接收封包:網際網路(外部網路)要傳送封包到電腦 A,但是封包表頭的接收端 IP 位址設定為 140.112.66.88,因此先由 NAT 伺服器接收進來,如<圖一(c)>所示。
➤轉送封包:NAT 伺服器將封包表頭的接收端 IP 位址改成 192.168.1.1 再傳送到私有網路(內部網路)的電腦 A,如<圖一(d)>所示。

## Lan vs Wan
- Lan(Local Area Network)
- ip:192.168.0.1 or 10.0.1.256
- Wan(Wide Area Network)
- 接外部IP地址用
- LAN 是封閉型的,可以由辦公室的兩部電腦組成,也可以由一個公司內的上千台電腦組成。
- WAN 就是由多個 LAN 組合之集合
同一網域 透過 switch 用 MAC Address 溝通
不同網域 透過 Router 用 IP Address 溝通
## Port
- 如果只有 IP 位址,若有不同的軟體要同時進行傳輸,所有的資料從同一個出口一起通過會發生碰撞
- 連接埠:讓一台電腦擁有多個對外的出口,讓網路傳輸有多工的能力
- 每個 Port 對應不同的網路
### Port 相關指令
- `cat /etc/services`:查看 Port 的使用狀況
- `grep -w /etc/services`:查詢指定 Port
## Method in Transport Layer
### UDP (User Datagram Protocol)
- 僅提供傳輸基本功能,負責處理封包要傳送到哪個 Port
- 追求即時性且能容忍一些封包丟失的情況(盡力傳遞)
- 串流服務、視訊、音訊
### TCP
- 可靠的傳輸方式 --> 保障資料完整性
- 連線導向(Connection-Oriented):傳輸資料前先建立連線,協調參數!(用於資料確認與重送、流量控制)
> 利用三項交握建立連線(SYN -> SYN-ACK -> ACK)

- 資料確認和重送:確認目的端是否收到已送出的資料
- 流量控制:視情況調整資料傳輸的狀況,盡量減少資料的流失
> 利用滑動視窗 (Sliding Window)

### TCP Header

| 特性 | TCP | UDP |
|--------------|------|------|
| 可靠性 | 可靠 | 不可靠 |
| 封包確認 | ACK | - |
| 速度 | 慢 | 快 |
| 傳輸方式 | 封包按順序傳輸 | 封包可以串流方式傳輸 |
| 錯誤檢查與修正 | 有 | 無 |
| 連接處理 | 適時重傳, 高速重傳(指定封包) | 適時重傳(全部封包) |
| 嚴密控制 | 有 | 無 |
| 適用服務 | 要求可可靠運輸的服務, ex: SSH, 文字聊天, 電子郵件, 檔案傳輸 | 請求速度的即時服務, ex: 串流媒體, 網路電話 |
# Application Layer
## HTTP (Hyper Transfer Protocol)
- 全球資訊網 (www) 的網路通訊的基礎
- 用於網頁前後溝通,瀏覽器向伺服器發送請求,伺服器回傳相應的資料
:::info
- Get
- 較 Post 不安全
- 訊息會顯示在 head, body 不傳資料
- 傳遞的參數會在 URL 上顯示
- 流程:
1. 瀏覽器發出 Get 請求,只產生一個 TCP 封包
2. 伺服器回應 200,表示請求成功,同時返回資料
- Post
- 較 Get 安全
- 將參數放在 body 中再發送 request
- 不會在 URL 看到參數,適合用於隱密性較高的資料,例如:登入的帳號、密碼等
- 流程:
1. 瀏覽器發送 Post 請求,只產生一個 TCP 封包
2. 伺服器回應 200,表示請求成功,同時返回資料
- Put:新增一項資料,如果存在就覆蓋過去(維持一筆資料)
- Patch:附加新的資料在已經存在的資料後面(資料必須已存在)
- Delete:刪除資料
- Head:只會取得 HTTP header 的資料
- Option:可以了解 server 提供哪些溝通方法
-
:::
## DNS (Domain Name System,網域名稱系統)
- 將 Domain Name 轉換成 IP Address
- Domain Name:moodle.ncnu.edu.tw
- IP address:163.22.5.234
- 查詢DNS資訊:`nslookup <Domain Name>`
> 從後往前解讀
> tw:臺灣
> edu:教育機構
> ncnu:暨大
> moodle:moodle系統
:::info

如何找尋DNS

- `/etc/nsswitch.conf`
- 定義了解析的依序優先順序決定先要用 /etc/hosts 還是 /etc/resolv.conf 的設定
- files (本機檔案):ex. /etc/hosts、 /etc/passwd
- `/etc/hosts`
- hostname 對應到 IP 的檔案
- /etc/hosts 加上 1.2.3.4 google.com 後輸入 google.com 會連到 IP 位置 1.2.3.4 的位置上
- `/etc/resolv.conf`
- 解析時使用的 DNS Server 的 IP
- `nameserver 8.8.8.8` DNS查詢發送到 Google的 DNS Server
:::
## FTP (File Transfer Protocol)
- 用於檔案傳輸,將共享檔案存放在FTP Server,讓一般使用者可以透過網路來下載或上傳。他的重點在異質性的電腦以及遠距離的檔案共享。
- Client-Server 模型
- FTP Server:提供檔案的 Server 端
- FTP Server:透過 FTP 連接到 Server,執行上傳或下載操作的 Client 裝置
- 20 port:傳遞資料
- 用於實際的檔案資料傳輸(下載或上傳檔案)
- 21 port:傳輸流程控制
- 進行身分驗證、輸入帳密等指令
:::info
- 主動模式(Active Mode)
1. Client 利用 Command Port (1026) 向 Server 的 Command Port (通常是 21) 發送連線請求,同時告知 Server 自己的 Data Port 是 1027 (N + 1)
2. Server 同一個 ACK 到 Client 的 Command Port (通常是 21) 發送連線請求,同時告知自己的 Data Port 是 1027 (N + 1)
3. Server 從自己的 Data Port (20) 向 Client 在第一步指定的 Data Port(1027) 建立連線
4. **連線成功後**,Client 會向 Server 的 Data Port (20) 發送一個確認的 ACK
- 被動模式(Passive Mode)
1. Client 主動跟 Server 連線後,告訴 Server 使用 Passive Mode
2. Server 回 ACK 並告訴 Client 自己開了一個 Data port (2024)
3. Client 主動跟剛才 Server 指定的 Data Port 連線
4. 最後 Server 回一個 ACK 給 Client 的 data port
:::
## HTTP 協定版本
### HTTP 1.0
- 簡單的文本設定
- **無** 連線持續性 (keep-alive)
- 單一請求-回應模型:每個請求都需要建立新的連線,完成後即斷開
- 浪費頻寬、時間延持
- 單路徑傳輸,一次只能處理一個請求
- 狀態碼
- HTTP 1.0 主要使用標頭中的 if-Modified-Since 和 Expires 來做為暫存的判斷標準
### HTTP 1.1
- 連線持續性 (keep-alive)
- 可以使用同一個 TCP 來重複多個 HTTP 請求,預設keep-alive,避免重新建立連線
- 管道化
- 允許在同一連接上平行發送多個請求,但回應還是按照請求的順序返回
-
- 狀態碼 100 (Continue)
- 引入了狀態碼 100,改善了 client 端發送 Request 的模式,避免不必要的頻寬浪費。
-更多請求方法
- 新增了 `PUT`、`PATCH`、`DELETE`、`CONNECT`、`TRACE` 和 `OPTIONS` 等請求方法。
- Host 標頭
- 支援多虛擬主機,使用 Host 標頭字段指定伺服器的域名。
- > 現在在一台伺服器上可以存在多個虛擬主機,並且共享同一個 IP。所以加上 Host ID 之後,就可以將請求發往在同一台伺服器上的不同網站。
- 快取
- 引入更多的暫存功能,例如 `ETag`、`If-Modified-Since` 等。通過這些功能可以最優化暫存的效率。
### HTTP2/SPDY
SPeeDY
- 加快網路載入速度,減少延遲

### HTTP3/QUIC
:::info
QUIC
- **Q**uick **U**DP **I**nternet **C**onnection
- 連線建立 (Connection Establishment)
### 特點
- 多路複用 (Multiplexing)
> TCP HOL Blocking 問題:在 TCP 連線中,一個封包的遺失會導致整個連線的傳輸被卡住,直到封包被重新傳送。
- 允許在同一連線上進行多個 Stream 的資料傳輸。當某一個 Stream 中的封包遺失時,僅影響該 Stream 的傳輸,其他則不受影響,有效避免 **TCP HOL Blocking**
- 封包遺失恢復 (Loss Recovery)
- 在 TCP 中,封包遺失恢復網路使用序列號標記封包,接收端回傳帶有相應序列號的 ACK
- TCP 重傳歧異問題:雖以區分是接收初始封包還是重傳封包的 ACK,可能影響 RTT 和 壅塞控制演算法
- QUIC 解決方案:使用唯一的封包編號 (unique packet number),每次傳送都有新的編號,解決了 ACK 的 歧異問題,提高了 RTT 準確度,降低封包重傳反應時間
- 流量控制 (Flow Control)
- 流量控制限制 Client 傳輸資料量,接收端只保留相對應大小的接收 buffer
- QUIC 使用連線層和 Stream 層流量控制,避免單一 Stream 占用過多 buffer,防止 HOL Blocking
- Connection Migration
- QUIC 使用 64 位獨立的 Connection ID 來識別連線,由 Client 在建立連線時隨機產生
- Connection ID 允許在 Client 的 IP 變動時,仍能平順處理 Connection Migration 的問題
- Client 端可以使用舊的 Connection ID 在新的 IP 位址上傳送封包,接收端透過 Connection ID 識別連線,確保封包正確接收
> HTTP 透過 QUIC 會比 HTTP/2 經由 TLS 加密後在傳輸還要快

:::
## Demo
::: success
**使用 telnet 上網**
- 沒有指定 host --> 預設頁面
```
telnet ammon.bluet.org 80
GET / HTTP/1.0
```
> 會顯示網頁的一些資訊(HTTP版本、使用什麼Server...等)

- 指定 Host
```
telnet ammon.bluet.org 80
GET / HTTP/1.0
Host: studio.bluet.org
```
> 輸入後按兩下 enter 才會顯示抓到的資料
> 告訴網頁伺服器我們指定什麼 Host
> 最後回傳指定 Host 的網頁資料
:::