Các tùy chọn duy trì không hoạt động trên Linux cho kết nối đi


8

Có ai biết nếu Linux hỗ trợ các tùy chọn ổ cắm duy trì trên kết nối đi không?

Tôi đã thực hiện kết nối đi với các tùy chọn duy trì nhưng netstat --timers hiển thị (Tôi giả sử bộ hẹn giờ tắt):

tcp 0 0 localhost.localdomain:44307 172.16.0.15:2717 ESTABLISHED off (0.00/0/0)

Kết nối đến với các tùy chọn ổ cắm tương tự được áp dụng hiển thị:

tcp 0 0 172.16.0.3:8585 localhost.localdomain:21527 ESTABLISHED keepalive (29.26/0/0)

Tôi ước tôi có thể thấy các tùy chọn ổ cắm nhưng không ss hoặc lsof sẽ hiển thị cho chúng.

Câu trả lời:


7

Trước tiên, bạn cần đảm bảo rằng TCP keepalive được bật trên hệ thống của bạn. Bạn có thể kiểm tra các cài đặt mặc định như thế này:

# sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_probes net.ipv4.tcp_keepalive_intvl
net.ipv4.tcp_keepalive_time = 7200
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 75

Sau đó, đảm bảo rằng bạn đang đặt nó đúng trong mã của bạn. Nó sẽ trông giống như thế này:

int optval = 1;
if (setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(optval)) < 0) {
    perror("setsockopt()");
    close(s);
    exit(EXIT_FAILURE);
}

Trên hệ thống của tôi khi tôi sử dụng mã trên để đặt SO_KEEPALIVE ở cả hai bên tôi thấy:

tcp        0      0 127.0.0.1:48591         127.0.0.1:5555          ESTABLISHED keepalive (6958.37/0/0)
tcp        0      0 127.0.0.1:5555          127.0.0.1:48591         ESTABLISHED keepalive (6958.37/0/0)

Và sau đó tôi đã xác minh với wireshark rằng bản lưu giữ NOPđã được gửi đi.

Thông tin chi tiết có thể được tìm thấy trong TCP Keepalive HOWTO .


Cảm ơn về thông tin này, nhưng tôi đã có những bộ đó và tôi đang thiết lập nó giống hệt như bạn, tôi chỉ không đặt chế độ bảo mật trong netstat.
James Hartig

1
Trong trường hợp đó, hãy đăng thêm thông tin về hệ thống của bạn và mã nguồn (hoặc trường hợp thử nghiệm được đơn giản hóa) để tôi có thể thử tái tạo vấn đề, nếu không sẽ không có nhiều thứ để gỡ lỗi ở đây.
aculich

@aculich là đúng, nếu bạn đã thiết lập hệ thống, thì ứng dụng của bạn không sử dụng đúng cách. Tôi khuyên bạn nên đọc TCP Keepalive HOWTO theo đề xuất của aculich hoặc đăng mã nguồn của ứng dụng hoặc thử thực thi một lsof để xem điều gì xảy ra
tmow

0

cài đặt hệ thống máy khách:

sudo /sbin/sysctl -a|grep keep
net.ipv4.tcp_keepalive_time = 20
net.ipv4.tcp_keepalive_probes = 1
net.ipv4.tcp_keepalive_intvl = 1

khách hàng giữ tcpdump

sudo /usr/sbin/tcpdump  -nn -vv -i bond0 tcp and host 10.201.126.72 and port 8001
tcpdump: listening on bond0, link-type EN10MB (Ethernet), capture size 65535 bytes

nhưng không phải bất kỳ gói chụp nào có nghĩa là tcp_keepalive_time không hoạt động

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.