mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-11-07 13:24:10 +00:00
Update 计算机网络 - 传输层.md
补充服务器重启时 SO_REUSEADDR 的作用及与 SO_REUSEPORT 的区别。
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user