Update 计算机网络 - 传输层.md

补充服务器重启时 SO_REUSEADDR 的作用及与 SO_REUSEPORT 的区别。
This commit is contained in:
CyC2018
2026-11-04 22:39:58 +08:00
parent 68974bb287
commit 8f6f13683b
+2
View File
@@ -175,6 +175,8 @@ TIME_WAIT 出现在主动关闭的一方,本身是正常的状态,数量多
服务器主动关闭时 TIME_WAIT 留在服务器上,例如响应后关闭的 HTTP 短连接。这些连接共用监听端口,靠客户端的地址和端口区分,不消耗本地端口,只占少量内存;总数超过 tcp_max_tw_buckets 时,新进入 TIME_WAIT 的连接会被直接销毁。Nginx 这类代理既是服务器又向上游发起连接,排查时先确认是哪个方向的连接、哪一方先关闭。
服务重启时,留在服务器上的 TIME_WAIT 连接仍占着监听的端口,重新 bind() 会报 Address already in use,所以服务端程序一般在 bind() 之前设置 SO_REUSEADDR。Linux 要求先后两次 bind() 都设置了它,服务端每次启动时都设置即可。它只允许与非监听状态的旧连接共用同一个本地地址和端口,不能让两个套接字同时监听同一个地址和端口,那是 SO_REUSEPORT 的作用(socket(7))。
各状态的连接数可以这样统计:
```bash