Skip to content

Commit

Permalink
更新 TCP 协议的学习。
Browse files Browse the repository at this point in the history
  • Loading branch information
jacky committed Apr 8, 2024
1 parent be2e87e commit 7156a36
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 43 deletions.
68 changes: 36 additions & 32 deletions .obsidian/workspace.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"state": {
"type": "markdown",
"state": {
"file": "docs/Tips/API.md",
"file": "docs/Network/运输层:TCP.md",
"mode": "source",
"source": false
}
Expand Down Expand Up @@ -48,7 +48,7 @@
"state": {
"type": "search",
"state": {
"query": "PG",
"query": "",
"matchingCase": true,
"explainSearch": false,
"collapseAll": false,
Expand Down Expand Up @@ -85,7 +85,7 @@
"state": {
"type": "backlink",
"state": {
"file": "docs/Tips/API.md",
"file": "docs/Network/运输层:TCP.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
Expand All @@ -102,7 +102,7 @@
"state": {
"type": "outgoing-link",
"state": {
"file": "docs/Tips/API.md",
"file": "docs/Network/运输层:TCP.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
}
Expand All @@ -125,7 +125,7 @@
"state": {
"type": "outline",
"state": {
"file": "docs/Tips/API.md"
"file": "docs/Network/运输层:TCP.md"
}
}
}
Expand All @@ -134,7 +134,8 @@
}
],
"direction": "horizontal",
"width": 300
"width": 300,
"collapsed": true
},
"left-ribbon": {
"hiddenItems": {
Expand All @@ -149,44 +150,47 @@
},
"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",
"docs/LocalFile/Picture/用户数据报的格式.png",
"docs/LocalFile/favicon.svg",
"template",
"docs/LocalFile/Picture/OSTips.png",
"docs/LocalFile/Picture/求解算数表达式的值.jpg"
"docs/LocalFile/Picture/求解算数表达式的值-1.jpg"
]
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
32 changes: 21 additions & 11 deletions docs/Network/运输层:TCP.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down

0 comments on commit 7156a36

Please sign in to comment.