應用層是最貼近使用者的一層:client 透過 TCP/UDP 連到 server 的某個 port,而 DNS 把人類看得懂的名字翻成 IP。這一層的排查工具(lsof、tcpdump、netcat)也是你排「連不上」時最先掏出來的東西。
🧠 Intuition
TIP
Socket 是 process 存取網路的介面,也是 user space 與 kernel 的邊界。伺服器的典型流程:master 用 listener socket 監聽 → 有連線就 accept() 建專屬讀寫 socket → fork() 子行程處理 → listener 繼續監聽下一個。
- Port 與服務:port 1–1023 是特權 port(僅 root),
/etc/services記錄已知 port 對應的服務名;client 從臨時 port(ephemeral)連到 server 的已知 port。 - DNS 解析流程:應用呼叫查詢函式 → 依
/etc/nsswitch.conf決定策略(通常files dns,先查/etc/hosts再查 DNS)→ 向 name server 查詢 → 拿到 IP。本機常用 systemd-resolved 做快取,避免重複查詢很慢。 - SSH:遠端存取的事實標準,用 公鑰加密驗證並加密整個 session;server 是
sshd(設定在/etc/ssh/sshd_config),取代明文的 telnet/rlogin。 - Unix domain socket:同機 process 間通訊(如 D-Bus、MySQL 的
.sock),沒有網路、效能更好、可用檔案權限控管存取。
⚖️ Tradeoffs
服務全開、明文協定 — 攻擊面過大
- Linux 是熱門伺服器平台、天生是攻擊目標;ftpd、telnetd、rlogind 這類明文傳輸密碼的服務應停用。
- 對外開 SSH 會不斷收到暴力破解——用 fail2ban 監控 log、多次失敗就以 iptables 封鎖來源。
- 常見漏洞:直接攻擊未保護的服務(buffer overflow)、明文密碼嗅探。
最小化服務 + 防火牆 + 加密 — 基本守則
- 只開需要的服務、內部服務(如 RPC 111)用防火牆擋在外、保持軟體更新並追蹤安全警報。
- 排查用工具鏈:
lsof -i看誰在聽 port、tcpdump抓封包、netcat當萬用 TCP/UDP 測試、nmap掃開放 port(掃別人網路前先取得授權)。 - 需要加密卻用不支援加密的服務時,可用 Stunnel 包一層 TLS;值得深入學 TLS/SSL 的公鑰與憑證機制。
🔑 Takeaways
- 應用層=client 連 server 的 port;socket 是 process 對網路的介面,伺服器靠 listener +
accept()+fork()處理連線。 - DNS 解析走
nsswitch.conf→(/etc/hosts/DNS)→ name server,本機用 systemd-resolved 快取;SSH 用公鑰加密取代明文協定。 - 安全基本功:最小化服務、防火牆擋內部服務、停用明文協定、加密(TLS);排查靠 lsof / tcpdump / netcat / nmap。
No notes yet — jot your takeaways or Q&A here.