2010-08-25 56 views
38

Sáng nay, đã có những vấn đề lớn trong công việc vì bẫy SNMP không "đi qua" vì SNMP được chạy trên UDP. Tôi nhớ từ lớp mạng ở trường đại học rằng UDP không được đảm bảo phân phối như TCP/IP. Và Wikipedia nói rằng SNMP có thể chạy trên TCP/IP, nhưng UDP là phổ biến hơn.Tại sao SNMP thường chạy trên UDP chứ không phải TCP/IP?

Tôi nhận thấy rằng một số ưu điểm của UDP trên TCP/IP là tốc độ, phát sóng và đa hướng. Nhưng có vẻ như với tôi rằng việc phân phối được đảm bảo quan trọng hơn đối với việc giám sát mạng hơn khả năng phát sóng. Đặc biệt khi có nhu cầu bảo mật cao nghiêm trọng. Một trong những đồng nghiệp của tôi nói với tôi rằng các gói UDP là gói đầu tiên bị loại bỏ khi lưu lượng truy cập bị nặng. Đó là một lý do khác để thích TCP/IP hơn UDP cho giám sát mạng (IMO).

Vậy tại sao SNMP sử dụng UDP? Tôi không thể tìm ra và cũng không thể tìm được lý do chính đáng trên Google.

+9

-1 để phân tách thiết kế giao thức mà không đọc RFC trước. –

+3

"Wikipedia nói rằng SNMP có thể chạy trên TCP/IP", nếu bạn đọc kỹ RFC3430, http://www.faqs.org/rfcs/rfc3430.html bạn sẽ thấy nó là thử nghiệm, vì vậy bạn không thể mong đợi tất cả sản phẩm của nhà cung cấp hỗ trợ nó. –

+6

+1 cho các vấn đề thực tế đã nêu –

Trả lời

36

UDP thực sự được mong đợi hoạt động tốt hơn TCP trong các mạng bị mất (hoặc mạng bị tắc nghẽn). TCP là tốt hơn nhiều trong việc chuyển số lượng lớn dữ liệu, nhưng khi mạng bị lỗi thì có nhiều khả năng UDP sẽ vượt qua được. (trên thực tế, gần đây tôi đã thực hiện một nghiên cứu thử nghiệm điều này và nó thấy rằng SNMP trên UDP đã thành công tốt hơn SNMP trên TCP trong các mạng bị mất khi thời gian chờ UDP được đặt đúng). Nói chung, TCP bắt đầu hoạt động kém với khoảng 5% mất gói và trở nên hoàn toàn vô dụng ở mức 33% (ish) và UDP vẫn sẽ thành công (cuối cùng).

Vì vậy, điều phải làm, như mọi khi, là chọn đúng công cụ cho đúng công việc. Nếu bạn đang theo dõi thường xuyên nhiều dữ liệu, bạn có thể xem xét TCP. Nhưng hãy sẵn sàng để quay trở lại UDP để khắc phục vấn đề. Hầu hết các ngăn xếp những ngày này thực sự có thể sử dụng cả TCP và UDP.

Đối với việc gửi TRAP, có TRAP không đáng tin cậy vì chúng không được xác nhận. Tuy nhiên, SNMP INFORMs là một phiên bản được thừa nhận của SNMP TRAP. Vì vậy, nếu bạn muốn biết rằng người nhận thông báo đã nhận được tin nhắn, vui lòng sử dụng INFORM. Lưu ý rằng TCP không không phải giải quyết vấn đề này vì nó chỉ cung cấp thông báo mức 3 lớp mà thông báo đã được nhận. Không có đảm bảo rằng người nhận thông báo thực sự đã nhận được nó. SNMP INFORMs thực hiện xác nhận mức ứng dụng và đáng tin cậy hơn nhiều so với giả định một TCP ack cho biết họ đã nhận được nó.

4

Việc sử dụng bẫy với SNMP được coi là không đáng tin cậy. Bạn thực sự không nên dựa vào bẫy.

SNMP được thiết kế để sử dụng làm giao thức yêu cầu/phản hồi. Các chi tiết giao thức rất đơn giản (do đó tên, "giao thức quản lý mạng đơn giản"). Và UDP là một phương tiện vận chuyển rất đơn giản. Hãy thử triển khai TCP trên tác nhân cơ bản của bạn - nó phức tạp hơn nhiều so với một tác nhân đơn giản được mã hóa bằng UDP.

Hoạt động SNMP get/getnext có cơ chế thử lại - nếu không nhận được phản hồi trong thời gian chờ thì yêu cầu tương tự sẽ được gửi tới số lần thử tối đa.

+0

Rõ ràng là tổ chức của bạn chưa nghĩ ra chiến lược quản lý mạng của họ. Thời gian để có được một số nhân viên về một số khóa học giáo dục! –

+3

Tôi cho rằng sự đơn giản là lợi thế mà UDP có trên TCP/IP mà tôi không thể tìm ra. Cảm ơn vì điều đó. Tôi ngạc nhiên, tuy nhiên, việc liệt kê các lập luận ủng hộ và tôi đã đưa ra trong nỗ lực của tôi để hiểu quyết định được coi là không phân biệt. – EC0

+1

SNMP thực sự là một giao thức tuyệt vời; tuy nhiên chỉ vì việc thực hiện giao thức rất đơn giản không có nghĩa là nó dễ sử dụng và dễ hiểu. Và đối với một công ty gặp khó khăn bởi vì nó dựa vào bẫy là không có gì thiếu chuyên nghiệp và cho thấy sự thiếu hiểu biết cơ bản về các khái niệm mạng cơ bản nhất. Tất cả những gì tôi có thể nói là tôi rất vui khi các kỹ sư xây dựng thực sự phải được chứng nhận trước khi xây dựng cơ sở hạ tầng dựa vào. –

9

Nếu hệ thống đã gửi bẫy SNMP qua TCP, chúng có thể chặn chờ các gói được ACKed nếu có sự cố khi nhận lưu lượng truy cập đến người nhận. Nếu có rất nhiều bẫy được tạo ra, nó có thể sử dụng hết các ổ cắm sẵn có trên hệ thống và hệ thống sẽ khóa lại. Với UDP không phải là một vấn đề vì nó là không trạng thái.Một vấn đề tương tự đã xảy ra với BitBucket vào tháng 1 mặc dù giao thức syslog thay vì SNMP - về cơ bản, họ vô tình sử dụng syslog qua TCP do lỗi cấu hình, máy chủ syslog bị hỏng và tất cả các máy chủ bị khóa chờ syslog máy chủ để ACK gói của họ. Nếu bẫy SNMP được gửi qua TCP, một vấn đề tương tự có thể xảy ra.

http://blog.bitbucket.org/2012/01/12/follow-up-on-our-downtime-last-week/

Các vấn đề liên quan