Làm cách nào để điều tiết băng thông trên giao diện mạng Linux?


Câu trả lời:


32

Các netem mô-đun hạt nhân, điều khiển bởi iproute.

Bạn cần biên dịch Netem với kernel:

Networking -->
   Networking Options -->
     QoS and/or fair queuing -->
        Network emulator

Khi mô-đun netem được tải, tpr của iproute cho phép bạn những thứ như:

tc qdisc add dev  tap0 root netem delay 50ms loss 50% 

(Mất gói 50%, độ trễ thêm 50 ms)


Vâng, đây là một mô-đun rất tốt cho những điều này, thực sự. Tôi không thể tin rằng không có ai trả lời điều này cho đến bây giờ ...

Tôi sử dụng điều này để kiểm tra các máy chủ cục bộ (trên localhost) vì nó là tiêu chuẩn cho tất cả các bản phát hành trong nhiều năm. Để thêm độ trễ 20ms "tc qdisc thêm dev lo root root 1: 0 netem delay 20msec" và để xóa nó "tc qdisc del dev lo root"
pixelbeat

1
Ghi chú nhanh: mô-đun kernel là sch_netem. Nói chung không cần tải bằng tay, nó sẽ được tải tự động khi cần.
sleske


Phiên bản netem của tôi (Ubuntu 13.10) cũng có tùy chọn giới hạn băng thông bằng ratetùy chọn : tc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000. Lưu ý rằng đối với một số thiết bị như lo(để truy cập localhost), bạn cũng cần đặt độ dài hàng đợi : ifconfig lo txqueuelen 1000. Xem serverfault.com/a/394949/76090
z0r

27

Phía khách hàng, phải không?

nhỏ giọt nên làm những gì bạn muốn. Nếu bạn đang chạy Ubuntu (hoặc Debian, tôi nghĩ vậy), bạn có thể cài đặt nó sudo apt-get install tricklevà sau đó chạy nó. trickle -s -d 10 -u 10 firefox(hoặc vì vậy, tôi đã không sử dụng nó trong một thời gian) sẽ chạy firefox, giới hạn tốc độ tải xuống và tải lên của nó xuống 10 kilobyte một giây.


Cảm ơn vì lời khuyên này. Vì một số lý do, nhỏ giọt sẽ không hoạt động với tôi với firefox nhưng nó hoạt động tốt với google-chrome. (Ubuntu 9.10 64 bit)
Tom

6
nhỏ giọt hoạt động bằng cách chặn các cuộc gọi để liên kết trong các chức năng thư viện tiêu chuẩn để chuyển TCP - nếu một ứng dụng có các chức năng này được liên kết tĩnh tại thời điểm biên dịch thì điều này không thể hoạt động.
David Spillett

16

Tôi đã tìm ra cách để tránh hộp của mình ăn hết băng thông có sẵn trên mạng bằng cách sử dụng một công cụ có tên là 'wonderershaper' trong ubfox. Tôi hy vọng nó tồn tại trong các phiên bản linux khác. Tôi có thể giới hạn băng thông mà máy tính linux nhà tôi có thể tiêu thụ bằng cách sử dụng lệnh sau.

sudo wondershaper eth0 1000 200

Điều này giới hạn giới hạn tải xuống ở mức 1000 kilobit và tăng lên tới 200 kilobit. Tham khảo các trang hướng dẫn sử dụng wonderershaper để biết thêm thông tin / tùy chọn.


1
Đây không hoàn toàn là những gì OP đang tìm kiếm (đó là về việc bảo tồn băng thông, không phải về mục đích làm giảm kết nối), nhưng vẫn tốt để biết.
sleske

1
BTW: Đó là gói wondershapertrong Debian.
sleske

Điều này làm chúng tôi gặp vấn đề tại văn phòng với độ bão hòa băng thông, có một sự hỗ trợ mà tôi không thể làm gián đoạn và tôi đã có thể khắc phục điều này trong hai dòng đơn giản: # apt-get install wonderershaper sau đó # wonderershaper eth0 9999999 500 cảm ơn một lần nữa!
cam80

4
wonderershaper dường như có một số vấn đề toán học mặc dù. Để có được đường dẫn lên / xuống 1Mb / giây, chúng tôi đã kết thúc bằng cách sử dụng 28096 thay vì 1024. Không biết tại sao điều này lại xảy ra.
thuyền viên

Để thiết lập lại, sử dụng:sudo wondershaper clear eth0
Léo Lam

8

NIST tạo một trình giả lập mạng có tên là NistNet.

http://snad.ncsl.nist.gov/nistnet/ (liên kết dường như đã chết)

http://cs.ecs.baylor.edu/~donahoo/tools/nistnet/

NistNet cho phép bạn tạo một bộ định tuyến mô phỏng liên kết comms bạn chọn.

Để thao tác đơn giản nhất, bạn có nó trên một hộp có hai NIC giữa hai mạng.

Ví dụ, tôi có một ứng dụng phải hoạt động qua liên kết vệ tinh.

Dữ liệu có thể đi qua liên kết 2Mbps với độ trễ LỚN. Kiểm soát phải đi qua một liên kết 128kbps, với cùng độ trễ.

NistNet đã giúp mọi thứ hoạt động trên 128kbps.

Sử dụng NistNet tôi có thể mô phỏng không chỉ băng thông, mà cả độ trễ và nó cũng sẽ bỏ các gói cho bạn, mô phỏng một liên kết bận hoặc không đáng tin cậy.

Nếu bạn muốn mô phỏng một kết nối abitrary, đừng chỉ giới hạn băng thông, hãy tăng độ trễ.

Đừng quên các gói phân mảnh. Bạn có thể đặt MTU nhỏ đẹp trên liên kết giả mạo.

IIRC thêm jitter gói sẽ cho phép bạn tìm hiểu xem bạn có thể đối phó với các gói không theo thứ tự không.


NistNet không được cập nhật trong một thời gian dài, phải không? IMO, cách tốt nhất cho đến nay là mô-đun netem, đã tồn tại trong tất cả các hạt nhân gần đây.

Bạn có thể mô phỏng một máy có 2 NIC bằng VM.
Scott

liên kết không hoạt động
hasen

Liên kết hoạt động cho tôi.
tripleee

4

Cá nhân tôi đã sử dụng wonderershaper trong quá khứ cho việc này, mặc dù nó được viết cho trường hợp sử dụng ngược lại - tận dụng tối đa kết nối ADSL của bạn.

Tôi sẽ phải thử những người khác được đề cập ở đây mặc dù.


3

Ví dụ, bạn có thể sử dụng proxy mực được cài đặt cục bộ để giới hạn băng thông để kiểm tra một trang web trên liên kết chậm:

  1. Cài đặt proxy mực từ bản phân phối của bạn - trên Fedora của tôi, nó dễ như vậy yum install squid.

  2. Thêm vào như sau /etc/squid/squid.conf:

    delay_pools 1
    delay_class 1 1
    delay_access 1 allow all
    delay_parameters 1 16000/16000

    Điều này sẽ giới hạn băng thông ở khoảng 128 kbps (16000 Bps).

  3. Bắt đầu câu mực :/etc/init.d/squid start

  4. Cấu hình trình duyệt của bạn để sử dụng localhostcổng máy chủ proxy 3128.



3

Chưa ai đề cập đến ip_relay , được đặt tên là "iprelay" trong kho Debian. Nó hoạt động như một proxy TCP, thay vì chặn các cuộc gọi theo cách nhỏ giọt và sẽ hoạt động với bất kỳ ứng dụng nào có thể sử dụng proxy (ví dụ: trình duyệt web) hoặc chấp nhận cổng đích do người dùng xác định (telnet, ssh, ftp, curl, et cetera ).

Việc cài đặt khó khăn hơn một chút, nhưng thường hoạt động trong các tình huống khó khăn.


1
Điều này là chính xác cho những gì tôi đang tìm kiếm! Lời cảm ơn to lớn. Tôi rất vui vì tôi đã cuộn xuống và tiếp tục đọc.
Jay R. Wren
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.