Đo độ trễ mạng (Linux)


8

Tôi muốn đo độ trễ mạng cho yêu cầu SNMP GET. Có một công cụ dòng lệnh miễn phí timecó thể được sử dụng để tìm số liệu thống kê thời gian cho các lệnh khác nhau. Ví dụ, nó có thể được sử dụng snmpgettheo cách sau:

$ time snmpget -v 2c -c public 192.168.1.3 .1.3.6.1.2.1.2.2.1.10.2
IF-MIB::ifInOctets.2 = Counter32: 112857973

real    0m0.162s
user    0m0.069s
sys 0m0.005s

Theo hướng dẫn, thống kê bao gồm:

  • thời gian thực trôi qua giữa việc gọi và chấm dứt,

  • thời gian CPU của người dùng (tổng của các
    giá trị tms_utime và tms_cutime trong một tms cấu trúc được trả về theo
    thời gian (2)),

  • thời gian CPU hệ thống (tổng của các
    giá trị tms_stime và tms_cstime trong một tms cấu trúc được trả về theo
    thời gian (2)).

Như bạn thấy, không có tùy chọn nào trong số này cho phép đo thời gian trễ mạng thực (với các thống kê thời gian thực hiện chương trình khác bị loại trừ). Có cách nào để làm như vậy? Có lẽ không sử dụng công cụ thời gian, mà là một số hack nhân?

Tôi muốn hỏi, trước khi tôi bắt đầu viết chương trình của riêng mình.

Cảm ơn, Piotr

Câu trả lời:


5

Các tcpdump(8)chương trình của -tttlá cờ có thể chỉ là những gì bạn cần:

00:00:00.000031 IP haig.mdns > 224.0.0.251.mdns: 0 PTR (QM)? 1.0.168.192.in-addr.arpa. (42)
00:00:01.897031 IP haig.45240 > stackoverflow.com.www: Flags [F.], seq 866615166, ack 62506321, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000030 IP haig.45242 > stackoverflow.com.www: Flags [F.], seq 853537650, ack 61102072, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000019 IP haig.45243 > stackoverflow.com.www: Flags [F.], seq 863535366, ack 62086489, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0

Dấu thời gian ở đầu các dòng hiển thị thời gian tính bằng micro giây kể từ gói trước. Bằng cách đưa ra một số lượng khác nhau -ttrên dòng lệnh, bạn có thể nhận được thời gian tuyệt đối, thời gian tương đối kể từ gói đầu tiên hoặc thời gian tương đối giữa các gói.

Tôi vừa hiển thị mdns và lưu lượng truy cập web ngẫu nhiên vì đó là thứ dễ tìm thấy trên hệ thống của tôi; bạn có thể dễ dàng lọc lưu lượng SNMP tcpdump(8)để chỉ nhận các gói bạn quan tâm. (Đó sẽ là một ý tưởng hay, vì việc bỏ tất cả lưu lượng truy cập từ các hệ thống bận rộn có thể tạo ra một tải trọng lớn .)


-tttttcũng có thể hữu ích - thay vì hiển thị micro giây kể từ gói cuối cùng, nó hiển thị micro giây kể từ khi bắt đầu theo dõi.
Alex D

8

Hãy thử ping:

$ ping -U 192.168.1.3

Từ hướng dẫn ping:

-U In độ trễ đầy đủ từ người dùng đến người dùng (hành vi cũ). Thông thường ping in thời gian khứ hồi mạng, có thể khác nhau do lỗi DNS.


Cảm ơn câu trả lời, nhưng tôi muốn đo độ trễ cụ thể cho yêu cầu nhận SNMP.

5

Chạy chương trình của bạn và lưu lượng truy cập mạng trong khi đó với tcpdumphoặc wireshark. Kiểm tra thời gian của yêu cầu và trả lời và thực hiện phép trừ đơn giản.

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.