久々のTCPネタ。 TCPのRSTについてこの記事でも簡単に触れた。 このRSTがどのようなタイミングで送信されるかというと、OSのソケットバッファに 受信データがまだ残っているにもかかわらず、アプリがcloseを実行したときに送信される(Linuxのお話)。 つまり、まだ受け取るべきデータが残っているにもかかわらず、有無を言わさずアプリが closeを実行してきたので、これは異常な状態だ、ということでRSTを送信し、 その受け取るべきデータを送ってきた送信者側に、「もうデータは送らないでくれ」と伝えたいのである。 さて、これを踏まえて考えると、実は下記のようなケースで問題が発生する。 マシンA(HTTPクライアント)はHTTP POSTのヘッダ(仮に1024バイトとする)とHTTP POSTのボディ(仮に8192バイトとする)をマシンB(HTTPサーバ)に送信した。 マシンBのOSは、9