2016-01-20 13 views
5

Tôi có máy chủ apache chạy trên Ubuntu. Khách hàng kết nối và tải xuống một hình ảnh. Tôi cần trích xuất các ước lượng RTT cho kết nối TCP cơ bản. Có cách nào để làm việc này không? Có lẽ một cái gì đó giống như chạy stack tcp của tôi trong chế độ gỡ lỗi để có nó đăng nhập thông tin này ở đâu đó?Trích xuất ước lượng thời gian chuyến đi TCP (RTT) trên linux

Lưu ý rằng tôi không muốn chạy tcpdump và trích xuất RTT từ theo dõi được ghi lại! Tôi cần các ước tính RTT của ngăn xếp TCP (dường như đây là một phần của thông tin bạn có thể có với tùy chọn socket TCP_INFO). Về cơ bản cần một cái gì đó như tcpprob (kprobe) để chèn một cái móc và ghi RTT ước tính của kết nối TCP trên mỗi gói tin gửi đến (hoặc trên mọi thay đổi).

CẬP NHẬT:

Tôi tìm thấy một giải pháp. rtt, cửa sổ nghẽn và nhiều hơn nữa có thể được ghi lại bằng cách sử dụng tcpprobe. Tôi đã đăng câu trả lời bên dưới.

+0

http://stackoverflow.com/questions/16231600/fetching -the-tcp-rtt-in-linux – indiv

+0

Cảm ơn! Yeah Tôi quen thuộc với "ss", nhưng nó không chính xác những gì tôi cần vì nó sẽ cho tôi một mẫu rất thô của RTT. Tôi cần một cái gì đó như tcpprob (kprobe) để chèn một cái móc và ghi RTT ước tính của kết nối TCP trên mỗi gói dữ liệu đến (hoặc trên mọi thay đổi). – kakhkAtion

+2

Hmm. Các thuật toán kiểm soát tắc nghẽn Linux cũng là các mô-đun có thể cắm được trong thư mục 'net/ipv4 /'. Mỗi tính toán rtt khác nhau (và [reno] (http://lxr.free-electrons.com/source/net/ipv4/tcp_cong.c) không tính toán nó ở tất cả!), Vì vậy tôi nghĩ rằng bạn sẽ phải móc vào một triển khai cụ thể. Tôi thấy bạn đã gắn thẻ hình khối, vì vậy đó là [tcp_cubic.c] (http://lxr.free-electrons.com/source/net/ipv4/tcp_cubic.c). Tôi không nghĩ rằng có một phương pháp chung của việc nhận được rtt, nhưng tôi chắc chắn có thể sai ... – indiv

Trả lời

3

Điều này có thể được thực hiện bằng tcpprobe, mà là một mô-đun đó chèn một cái móc vào con đường chế biến tcp_recv sử dụng kprobe ghi lại trạng thái của một kết nối TCP để đáp ứng với các gói tin đến.

Hãy nói rằng bạn muốn thăm dò kết nối tcp trên cổng 443, bạn cần phải làm như sau:

sudo modprobe tcp_probe port=443 full=1 
sudo chmod 444 /proc/net/tcpprobe 
cat /proc/net/tcpprobe > /tmp/output.out & 
pid=$! 

đầy đủ = 1: đăng nhập vào mỗi gói ack nhận

đầy đủ = 0: chỉ đăng nhập vào các thay đổi chung cư (nếu bạn sử dụng đầu ra này có thể trống)

Bây giờ pid là quá trình găm đầu dò. Để dừng lại, chỉ cần giết chết quá trình này:

kill $pid 

Định dạng của output.out (theo source tại dòng 198):

[time][src][dst][length][snd_nxt][snd_una][snd_cwnd][ssthresh][snd_wnd][srtt][rcv_wnd] 
Các vấn đề liên quan