るいすときのこの物語

オタクエンジニアの雑記

EdgerRouter v1.9.7にするとTCP Dup ACKが発生して、ネットワークが不安定になる


Edge Router ER-8 を使っているのですが 最新のファームウェア v1.9.7(hotfix-2)を使うと外部からアクセスするのに 40秒近くかかるようになったので共有として。

https://luispc.com/server/2017/05/10/9020

 

症状

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の差分が多すぎて辛い)。 時間があるときに見ていきたいと思います。

もし記事にミス等がありましたらコメントしてくださると助かります。