From f4502ee1ad471a79f6e9505274584a2113b9331c Mon Sep 17 00:00:00 2001 From: Ryan Su Date: Fri, 16 Feb 2024 11:42:36 +0800 Subject: [PATCH] docs: update docs --- pnpm-lock.yaml | 34 +++---- .../assets/image/article/network/udp.png | Bin 0 -> 52497 bytes .../assets/image/article/network/udp_en.png | Bin 0 -> 49050 bytes .../concepts/database/1-database-basic.md | 2 +- src/en/guide/concepts/network/1-network.md | 14 +-- src/en/guide/concepts/network/2-tcp-udp.md | 54 +++++++++-- .../concepts/database/1-database-basic.md | 2 +- src/guide/concepts/network/1-network.md | 2 +- src/guide/concepts/network/2-tcp-udp.md | 85 ++++++++++++++++-- 9 files changed, 155 insertions(+), 38 deletions(-) create mode 100644 src/.vuepress/public/assets/image/article/network/udp.png create mode 100644 src/.vuepress/public/assets/image/article/network/udp_en.png diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c87ae2e4..076065dc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2045,7 +2045,7 @@ packages: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 18.19.16 + '@types/node': 20.11.19 /@types/hash-sum@1.0.2: resolution: {integrity: sha512-UP28RddqY8xcU0SCEp9YKutQICXpaAq9N8U2klqF5hegGha7KzTOL8EdhIIV3bOSGBzjEpN9bU/d+nNZBdJYVw==} @@ -2053,7 +2053,7 @@ packages: /@types/jsonfile@6.1.4: resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 18.19.16 + '@types/node': 20.11.19 /@types/katex@0.16.7: resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} @@ -2083,15 +2083,15 @@ packages: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} dev: true - /@types/node@18.19.16: - resolution: {integrity: sha512-mjtrR7Wco9ZwcGBc1zre6fENlj9z42/+0W26lBGtGBTPiR3Zm9iZAaiPhxreG6magwGCILLVYwlQ48GjAaqM6w==} + /@types/node@20.11.19: + resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==} dependencies: undici-types: 5.26.5 /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 18.19.16 + '@types/node': 20.11.19 /@types/sax@1.2.7: resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} @@ -2149,8 +2149,8 @@ packages: '@vue/compiler-dom': 3.4.19 '@vue/shared': 3.4.19 - /@vue/devtools-api@6.5.1: - resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} + /@vue/devtools-api@6.6.1: + resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==} /@vue/reactivity@3.4.19: resolution: {integrity: sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==} @@ -2230,7 +2230,7 @@ packages: /@vuepress/client@2.0.0-rc.7: resolution: {integrity: sha512-T8jf9h8dfP1ln/7uOIiTAJrdyKRTyq1x+RHXuc7GoRxTfOw+bIYgGvh63Z7m1e3K/yh1nO9aM1WcXbDN1Swp4w==} dependencies: - '@vue/devtools-api': 6.5.1 + '@vue/devtools-api': 6.6.1 '@vuepress/shared': 2.0.0-rc.7 '@vueuse/core': 10.7.2(vue@3.4.19) vue: 3.4.19 @@ -2479,7 +2479,7 @@ packages: peerDependencies: vuepress: 2.0.0-rc.7 dependencies: - '@vue/devtools-api': 6.5.1 + '@vue/devtools-api': 6.6.1 vue: 3.4.19 vuepress: 2.0.0-rc.7(@vuepress/bundler-vite@2.0.0-rc.7)(vue@3.4.19) transitivePeerDependencies: @@ -2704,7 +2704,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001587 - electron-to-chromium: 1.4.670 + electron-to-chromium: 1.4.671 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -2954,8 +2954,8 @@ packages: dependencies: jake: 10.8.7 - /electron-to-chromium@1.4.670: - resolution: {integrity: sha512-hcijYOWjOtjKrKPtNA6tuLlA/bTLO3heFG8pQA6mLpq7dRydSWicXova5lyxDzp1iVJaYhK7J2OQlGE52KYn7A==} + /electron-to-chromium@1.4.671: + resolution: {integrity: sha512-UUlE+/rWbydmp+FW8xlnnTA5WNA0ZZd2XL8CuMS72rh+k4y1f8+z6yk3UQhEwqHQWj6IBdL78DwWOdGMvYfQyA==} /emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} @@ -3550,7 +3550,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.19.16 + '@types/node': 20.11.19 merge-stream: 2.0.0 supports-color: 7.2.0 @@ -4053,7 +4053,7 @@ packages: jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.27.0 + terser: 5.27.1 /rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} @@ -4359,8 +4359,8 @@ packages: type-fest: 0.16.0 unique-string: 2.0.0 - /terser@5.27.0: - resolution: {integrity: sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==} + /terser@5.27.1: + resolution: {integrity: sha512-29wAr6UU/oQpnTw5HoadwjUZnFQXGdOfj0LjZ4sVxzqwHh/QVkvr7m8y9WoR4iN3FRitVduTc6KdjcW38Npsug==} engines: {node: '>=10'} hasBin: true dependencies: @@ -4551,7 +4551,7 @@ packages: peerDependencies: vue: ^3.2.0 dependencies: - '@vue/devtools-api': 6.5.1 + '@vue/devtools-api': 6.6.1 vue: 3.4.19 /vue@3.4.19: diff --git a/src/.vuepress/public/assets/image/article/network/udp.png b/src/.vuepress/public/assets/image/article/network/udp.png new file mode 100644 index 0000000000000000000000000000000000000000..dd02e4c6803dc91838f00302f3ac823f278c3900 GIT binary patch literal 52497 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 SA9wLF{r&y?|KZ=Bq5lHh8ttb5 literal 0 HcmV?d00001 diff --git a/src/en/guide/concepts/database/1-database-basic.md b/src/en/guide/concepts/database/1-database-basic.md index 6530c957..1d1b6107 100644 --- a/src/en/guide/concepts/database/1-database-basic.md +++ b/src/en/guide/concepts/database/1-database-basic.md @@ -1,6 +1,6 @@ --- order: 1 -title: "Database basic" +title: "Basic" --- ## Relationship Keys diff --git a/src/en/guide/concepts/network/1-network.md b/src/en/guide/concepts/network/1-network.md index 2cc51173..3b21b16d 100644 --- a/src/en/guide/concepts/network/1-network.md +++ b/src/en/guide/concepts/network/1-network.md @@ -1,6 +1,6 @@ --- order: 1 -title: "Computer Network" +title: "Basic" --- ### OSI Seven-Layer Model @@ -137,12 +137,12 @@ The `HTTPS` protocol will encrypt the transmitted data, and the encryption proce ### HTTP 1.0 vs 1.1 vs 2.0 ::: tip Differences -| Feature | HTTP 1.0 | HTTP 1.1 | HTTP 2.0 | -|--------|-----------------------------|------------------------------------|-----------------------------------| -| Connection | Non-persistent, each request requires a new connection | Persistent, reduces the overhead of repeated TCP connection establishment and termination | Multiplexing, multiple HTTP requests can be concurrent on a single TCP connection | -| Head-of-line blocking | Exists, the next request can only be sent after the response of the previous request arrives | Exists, although multiple requests can be initiated, the server must send responses in the order of received requests | Solved, multiple requests or responses can be concurrent in a single connection without having to correspond one by one | -| Header compression | Not supported | Not supported | Supported, uses HPACK algorithm to compress headers | -| Server push | Not supported | Not supported | Supported | +| Feature | HTTP 1.0 | HTTP 1.1 | HTTP 2.0 | +| --------------------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | +| Connection | Non-persistent, each request requires a new connection | Persistent, reduces the overhead of repeated TCP connection establishment and termination | Multiplexing, multiple HTTP requests can be concurrent on a single TCP connection | +| Head-of-line blocking | Exists, the next request can only be sent after the response of the previous request arrives | Exists, although multiple requests can be initiated, the server must send responses in the order of received requests | Solved, multiple requests or responses can be concurrent in a single connection without having to correspond one by one | +| Header compression | Not supported | Not supported | Supported, uses HPACK algorithm to compress headers | +| Server push | Not supported | Not supported | Supported | ::: ### Digital Certificate diff --git a/src/en/guide/concepts/network/2-tcp-udp.md b/src/en/guide/concepts/network/2-tcp-udp.md index 41b135ea..13926c42 100644 --- a/src/en/guide/concepts/network/2-tcp-udp.md +++ b/src/en/guide/concepts/network/2-tcp-udp.md @@ -62,7 +62,7 @@ The process of TCP establishing a connection is the process of synchronizing seq The reason why a four-way handshake is needed is because TCP is a **full-duplex** protocol, i.e., both the client and the server can actively send messages, so both ends need to send disconnect instructions after the transmission is completed, and need to send `FIN=1` separately to disconnect, and use `ACK` to determine whether the sending was successful. ::: -::: danger What happens if SYN times out during connection? +::: caution What happens if SYN times out during connection? ::: details If the client sends a `SYN` command, and drops the line before the server returns the `SYN` command, the server will try to resend the `SYN-ACK` command. Under Linux, the default is to retry 5 times, the interval time starts to double from 1s, i.e., `1s, 2s, 4s, 8s, 16s`, so the timeout time is `1s + 2s + 4s+ 8s+ 16s + 32s = 63s`. After the timeout, TCP will disconnect. @@ -85,7 +85,7 @@ If the client sends a `SYN` command, and drops the line before the server return TCP uses sequence numbers to sort and deduplicate packets, and through the ACK acknowledgment mechanism, it ensures that packets are successfully delivered, ensuring the integrity of the data. -#### Timeout retransmission +##### Timeout retransmission TCP can retransmit packets until an ACK acknowledgment is received when packets are lost or delayed, through the timeout retransmission mechanism. @@ -137,12 +137,54 @@ The SACK method ([RFC 2018](https://www.ietf.org/rfc/rfc2883.txt)) adds a buffer D-SACK ([RFC 2883](https://datatracker.ietf.org/doc/html/rfc2018)) mainly solves the problem of ACK loss. D-SACK uses the first segment of SACK as a flag to mark the packets that have been ACKed. When the receiving end receives a duplicate packet, it will write the packet into the D-SACK flag, telling the sender that the packet has been received, and the ACK may have been lost. ::: +#### Checksum + +TCP also calculates a checksum on the data to ensure that the data was not lost or corrupted during transmission. + ### UDP -### Common interview questions +UDP, short for User Datagram Protocol, is a connectionless transport layer protocol in the OSI (Open Systems Interconnection) reference model. It provides a simple, unreliable transaction-oriented message delivery service, and its official specification is `IETF RFC 768`. -::: tip What is a SYN Flood attack? +#### Characteristics -::: details +- Connectionless: UDP does not need to establish a connection between the client and the server before transmitting data. +- Fast: Since UDP does not need to handshake or check whether the data has arrived correctly, it can transmit data faster than TCP. +- Unreliability: Once the datagram is sent, it is impossible to know whether it has arrived safely and completely. If the UDP datagram is lost during transmission, it will not be resent. +- Widely used: UDP is used to support network applications that need to transmit data between computers. Many client/server model network applications, including network video conferencing systems, need to use the UDP protocol. For example, many Internet phone services use IP voice (VoIP) usually sent using UDP. + +#### Structure + +| Field | Size | Description | +| ---------------- | ------ | --------------------------------------------------------------------- | +| Source Port | 16-bit | Source port number. If all are 0, no reply is allowed | +| Destination Port | 16-bit | Destination port number | +| Length | 16-bit | Length of the UDP user datagram, its minimum value is 8 (header only) | +| Checksum | 16-bit | Detect whether the data is lost or modified during transmission | + +#### Broadcast Types -::: \ No newline at end of file +| Type | Description | +| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Unicast | Used for end-to-end communication between two hosts. That is, one-to-one (client and server point-to-point connection) | +| Broadcast | Used for a host to communicate with all hosts on the entire LAN. That is, one to all. Broadcasting is prohibited from transmitting on the Internet broadband network (broadcast storm) | +| Multicast | Communicate with a specific group of hosts, not all hosts on the entire LAN. That is, one to a group | + +::: warning +- TCP only supports one-to-one +- UDP multicast is more commonly used, broadcast is only used for LAN +::: + +::: info Difference between TCP and UDP + +| Feature | TCP | UDP | +| ----------------------------------- | ------------------- | -------------- | +| Reliable Transmission | Yes | No | +| Connection | Connection-oriented | Connectionless | +| Data Orderliness | Yes | Not guaranteed | +| Data Boundary | Not preserved | Preserved | +| Transmission Speed | Relatively slow | Fast | +| Flow Control and Congestion Control | Yes | No | +| Protocol Type | Heavyweight | Lightweight | +| Header Length | 20 bytes | 8 bytes | + +::: diff --git a/src/guide/concepts/database/1-database-basic.md b/src/guide/concepts/database/1-database-basic.md index d755f848..83565ecf 100644 --- a/src/guide/concepts/database/1-database-basic.md +++ b/src/guide/concepts/database/1-database-basic.md @@ -1,6 +1,6 @@ --- order: 1 -title: "数据库基础" +title: "基础" --- ## 关系键 diff --git a/src/guide/concepts/network/1-network.md b/src/guide/concepts/network/1-network.md index 01826029..fc316f06 100644 --- a/src/guide/concepts/network/1-network.md +++ b/src/guide/concepts/network/1-network.md @@ -1,6 +1,6 @@ --- order: 1 -title: "计算机网络基础" +title: "基础" --- ### OSI七层模型 diff --git a/src/guide/concepts/network/2-tcp-udp.md b/src/guide/concepts/network/2-tcp-udp.md index 7b7680ff..24a96d58 100644 --- a/src/guide/concepts/network/2-tcp-udp.md +++ b/src/guide/concepts/network/2-tcp-udp.md @@ -63,7 +63,7 @@ TCP 建立连接的过程就是同步序列号的过程,SYN (Synchronize Seque 之所以需要四次挥手,是因为 tcp 是**全双工**协议,即客户端和服务端都可以主动发送消息,因此需要两端分别在传输完成后发送断开连接的指令,需要分别发送 `FIN=1` 指令断开,通过 `ACK` 判断是否发送成功。 ::: -::: danger 如果连接时 SYN 超时会发生什么? +::: caution 如果连接时 SYN 超时会发生什么? ::: details 假如客户端发送 `SYN` 指令,在服务器返回 `SYN` 指令之前掉线了,服务器会尝试重发 `SYN-ACK` 指令,linux 下默认重试 5 次,间隔时间从 1s 开始翻倍增长,即 `1s, 2s, 4s, 8s, 16s`, 因此超时时间为 `1s + 2s + 4s+ 8s+ 16s + 32s = 63s`。在超时之后 TCP 才会断开连接。 @@ -151,7 +151,7 @@ TCP 使用滑动窗口来控制流量,使得发送端可以根据接收端的 #### 拥塞控制 ::: tip 算法 -- 慢启动 +- 慢开始 - 拥塞避免 - 快重传 - 快恢复 @@ -159,13 +159,88 @@ TCP 使用滑动窗口来控制流量,使得发送端可以根据接收端的 ![拥塞控制](/assets/image/article/network/tcp-congestion-control.png) +::: info 相关名词 +- cwnd - 拥塞窗口 +- ssthresh - 慢开始门限 +::: + +::: important + +- `cwnd < ssthresh`,使用慢开始算法。 + +- `cwnd > ssthresh`,使用拥塞避免算法。 + +- `cwnd = ssthresh`,使用慢开始与拥塞避免算法任意一个。 +::: + +##### 慢开始 + +在慢开始阶段, `cwnd` 初始值为 `1`, 每经过一个传播轮次,`cwnd` 都会翻倍,直到达到 `ssthresh` 。 + +##### 拥塞避免 + +当 `cwnd` 达到 `ssthresh` ,则会执行拥塞避免算法,此时 `cwnd` 的增长从翻倍增长变为每经过一个传播轮次就加 `1` 。若发送方检测到网络拥塞(即发送的消息没得到及时的回应),就会将 `ssthresh` 设置为发生网络拥塞时的 `cwnd` 值的一半,同时 `cwnd` 的值将会重置为 `1` ,重新执行慢开始。 + +##### 快重传和快恢复 + +快重传在前面已介绍过,即如果连续收到三个重复的确认就会立即发送尚未接收到的报文段。快恢复算法需要配合快重传算法使用。图中的 5 号为快恢复阶段。 + +::: info 快恢复算法 +- 当发送端连续收到三个重复的确认时,将 `ssthresh` 减半。 +- 将 `cwnd` 设置为 `ssthresh` 的大小 +::: + +#### 校验和 + +TCP 还会对数据计算校验和,确保数据在传输过程中未丢失或出现错误。 + ### UDP -### 常见面试题 +UDP,全称用户数据报协议(User Datagram Protocol),是OSI(开放系统互联)参考模型中的一种无连接的传输层协议。它提供面向事务的简单不可靠信息传送服务,其正式规范是 `IETF RFC 768`。 -::: tip 什么是 SYN Flood 攻击? +#### 特点 -::: details +- 无连接:UDP在传输数据前不需要在客户和服务器之间建立一个连接。 +- 速度快:由于UDP不需要进行握手或检查数据是否正确到达,所以它能够比TCP更快地传输数据。 +- 不可靠性:当报文发送之后,是无法得知其是否安全完整到达的。如果UDP数据报在传输过程中丢失,它不会重新发送。 +- 应用广泛:UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。例如,许多互联网电话服务使用的IP语音 (VoIP) 通常是使用UDP发送的。 + +#### 结构 + +![udp](/assets/image/article/network/udp.png) + +| 字段 | 大小 | 描述 | +| -------- | ---- | ----------------------------------------- | +| 源端口 | 16位 | 源端口号。若全为 0 则意味着不允许回信 | +| 目的端口 | 16位 | 目标端口号 | +| 长度 | 16位 | UDP用户数据报的长度,其最小值是8(仅有首部) | +| 检验和 | 16位 | 检测数据在传输过程中是否丢失或修改 | + +#### 广播类型 + +| 类型 | 描述 | +| ------------ | ---------------------------------------------------------------------------------------------- | +| 单播 | 用于两个主机之间端对端的通信。即一对一(客户端与服务器端点到点连接) | +| 广播 | 用于一个主机对整个局域网上所有主机通信。即一对所有。广播禁止在Internet宽带网上传输(广播风暴) | +| 组播(多播) | 对一组特定的主机进行通信,而不是整个局域网上的所有主机。即一对一组 | + +::: warning +- TCP 只支持一对一 +- UDP 多播较为常用,广播仅用于局域网 +::: + +::: info TCP 和 UDP 区别 + +| 特性 | TCP | UDP | +| ------------------ | -------- | ------ | +| 可靠传输 | 是 | 否 | +| 连接 | 面向连接 | 无连接 | +| 数据有序性 | 有 | 不保证 | +| 数据边界 | 不保存 | 保留 | +| 传输速度 | 相对慢 | 快 | +| 流量控制和拥塞控制 | 有 | 没有 | +| 协议类型 | 重量级 | 轻量级 | +| 首部长度 | 20字节 | 8字节 | :::