Transmission Control Protocol, TCP
傳輸控制協定
確保你資料的完整、按順序、沒遺漏的送到對方手中
如果中間有缺失,會要求重新傳送
TCP的特性
- 連線導向
- 可靠傳輸
- 順序保證
- 流量控制
- 有確認與重傳
當MIKEY想跟伺服器Server建立連線時,會經過3個步驟
第一步: MIKEY ---SYN---> Server
MIKEY:「嗨Server,我想跟你連線」第二步: Server ---SYN+ACK---> MIKEY
Server:「好的,我收到了,我也想跟你連」第三步: MIKEY ---ACK---> Server
MIKEY:「收到,那我們開始吧」
連線建立
SYN -> SYN+ACK -> ACK
Sequence Number (序號)
用來:
- 確認資料順序
- 判斷遺失資料
- 支援重傳
ACK Number (確認號碼)
用來表示那些資料已經成功收到
所以TCP能做到可靠+有序傳輸
SYN-SENT
MIKEY:
已送出SYN,等待Server回應
SYN-RECEIVED
Server:
已收到MIKEY傳的SYN
已回應SYN+ACK
等待MIKEY確認(ACK)
ESTABLISHED
三向交握:
完成
開始正常傳輸資料
CLOSE-WAIT
被動關閉的一方
收到FIN後先回ACK
等待本地應用程式發出關閉請求
流量控制 Flow Control
目的是
不要讓傳送端送太快
把接收端塞爆
Sender傳送端 <-> Receiver接收端
壅塞控制Congestion Control
不要讓大量流量把整個網路塞爆
重點
流量控制 Flow Control → 保護接收端
壅塞控制 Congestion Control → 控制網路壅塞
攻擊建立在三向交握的過程
正常的三向交握:
SYN -> SYN/ACK -> ACK
攻擊者會把它變成:
攻擊者送大量的SYN
Server回應 SYN/ACK
攻擊者故意不回應 ACK
這導致Server留下了大量的半開連線
Half-Open Connection
最後造成:
系統資源耗盡,正常使用者無法建立連線
IPAS 110-2 Q31
下列何者較「不」是 SYN洪水攻擊(SYN Flood)的防禦方式?
A: 利用防火牆阻擋"所有"TCP連線
這樣正常的TCP連線也會無法連進來
B: 增加Backlog Queue的數量
C: 清理過久 Half-Open Connection
D: 使用SYN Cookie
攻擊者試圖接管一條已經建立的TCP Session (連線會話)
User Datagram Protocol,UDP
使用者資料報協定
與TCP完全相反
- 不需建立連接
- 不保證送達
- 不保證順序
但因為省去了這些保證所以:
速度較快很多適合:
- 影片串流
- 語音通話
- 線上遊戲
| 項目 | TCP | UDP |
|---|---|---|
| 連線方式 | 連線導向(三向交握) | 非連線導向(直送) |
| 可靠性 | 高(有確認、重傳機制) | 低(只管送不管到) |
| 速度 | 慢 | 快 |
| 順序保證 | 有 | 沒有 |
| 資料單位 | Segment(區段) | Datagram(資料報) |
| 應用 | HTTP、HTTPS、FTP、SSH、SMTP | DNS、DHCP、影片 |
Internet Control Message Protocol,ICMP
網際網路控制訊息協定
ICMP運作在OSI L3網路層
它不是用來傳資料的,是用來回報網路狀態的
例如:
Ping指令:
ping 8.8.8.8
背後就是ICMP協定送一個請求出去,對方回應,藉此確認目標是否可以連通,延遲多少
Ping of Death
DoS的一種
攻擊者利用作業系統處理網路封包的漏洞
發送一個超過IP協定最大限制(65,535bytes)的ICMP封包
讓系統在重組時發生緩衝區溢位而崩潰
IPAS
死亡之Ping(Ping of Death, PoD)是針對開放式系統互聯模型(Open System Interconnection Model , OSI Model)的何層攻擊?
B: L3網路層
Port 連接埠
範圍: 0~65535
其中0~1023是公認連接埠(被保留給常見的服務)
| 服務 | Port | 用途 | TCP/UDP | 有沒有加密 |
|---|---|---|---|---|
| FTP | 21 | 檔案傳輸 | TCP | ❌ 明文 |
| SSH | 22 | 安全遠端連線 | TCP | ✅ 加密 |
| SFTP | 22 | 安全檔案傳輸(走SSH) | TCP | ✅ 加密 |
| SMTP | 25 | 寄送郵件 | TCP | ❌ 明文 |
| DNS | 53 | 網域名稱解析 | TCP + UDP | ❌ |
| DHCP | 67/68 | 自動取得IP | UDP | ❌ |
| HTTP | 80 | 網頁瀏覽 | TCP | ❌ 明文 |
| HTTPS | 443 | 加密網頁 | TCP | ✅ 加密 |
網路有分:
Private IP(內網/私有 IP)
Public IP(外網/公有 IP)
私有IP 位址的範圍
A 10.0.0.0~10.255.255.255
B 172.16.0.0~172.31.255.255
C 192.168.0.0~192.168.255.255
IPAS 108-2 Q1
下列何者「不」是私有網路位址(Private IP)?
A: 10.0.0.1
B: 169.254.2.210
C: 172.31.5.128
D: 192.168.10.220
答案是:B
169.254.x.x 是 APIPA(自動私有 IP 定址),是電腦拿不到 DHCP 分配時自己產生的,跟 Private IP 不一樣
Network Address Translation,NAT
網路位址轉換
NAT是一個把私有IP轉換成公有IP的技術
讓內網可以共用少數幾個公有IP上網
可以做的事:
舉例:在家用手機連WIFI使用Google查資料
家裡路由器:
內網: IP 192.168.1.1
外網: IP 219.161.10.20
Google伺服器: 公有IP 142.250.199.99
第一步:
手機瀏覽器輸入google
這時手機發了一個封包給路由器
來源: 192.168.1.100 (我的手機)
來源Port:50000 (假設手機隨便開的一個port)
目的IP:142.250.199.99 (google伺服器)
因為 192.168.1.100 在網路上是無效的,封包送到路由器時,NAT 會進行改寫與紀錄
第二步:
來源IP改路由器的外網IP 219.161.10.20
來源port也改成路由器分配的port:60001
關鍵動作(NAT 對照表記帳):路由器在記憶體裡寫下一筆記錄:
「只要有回應傳給 218.161.10.20:60001,就是給手機 192.168.1.100:50000 的!」
第三步:
Google伺服器回應 (外網 -> 路由器)
第四步:
路由器還原NAT並交給手機 (外網 -> 內網)