Edge Router ER-8 を使っているのですが
最新のファームウェア v1.9.7(hotfix-2)を使うと外部からアクセスするのに
40秒近くかかるようになったので共有として。
https://luispc.com/server/2017/05/10/9020
TOC
症状
EdgeRouter v1.9.7, v1.9.7-hotfix1, v1.9.7-hotfix2 いずれのファームウェアにアップデートをすると
ネットワークが不安定になるようになった。
TTFBが35秒程かかり、ロードが終わるのに40秒かかる現象になってしまった。
※TTFB – Time to First Byte
クライアントがHTTPリクエストを送信してからサーバーが返してクライアントが最初の1byteを取得するまでの時間
EdgeRouter <-> ロードバランサー <-> Webサーバー
上記構成で、ロードバランサーでパケットキャプチャをしてみた。
TCP Dup ACK が発生したのち、TCP Retransmission が頻発してます。
TCP Dup ACK とは
パケットロス等で、受信者が想定しているシーケンス番号より、大きな値のシーケンス番号が送信者から送られてくることがあります。
すると、受信者は自分が想定しているシーケンス番号をACK番号にセットしたACKを直ちに送信者に送ります。これがDupACKです。
http://troushoo.blog.fc2.com/blog-entry-111.html
今回の場合はサーバーが効率目的で一方的にパケットいくつかを送った結果、パケットロス等が原因で届かなかったためか、クライアントはACK=1
を期待してパケットを投げます。
しかし投げたパケットも届かなかったためか、もう1度ACK=1
を期待してパケットを投げる。
これが重複したACK = DUP(licate) Ack(nowledgement)
です。
TCP Retransmission とは
Seq#が進んでおらず、TCP Fast Retransmission, TCP Out-Of-Order, TCP Spurious Retransmission の
いずれにも該当しないパケット
http://milestone-of-se.nesuke.com/knowhow/wireshark-tcp-error/
今回の場合は、TCP Dup ACKを受け取ったサーバーが
再送のためTCP Retransmission
なパケットをクライアントに送ります。
しかし再送しまくってる(Seq=1)のにも関わらず、クライアントから返送がないため
9回も同じパケットをサーバーからクライアントに送信してます。(最後の9回目だけサイズが小さい)
No.144 で初めてクライアントから サーバーが送った Seq=1 + LEN=1452 を受け取ったよパケットが届きました。
その他のTCP Retransmissionなパケットも、No.147, 149で届いてることが確認できました。
EdgeRouter v1.9.1.1 では
直接的には原因は分からない(v1.9.1.1 と v1.9.7の差分が多すぎて辛い)。
時間があるときに見ていきたいと思います。
もし記事にミス等がありましたらコメントしてくださると助かります。