mirror of
https://github.com/riba2534/TCP-IP-NetworkNote.git
synced 2026-05-07 14:01:51 +08:00
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:
@@ -81,7 +81,7 @@ gcc My_op_server.c -o myserver
|
||||
|
||||
结果:
|
||||
|
||||

|
||||

|
||||
|
||||
其实主要是对程序的一点点小改动,只需要在客户端固定好发送的格式,服务端按照固定格式解析,然后返回结果即可。
|
||||
|
||||
@@ -108,7 +108,7 @@ gcc op_server.c -o opserver
|
||||
|
||||
结果:
|
||||
|
||||

|
||||

|
||||
|
||||
### 5.2 TCP 原理
|
||||
|
||||
@@ -118,7 +118,7 @@ TCP 套接字的数据收发无边界。服务器即使调用 1 次 write 函数
|
||||
|
||||
实际上,write 函数调用后并非立即传输数据,read 函数调用后也并非马上接收数据。如图所示,write 函数调用瞬间,数据将移至输出缓冲;read 函数调用瞬间,从输入缓冲读取数据。
|
||||
|
||||

|
||||

|
||||
|
||||
I/O 缓冲特性可以整理如下:
|
||||
|
||||
@@ -158,7 +158,7 @@ TCP 套接字从创建到消失所经过的过程分为如下三步:
|
||||
|
||||
TCP 在实际通信中也会经过三次对话过程,因此,该过程又被称为 **Three-way handshaking(三次握手)**。接下来给出连接过程中实际交换的信息方式:
|
||||
|
||||

|
||||

|
||||
|
||||
套接字是全双工方式工作的。也就是说,它可以双向传递数据。因此,收发数据前要做一些准备。首先请求连接的主机 A 要给主机 B 传递以下信息:
|
||||
|
||||
@@ -190,7 +190,7 @@ TCP 在实际通信中也会经过三次对话过程,因此,该过程又被
|
||||
|
||||
通过第一步三次握手过程完成了数据交换准备,下面就开始正式收发数据,其默认方式如图所示:
|
||||
|
||||

|
||||

|
||||
|
||||
图上给出了主机 A 分成 2 个数据包向主机 B 传输 200 字节的过程。首先,主机 A 通过 1 个数据包发送 100 个字节的数据,数据包的 SEQ 为 1200。主机 B 为了确认这一点,向主机 A 发送 ACK 1301 消息。
|
||||
|
||||
@@ -200,7 +200,7 @@ TCP 在实际通信中也会经过三次对话过程,因此,该过程又被
|
||||
|
||||
与三次握手协议相同,最后 + 1 是为了告知对方下次要传递的 SEQ 号。下面分析传输过程中数据包丢失的情况:
|
||||
|
||||

|
||||

|
||||
|
||||
上图表示了通过 SEQ 1301 数据包向主机 B 传递 100 字节数据。但中间发生了错误,主机 B 未收到,经过一段时间后,主机 A 仍然未收到对于 SEQ 1301 的 ACK 的确认,因此试着重传该数据包。为了完成该数据包的重传,TCP 套接字启动计时器以等待 ACK 应答。若相应计时器发生超时(Time-out!)则重传。
|
||||
|
||||
@@ -215,7 +215,7 @@ TCP 套接字的结束过程也非常优雅。如果对方还有数据需要传
|
||||
|
||||
先由套接字 A 向套接字 B 传递断开连接的信息,套接字 B 发出确认收到的消息,然后向套接字 A 传递可以断开连接的消息,套接字 A 同样发出确认消息。
|
||||
|
||||

|
||||

|
||||
|
||||
图中数据包内的 FIN 表示断开连接。也就是说,双方各发送 1 次 FIN 消息后断开连接。此过程经历 4 个阶段,因此又称四次握手(Four-way handshaking)。SEQ 和 ACK 的含义与之前讲解的内容一致,省略。图中,主机 A 传递了两次 ACK 5001,也许这里会有困惑。其实,第二次 FIN 数据包中的 ACK 5001 只是因为接收了 ACK 消息后未接收到的数据重传的。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user