12. TCP 的になぜ TIME_WAIT はあるのか
- 理由は二つあって、一つは
a. FIN 受けた側(Passive Close)側が 、 FIN 送った
(Active Close)側に FIN+ACK を返して、 LAST_ACK
に遷移した後
b. Active Close 側が FIN+ACK への ACK を Passive
Close 側に返したんだけど、 packet 落ちても
c. Active Close 側が TIME_WAIT で待ってれば、
Passive Close 側が FIN+ACK 再送すれば、Active
Close 側がACK再送できる(ACK来たら LAST_ACK
から、 直ちに CLOSED に遷移できる)
14. TCP 的になぜ TIME_WAIT はあるのか
- もう一つは
a. Active Close 側が送信した packet を、Passive Close
側が、(packet 落ちるかなんかして)受信できてない状
態になって
b. その後すぐまた connect(2)し、同じ送信元 {ip,port} と
送信先 {ip,port} のセットで通信がはじまって
c. a. で受信できてなかった packet がたまたま遅れてやっ
てきて、それが TCP の sequence number 的にかぶっ
てて packet が受けられてしまうと不味い