chore: 将所有外部图片本地化到仓库

- 下载 110 张外部图片到根目录 images/ 文件夹
- 更新所有 README.md 中的图片引用为统一路径 images/xxx.png
- 55 张图片成功下载(PNG 格式)
- 55 张失效图片创建占位文件(SVG/PNG)
- 移除所有外部图片链接依赖

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
riba2534
2026-01-05 16:34:13 +08:00
parent d44ecdf807
commit 0d17c981ee
128 changed files with 691 additions and 232 deletions

View File

@@ -81,7 +81,7 @@ gcc My_op_server.c -o myserver
结果:
![](https://i.loli.net/2019/01/15/5c3d966b81c03.png)
![](images/5c3d966b81c03.png)
其实主要是对程序的一点点小改动,只需要在客户端固定好发送的格式,服务端按照固定格式解析,然后返回结果即可。
@@ -108,7 +108,7 @@ gcc op_server.c -o opserver
结果:
![](https://i.loli.net/2019/01/16/5c3ea297c7649.png)
![](images/5c3ea297c7649.png)
### 5.2 TCP 原理
@@ -118,7 +118,7 @@ TCP 套接字的数据收发无边界。服务器即使调用 1 次 write 函数
实际上write 函数调用后并非立即传输数据read 函数调用后也并非马上接收数据。如图所示write 函数调用瞬间数据将移至输出缓冲read 函数调用瞬间,从输入缓冲读取数据。
![](https://i.loli.net/2019/01/16/5c3ea41cd93c6.png)
![](images/5c3ea41cd93c6.png)
I/O 缓冲特性可以整理如下:
@@ -158,7 +158,7 @@ TCP 套接字从创建到消失所经过的过程分为如下三步:
TCP 在实际通信中也会经过三次对话过程,因此,该过程又被称为 **Three-way handshaking三次握手**。接下来给出连接过程中实际交换的信息方式:
![](https://i.loli.net/2019/01/16/5c3ecdec9fc04.png)
![](images/5c3ecdec9fc04.png)
套接字是全双工方式工作的。也就是说,它可以双向传递数据。因此,收发数据前要做一些准备。首先请求连接的主机 A 要给主机 B 传递以下信息:
@@ -190,7 +190,7 @@ TCP 在实际通信中也会经过三次对话过程,因此,该过程又被
通过第一步三次握手过程完成了数据交换准备,下面就开始正式收发数据,其默认方式如图所示:
![](https://i.loli.net/2019/01/16/5c3ed1a97ce2b.png)
![](images/5c3ed1a97ce2b.png)
图上给出了主机 A 分成 2 个数据包向主机 B 传输 200 字节的过程。首先,主机 A 通过 1 个数据包发送 100 个字节的数据,数据包的 SEQ 为 1200。主机 B 为了确认这一点,向主机 A 发送 ACK 1301 消息。
@@ -200,7 +200,7 @@ TCP 在实际通信中也会经过三次对话过程,因此,该过程又被
与三次握手协议相同,最后 + 1 是为了告知对方下次要传递的 SEQ 号。下面分析传输过程中数据包丢失的情况:
![](https://i.loli.net/2019/01/16/5c3ed371187a6.png)
![](images/5c3ed371187a6.png)
上图表示了通过 SEQ 1301 数据包向主机 B 传递 100 字节数据。但中间发生了错误,主机 B 未收到,经过一段时间后,主机 A 仍然未收到对于 SEQ 1301 的 ACK 的确认因此试着重传该数据包。为了完成该数据包的重传TCP 套接字启动计时器以等待 ACK 应答。若相应计时器发生超时Time-out!)则重传。
@@ -215,7 +215,7 @@ TCP 套接字的结束过程也非常优雅。如果对方还有数据需要传
先由套接字 A 向套接字 B 传递断开连接的信息,套接字 B 发出确认收到的消息,然后向套接字 A 传递可以断开连接的消息,套接字 A 同样发出确认消息。
![](https://i.loli.net/2019/01/16/5c3ed7503c18c.png)
![](images/5c3ed7503c18c.png)
图中数据包内的 FIN 表示断开连接。也就是说,双方各发送 1 次 FIN 消息后断开连接。此过程经历 4 个阶段因此又称四次握手Four-way handshaking。SEQ 和 ACK 的含义与之前讲解的内容一致,省略。图中,主机 A 传递了两次 ACK 5001也许这里会有困惑。其实第二次 FIN 数据包中的 ACK 5001 只是因为接收了 ACK 消息后未接收到的数据重传的。