Skip to content

Commit f926ffc

Browse files
committed
(#9) Add network basics post
1 parent cee47e1 commit f926ffc

File tree

10 files changed

+475
-40
lines changed

10 files changed

+475
-40
lines changed

_posts/container/2024-02-12-container-docker-to-k8s.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,9 @@ docker 有自己內建的 dns server, 這也解釋了為什麼我們可以單純
155155
而你每一次呼叫 "web" service 的時候,dns server 都要決定要給你哪一個 ip 對吧\
156156
所以負載平衡這段其實是由 docker 內建的 dns server 幫你做掉了
157157
158+
> 有關 DNS load balancing\
159+
> 可參考 [重新認識網路 - 從基礎開始 \| Shawn Hsu](../../network/networking-basics)
160+
158161
你說可是上面我們還是使用了 nginx 阿\
159162
那是因為每一個 replica service 都使用了相同的 port number(這個會造成 error), 我們需要一個統一的進入點存取\
160163
所以這裡才使用了 nginx

_posts/network/2022-04-28-network-osi.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ OSI 七層模型是由 [國際電信聯盟電信標準化部門 - ITU-T](https:/
7171
<hr>
7272

7373
常見的協議如 [TCP](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) 以及 [UDP](https://en.wikipedia.org/wiki/User_Datagram_Protocol) 都是跑在傳輸層之上的協議
74-
<!-- > 詳細的討論可以參考 [重新認識網路 - TCP/IP \| Shawn Hsu](../networking-tcp) 以及 [重新認識網路 - UDP \| Shawn Hsu](../networking-udp) -->
74+
> 詳細的討論可以參考 [重新認識網路 - 從基礎開始 \| Shawn Hsu](../../network/networking-basics)
7575
7676
## Network Layer - 3
7777
網路層主要是作 routing 的功能\
@@ -117,7 +117,7 @@ hop 這個東西簡單講就是,`經過的中繼站點個數`, 它也可以用
117117
layer 3 switch 以及 IP 分享器 都是網路層的設備
118118

119119
除此之外,[Internet Protocol IP](https://en.wikipedia.org/wiki/Internet_Protocol) 也是跑在網路層的上的協議
120-
<!-- > 詳細關於 TCP/IP 的討論可以參考 [重新認識網路 - TCP/IP \| Shawn Hsu](../networking-tcp) -->
120+
> 詳細的討論可以參考 [重新認識網路 - 從基礎開始 \| Shawn Hsu](../../network/networking-basics)
121121
122122
## Data Link Layer - 2
123123
資料連結層為了提供 [connectionless-mode](https://en.wikipedia.org/wiki/Connectionless_communication) 以及 connection-mode,所以它必須提供了一系列的連線建立、維護\

_posts/network/2024-05-07-networking-basics.md

Lines changed: 462 additions & 0 deletions
Large diffs are not rendered by default.

_posts/random/2024-01-18-real-time-communication.md

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -115,42 +115,7 @@ timeout 設定成一分鐘的情況下\
115115
在這一方面可謂完美的解決了 [Polling](#polling) 以及 [Long Polling](#long-polling) 建立連線的巨大成本帶來的 overhead\
116116
看似完美的解決方案,但是它會遇到另一個問題,file descriptor 數量限制
117117

118-
<hr>
119-
120-
> In UNIX, Everything is a File
121-
122-
事情還得要從作業系統說起\
123-
UNIX 的設計哲學是,Everything is a File\
124-
每個東西都是檔案,什麼意思?\
125-
檔案不就是檔案嗎? 那麼網路,印表機這些也算檔案嗎?\
126-
依照作業系統的邏輯,如果要詳細區分這些東西為各種不同的類別,那麼實作起來將會無比困難\
127-
因此,就算是印表機這種東西,底層實作也會將它視為是 **檔案**
128-
129-
建立網路連線,它分成大約兩步驟
130-
1. 建立 socket(i.e. file descriptor),建立好一個對接的端口
131-
2. 建立連線(並且透過 socket 進行資料的傳輸)
132-
133-
而 socket 就是那個 **檔案**\
134-
每個應用程式都擁有自己的 socket 接口\
135-
你可以使用 [lsof](https://linux.die.net/man/8/lsof) 這個指令查看當前 internet file descriptor 的狀況\
136-
執行 `$ sudo lsof -i` 你會看到類似這張圖的輸出
137-
![](/assets/img/posts/lsof.png)
138-
可以很清楚的看到,chrome 瀏覽器開了許多的 socket
139-
140-
> 你應該還會看到其他應用程式,像我的還有 telegram, docker ... etc.
141-
142-
<hr>
143-
144-
socket 有沒有數量限制呢? 或者說比較 general 一點\
145-
file descriptor 有沒有上限?\
146-
我想答案很明顯是有的
147-
148-
```shell
149-
$ ulimit -n
150-
1024
151-
```
152-
153-
> 可參考 [man ulimit](https://linuxcommand.org/lc3_man_pages/ulimith.html)
118+
> 有關 socket 的介紹可參考 [重新認識網路 - 從基礎開始 \| Shawn Hsu](../../network/networking-basics#socket)
154119
155120
我的電腦,預設 file descriptor 上限數量為 `1024`\
156121
也就是說一個 process 的 file descriptor 上限就那麼多\

_posts/website/2023-03-08-website-jwt.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,11 @@ client 要驗證的唯一方式 是不是用金鑰下去算算看?\
312312
就代表這個 token 來源被驗證了! 嗎
313313

314314
記不記得在前面 [JWS(JSON Web Signature)](#jwsjson-web-signature) 有提到\
315-
簽章有兩種方式, digital signature 跟 Message Authentication Codes(MACs)\
316-
其中 MACs 是沒辦法驗證來源的
315+
簽章有兩種方式, digital signature 跟 Message Authentication Codes(MACs)
316+
317+
> 數位簽章(digital signature) 可以驗證 1. 資料完整性 2. 來源合法性\
318+
> Message Authentication Codes(MACs) 可以驗證 1. 資料完整性\
319+
> 其中 MACs 是沒辦法驗證來源的
317320
318321
道理倒也淺顯易懂\
319322
如果第三方取得你的 signing key, 我是不是也能偽造簽章了?
@@ -386,6 +389,8 @@ signature 的計算是使用存在 server 上的 signing key 加上前面 header
386389
如果真的有傳送機密訊息的需求,使用 [JWE](#jwejson-web-encryption) 是最好的選擇\
387390
不過普遍來說,我們認為 http 的 TLS 已經足夠應付大多數的場景了
388391

392+
> 有關 TLS 的介紹可以參考 [重新認識網路 - 從基礎開始 \| Shawn Hsu](../../network/networking-basics#ssl---secure-sockets-layertls)
393+
389394
既然 JWS 沒有進行加密\
390395
一般來說是不建議在上面塞入任何敏感資訊\
391396
以我自己來說,我通常只會帶個 user id 之類洩漏也不會怎麼樣的資料\

assets/img/posts/tcpdump1.png

314 KB
Loading

assets/img/posts/tcpdump2.png

83.6 KB
Loading

assets/img/posts/tcpdump3.png

287 KB
Loading

assets/img/posts/udpdump.png

32.4 KB
Loading

assets/img/posts/udpdump1.png

14.7 KB
Loading

0 commit comments

Comments
 (0)