Trong một trang web của khách hàng, nhóm mạng đã thêm một tường lửa giữa máy khách và máy chủ. Điều này đang khiến các kết nối nhàn rỗi bị ngắt kết nối sau khoảng 40 phút không sử dụng. Dân mạng nói rằng tường lửa không có thời gian chờ kết nối nhàn rỗi, nhưng thực tế là các kết nối nhàn rỗi bị hỏng.
Để giải quyết vấn đề này, trước tiên chúng tôi đã định cấu hình máy chủ (máy Linux) với các thủ tục TCP được bật với tcp_keepalive_time = 300, tcp_keepalive_intvl = 300 và tcp_keepalive_probes = 30000. Điều này hoạt động, và các kết nối có thể tồn tại trong nhiều ngày hoặc nhiều hơn. Tuy nhiên, chúng tôi cũng muốn máy chủ phát hiện các máy khách đã chết và hủy kết nối, vì vậy chúng tôi đã thay đổi cài đặt thành time = 300, intvl = 180, thăm dò = 10, nghĩ rằng nếu máy khách thực sự còn sống, máy chủ sẽ thăm dò cứ sau 300 giây (5 phút) và khách hàng sẽ phản hồi bằng ACK và điều đó sẽ khiến tường lửa không xem đây là một kết nối nhàn rỗi và giết chết nó. Nếu máy khách đã chết, sau 10 lần thăm dò, máy chủ sẽ hủy kết nối. Trước sự ngạc nhiên của chúng tôi, các kết nối nhàn rỗi nhưng còn sống bị giết sau khoảng 40 phút như trước.
Wireshark chạy ở phía máy khách cho thấy không có bất kỳ sự bảo vệ nào giữa máy chủ và máy khách, ngay cả khi bật chế độ bảo quản trên máy chủ.
Điều gì có thể xảy ra ở đây?
Nếu cài đặt cố định trên máy chủ là time = 300, intvl = 180, probes = 10, tôi sẽ hy vọng rằng nếu máy khách còn sống nhưng không hoạt động, máy chủ sẽ gửi các đầu dò cố định cứ sau 300 giây và để yên kết nối, và nếu Máy khách đã chết, nó sẽ gửi một cái sau 300 giây, sau đó thêm 9 đầu dò sau mỗi 180 giây trước khi tắt kết nối. Tôi có đúng không
Một khả năng là tường lửa bằng cách nào đó chặn các đầu dò cố định từ máy chủ và không chuyển chúng cho máy khách, và thực tế là nó có một đầu dò khiến nó nghĩ rằng kết nối đang hoạt động. Đây có phải là hành vi phổ biến cho một tường lửa? Chúng tôi không biết loại tường lửa nào có liên quan.
Máy chủ là nút Teradata và kết nối là từ tiện ích máy khách Teradata đến máy chủ cơ sở dữ liệu, cổng 1025 ở phía máy chủ, nhưng chúng tôi đã thấy vấn đề tương tự với kết nối SSH nên chúng tôi nghĩ rằng nó ảnh hưởng đến tất cả các kết nối TCP.