Làm thế nào để hết thời gian kết nối TCP


20

Đối với các mô phỏng thảm họa mạng của môi trường máy chủ của chúng tôi, chúng tôi đang tìm cách để cố tình hết thời gian chờ vào ổ cắm TCP. Có cách nào đơn giản cho các ổ cắm hiện có? Ngoài ra, chương trình thử nghiệm C nhỏ sẽ là một lợi thế.

Chúng tôi đã thử đặt giao diện mạng trong quá trình đọc bộ đệm TCP và đọc từ các tài nguyên được gắn kết bị ngắt kết nối (samba).

Máy chủ thử nghiệm là Ubuntu 12.04.4.

Câu trả lời:


19

Để gây ra một kết nối thoát đến thời gian chờ, bạn có thể sử dụng iptables. Chỉ cần kích hoạt một DROPquy tắc trên cổng mà bạn muốn vô hiệu hóa. Vì vậy, để mô phỏng thời gian chờ cho máy chủ Samaba của bạn, trong khi kết nối đang hoạt động, hãy thực hiện các thao tác sau trên máy chủ:

sudo iptables -A INPUT -p tcp --dport 445 -j DROP

Các DROPmục tiêu sẽ không trả lời với một RSTgói hoặc ICMPlỗi để người gửi của gói tin. Máy khách sẽ ngừng nhận các gói từ máy chủ và cuối cùng là hết thời gian.

Tùy thuộc vào nếu / cách bạn đã iptablescấu hình, bạn có thể muốn chèn quy tắc cao hơn vào INPUTquy tắc.


Đã thử điều này bằng cách sử dụng netcat (để nghe / gửi dữ liệu) và chờ đợi mãi mãi ... không có thời gian chờ: / Và tôi có thể xác nhận dữ liệu đã bị hủy. Tôi thậm chí đã đổi /proc/sys/net/ipv4/tcp_keepalive_timethành một số rất nhỏ
er453r

@ er453r thử bật đầu ra dài dòng ncat -vđể xem chính xác những gì ncatđang làm. Tôi đã mất 2m7.291 trên bản cài đặt Ubuntu 12.04 vanilla để hết thời gian
Lạch

đúng - tôi đã không gửi bất cứ thứ gì qua ổ cắm trong lần kiểm tra đầu tiên đó. Cuối cùng tôi đã thành thạo thời gian chờ và mô tả chúng chi tiết bên dưới :)
er453r

16

Câu trả lời đầu tiên là chính xác, nhưng tôi đã khám phá cách các thời gian chờ này hoạt động, vì vậy bạn có thể quan sát và kiểm tra chúng (đừng quên chặn cổng!).

Có 4 tham số kernel thú vị nhất liên quan đến thời gian chờ TCP:

/proc/sys/net/ipv4/tcp_keepalive_time
/proc/sys/net/ipv4/tcp_keepalive_intvl
/proc/sys/net/ipv4/tcp_keepalive_probes
/proc/sys/net/ipv4/tcp_retries2

Bây giờ có 2 kịch bản:

  1. Ổ cắm được mở và cố gắng truyền - sau đó (nếu không có phản hồi từ phía bên kia), hệ thống sẽ thử lại tcp_retries2lần. Với giá trị nghỉ hưu mặc định, phải mất khoảng hơn 2 phút và ổ cắm hết thời gian.

  2. Các ổ cắm được mở và nhàn rỗi - sau đó giới hạn giữ là thú vị. Với một hệ thống ổ cắm nhàn rỗi sẽ đợi tcp_keepalive_timevài giây và sau đó, tcp_keepalive_probeslần thử gửi TCP KEEPALIVE trong khoảng thời gian là tcp_keepalive_intvlvài giây. Và chỉ sau đó tất cả các lỗi ổ cắm hết thời gian.


1
đồng thời, bạn có thể theo dõi thời gian chờ này bằng cách sử dụngnetstat -o
er453r
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.