diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index f5d3b9b2..b5d61b61 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,7 +13,7 @@ "state": { "type": "markdown", "state": { - "file": "docs/Tips/API.md", + "file": "docs/Network/运输层:TCP.md", "mode": "source", "source": false } @@ -48,7 +48,7 @@ "state": { "type": "search", "state": { - "query": "PG", + "query": "", "matchingCase": true, "explainSearch": false, "collapseAll": false, @@ -85,7 +85,7 @@ "state": { "type": "backlink", "state": { - "file": "docs/Tips/API.md", + "file": "docs/Network/运输层:TCP.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -102,7 +102,7 @@ "state": { "type": "outgoing-link", "state": { - "file": "docs/Tips/API.md", + "file": "docs/Network/运输层:TCP.md", "linksCollapsed": false, "unlinkedCollapsed": true } @@ -125,7 +125,7 @@ "state": { "type": "outline", "state": { - "file": "docs/Tips/API.md" + "file": "docs/Network/运输层:TCP.md" } } } @@ -134,7 +134,8 @@ } ], "direction": "horizontal", - "width": 300 + "width": 300, + "collapsed": true }, "left-ribbon": { "hiddenItems": { @@ -149,37 +150,40 @@ }, "active": "044546147249fa2a", "lastOpenFiles": [ - "docs/Tips/小记.md", - "docs/Tips/API.md", - "docs/Network/运输层:TCP.md", + "docs/LocalFile/Picture/TCP连接建立和半关闭终止的状态图.png", + "docs/MySQL/逻辑备份 MySQL.md", + "docs/MySQL/物理备份 MySQL.md", + "docs/LocalFile/Picture/求解算数表达式的值.jpg", + "docs/LocalFile/Picture/TCP建立连接三向握手.png", + "docs/LocalFile/Picture/TCP中止连接三向握手.png", "docs/LocalFile/Picture/TCP-TCP中止连接半关闭.png", - "docs/Linux/Linux 清理 PG WAL 日志.md", - "docs/Tips/开发规范.md", - "docs/Tips/深度学习.md", "docs/Linux/磁盘分区挂载.md", + "docs/Network/运输层:TCP.md", + "docs/Network/Network Tips.md", + "docs/Network/运输层:UDP.md", + "docs/stylesheets/extra.css", + "mkdocs.yml", "docs/Linux/curl.md", - "docs/LocalFile/Picture/TCP建立连接三向握手.png", - "docs/Network/网络层:IP.md", + "docs/LocalFile/Picture/TCP首部.png", + "docs/LocalFile/Picture/计算机网络-TCP首部.drawio.png", + "docs/OS/OS Tips.md", + "docs/Java/Tips.md", "docs/Kafka/Kafka ACL.md", "docs/Kafka/Kafka 主题与分区.md", "docs/Kafka/Kafka 集群搭建.md", - "docs/K8S/安装 Nginx Ingress.md", - "docs/K8S/安装 Kuboard 集群管理界面.md", - "docs/K8S/安装 Kubernetes 集群.md", - "docs/Java/Tips.md", - "docs/Docker/安装 Docker.md", - "docs/Docker/镜像操作.md", - "docs/Arts/侠客行-李白.md", - "docs/Arts/满江红-岳飞.md", - "docs/Algorithms/Base64 算法.md", - "docs/Algorithms/数据结构:图.md", - "docs/Linux/VIM.md", - "docs/Algorithms/求解算数表达式的值.md", - "docs/MySQL/逻辑备份 MySQL.md", - "mkdocs.yml", - "docs/stylesheets/extra.css", - "docs/LocalFile/Picture/TCP首部.png", - "docs/LocalFile/Picture/计算机网络-TCP首部.drawio.png", + "docs/Linux/Linux Tips.md", + "docs/Java/微服务优雅停机.md", + "docs/Java/微服务架构.md", + "docs/Python/第 4 章:流程控制.md", + "docs/Python/第 2 章:算术、字符串与变量.md", + "docs/Reading/2021.md", + "docs/Reading/2022.md", + "docs/Reading/2023.md", + "docs/Reading/读书计划.md", + "docs/Linux/Linux 清理 PG WAL 日志.md", + "docs/Tips/开发规范.md", + "docs/DM/达梦安装.md", + "docs/Network/网络层:IP.md", "overrides/partials/footer.html", "overrides/partials/comments.html", "docs/index.html", @@ -187,6 +191,6 @@ "docs/LocalFile/favicon.svg", "template", "docs/LocalFile/Picture/OSTips.png", - "docs/LocalFile/Picture/求解算数表达式的值.jpg" + "docs/LocalFile/Picture/求解算数表达式的值-1.jpg" ] } \ No newline at end of file diff --git "a/docs/LocalFile/Picture/TCP\350\277\236\346\216\245\345\273\272\347\253\213\345\222\214\345\215\212\345\205\263\351\227\255\347\273\210\346\255\242\347\232\204\347\212\266\346\200\201\345\233\276.png" "b/docs/LocalFile/Picture/TCP\350\277\236\346\216\245\345\273\272\347\253\213\345\222\214\345\215\212\345\205\263\351\227\255\347\273\210\346\255\242\347\232\204\347\212\266\346\200\201\345\233\276.png" new file mode 100644 index 00000000..3eed9ab7 Binary files /dev/null and "b/docs/LocalFile/Picture/TCP\350\277\236\346\216\245\345\273\272\347\253\213\345\222\214\345\215\212\345\205\263\351\227\255\347\273\210\346\255\242\347\232\204\347\212\266\346\200\201\345\233\276.png" differ diff --git "a/docs/Network/\350\277\220\350\276\223\345\261\202\357\274\232TCP.md" "b/docs/Network/\350\277\220\350\276\223\345\261\202\357\274\232TCP.md" index a798f69e..ca3684d5 100644 --- "a/docs/Network/\350\277\220\350\276\223\345\261\202\357\274\232TCP.md" +++ "b/docs/Network/\350\277\220\350\276\223\345\261\202\357\274\232TCP.md" @@ -174,17 +174,27 @@ FIN 报文段可以包含客户端发送的最后一块数据。或者仅仅只 | 状态 | 说明 | | ----------- | ----------------------------- | -| CLOSED | 没有连接。 | -| LISTEN | 收到了被动打开,等待 SYN。 | -| SYN-SENT | 已发送了 SYN,等待 ACK。 | -| SYN-RCVD | 已发送了 SYN+ACK,等待 ACK。 | -| ESTABLISHED | 连接建立,数据传送在进行。 | -| FIN-WAIT1 | 第一个 FIN 已发送,等待 ACK。 | -| FIN-WAIT2 | 对第一个 FIN 的 ACK 已收到,等待第二个 FIN。 | -| CLOSE-WAIT | 收到第一个 FIN,已发送 ACK,等待应用程序关闭。 | -| TIME-WAIT | 收到第二个 FIN,已发送 ACK,等待 2MSL 超时。 | -| LAST-ACK | 已发送第二个 FIN,等待 ACK。 | -| CLOSING | 双方都以决定同时关闭。 | +| `CLOSED` | 没有连接。 | +| `LISTEN` | 收到了被动打开,等待 SYN。 | +| `SYN-SENT` | 已发送了 SYN,等待 ACK。 | +| `SYN-RCVD` | 已发送了 SYN+ACK,等待 ACK。 | +| `ESTABLISHED` | 连接建立,数据传送在进行。 | +| `FIN-WAIT1` | 第一个 FIN 已发送,等待 ACK。 | +| `FIN-WAIT2` | 对第一个 FIN 的 ACK 已收到,等待第二个 FIN。 | +| `CLOSE-WAIT` | 收到第一个 FIN,已发送 ACK,等待应用程序关闭。 | +| `TIME-WAIT` | 收到第二个 FIN,已发送 ACK,等待 2MSL 超时。 | +| `LAST-ACK` | 已发送第二个 FIN,等待 ACK。 | +| `CLOSING` | 双方都以决定同时关闭。 | + +下图展示了 TCP 建立连接和半关闭终止的时间线图。 +![](../LocalFile/Picture/TCP连接建立和半关闭终止的状态图.png) +**客户端状态** + +客户进程向 TCP 发出命令,请求连接某个特定的套接字地址,这就称为主打开。于是 TCP 发出一个 SYN 报文段,进入到 SYN-SENT 状态。 + +在收到 SYN+ACK 报文段后,TCP 发送 ACK 报文段,并进入 ESTABLISHED 状态。此后数据开始传送和确认。 + +当客户没有更多的数据要传送时,就发出称为主动关闭的命令。于是 TCP 发送 FIN 报文段,并进入到 FIN-WAIT-1 状态。 ## tcpdump