質問編集履歴
1
頂いた内容を元に追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -32,10 +32,42 @@
|
|
32
32
|
|
33
33
|
|
34
34
|
|
35
|
+
# (追加)調べた上でなおわからない事
|
35
36
|
|
36
37
|
|
37
38
|
|
39
|
+
疑問: プロセスが過負荷になると、なぜSYN_RECVで止まるのか?
|
38
40
|
|
39
|
-
---
|
40
41
|
|
42
|
+
|
43
|
+
synが来た時のOSとプロセスの動作
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
1. apacheがシステムコールでbindする
|
48
|
+
|
49
|
+
2. apacheがシステムコールでlistenする
|
50
|
+
|
51
|
+
3. OSがsynを受けると、syn backlogにキューイング ★サーバのステータス:SYN_RECV
|
52
|
+
|
53
|
+
4. 3way handshakeを終えると、backlogにキューイング ★サーバのステータス:ESTABLISHED
|
54
|
+
|
55
|
+
5. システムコールでaccept、プロセスにファイルディスクリプタを返す
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
これが正しいとすると、3から4になるのにどうしてプロセスの状態が影響するのかよくわかりません。
|
60
|
+
|
41
|
-
|
61
|
+
OSだけで完結しているように見えるので。
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
もしかして、acceptしてプロセスが受け取るまで、ESTABLISHEDにならないのでしょうか?
|
66
|
+
|
67
|
+
そうだとしたら、SYN_SENTで止まる気もしますが。
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
自分の理解でのTCPのステータスの順番(サーバ側側)
|
72
|
+
|
73
|
+
SYN_RECV => SYN_SENT => ESTABLISHED
|