Không có phản hồi với một số gói SYN khi dấu thời gian được bật


9

Tôi có một máy chủ TCP đang nghe trên một máy ("máy chủ") đang chạy Ubuntu 12.04.3 (kernel 3.8.0-31-generic). Nó nhận được kết nối từ 2 máy khách khác nhau. Máy A đang chạy Ubuntu 12.04.4 (3.11.0-17-generic) và máy B đang chạy Ubuntu 11.10 (3.0.0-32-server).

Nếu dấu thời gian TCP được bật trên máy chủ (sysctl net.ipv4.tcp_timestamp = 1) thì đôi khi các gói SYN từ máy A bị "bỏ qua". Sử dụng tcpdump trên máy chủ (ở chế độ không bừa bãi) tôi có thể thấy các SYN đến OK và với tổng kiểm tra chính xác - không có phản hồi - không có SYN / ACK và không RST. Máy A truyền lại SYN một số lần trước khi bỏ cuộc. Phần mềm máy khách đang chạy trên máy A (wget trong trường hợp này) ngay lập tức thử lại với một kết nối mới và thành công, nhận được một SYN / ACK ngay lập tức.

Máy B không có vấn đề gì với cùng một máy chủ và lưu lượng của nó trông bình thường - nó cũng sử dụng các tùy chọn TCP giống như máy A (từ những gì tôi thấy từ các tệp chụp). Vô hiệu hóa dấu thời gian TCP trên máy chủ làm cho mọi thứ hoạt động như bình thường.

Tuy nhiên, dấu thời gian trong các gói SYN bị bỏ qua dường như là hợp lệ đối với tôi vì vậy tôi không chắc tại sao chúng lại gây ra sự cố hoặc nếu chúng là nguyên nhân cơ bản.

Tôi đã đặt một pcap anonyimised ở đây https://www.dropbox.com/s/onimdkbyx9lim70/server-machineA.pcap . Nó được chụp trên máy chủ (10.76.0.74) hiển thị máy A (10.4.0.76) thực hiện thành công HTTP GET (gói 1 đến 10) và sau đó 1 giây sau đó cố gắng tìm lại cùng một URL (gói 11 đến 17) có các SYN của nó bị bỏ qua. Gói 18 đến 27 là một thành công khác.

Tôi nghi ngờ đây là một vấn đề tương tự như được mô tả trong " Tại sao máy chủ không gửi gói SYN / ACK để phản hồi gói SYN " và trong khi vô hiệu hóa dấu thời gian là một cách giải quyết tôi muốn hiểu điều gì đang xảy ra. Đây chỉ là một lỗi?

Không có tường lửa cục bộ đang chạy. Máy chủ xử lý khá nhiều kết nối TCP (khoảng 32K mỗi lần) nhưng có nhiều bộ nhớ / CPU miễn phí. Tại thời điểm kiểm tra được hiển thị trong pcap, không có kết nối TCP nào khác giữa máy A và máy chủ. Không có dấu hiệu nào cho thấy hàng đợi chấp nhận của ứng dụng máy chủ đột nhiên bị lấp đầy (ngoài ra điều đó sẽ ảnh hưởng đến cả hai máy khách mà tôi cho là). Vì các gói tin có vẻ ổn trong một pcap được lấy trên máy chủ, có vẻ như một thiết bị mạng can thiệp đang phá vỡ mọi thứ.

Ban đầu tôi đã đăng bài này trên các diễn đàn ubfox nhưng nhìn chung đây có thể là một địa điểm thích hợp hơn. Hy vọng cho khoản vay của một đầu mối.

Câu trả lời:


5

Trong trường hợp của tôi, lệnh sau đã khắc phục sự cố với các câu trả lời SYN / ACK bị thiếu từ máy chủ Linux:

sysctl -w net.ipv4.tcp_tw_recycle=0

Tôi nghĩ nó đúng hơn là vô hiệu hóa dấu thời gian TCP, vì dấu thời gian TCP là hữu ích sau tất cả (PAWS, chia tỷ lệ cửa sổ, v.v.).

Tài liệu về các tcp_tw_recycletrạng thái rõ ràng không khuyến khích kích hoạt nó, vì nhiều bộ định tuyến NAT bảo toàn dấu thời gian và do đó PAWS khởi động, vì dấu thời gian từ cùng một IP không nhất quán.

   tcp_tw_recycle (Boolean; default: disabled; since Linux 2.4)
          Enable fast recycling of TIME_WAIT sockets.  Enabling this
          option is not recommended for devices communicating with the
          general Internet or using NAT (Network Address Translation).
          Since some NAT gateways pass through IP timestamp values, one
          IP can appear to have non-increasing timestamps.  See RFC 1323
          (PAWS), RFC 6191.

Tất cả các máy trong câu hỏi đã được nâng cấp và tôi tin rằng vấn đề không còn xảy ra nữa nên tôi không thể thử ngay bây giờ. Trong trường hợp này, không có NAT liên quan giữa máy khách và máy chủ. Nó vẫn có vẻ nghi ngờ lỗi như tôi.
dùng133831
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.