2009-03-22 29 views
27

Tôi đã nhận ra rằng một số câu hỏi tôi đã hỏi trong quá khứ, chẳng hạn như this thực sự đun sôi xuống một câu hỏi cơ bản hơn.Mẫu thiết kế truyền thông mạng

Có bất kỳ mẫu thiết kế nổi tiếng nào cho truyền thông mạng và nhờ bản chất, xây dựng/phân tích giao thức không? Một tìm kiếm google đã không tiết lộ nhiều.

Lưu ý rằng tôi không tìm kiếm giải pháp cho bất kỳ vấn đề cụ thể nào, tôi đang tìm kiếm các mẫu thiết kế được viết tài liệu về giao tiếp mạng và giao thức của chúng.

EDIT:

Vui lòng không đề xuất nhiều chi tiết triển khai khác nhau hoặc thảo luận các giao thức cụ thể trừ khi nó được gắn với mẫu thiết kế. Thiết kế giao thức không phải là vấn đề, đó là các mẫu thiết kế để tạo hoặc phân tích các giao thức mà tôi đang tìm kiếm, chưa kể đến các mẫu giao tiếp.

EDIT2:

Tôi thấy khó mà tin rằng không có ai đưa ra bất kỳ mẫu phổ biến nào cho giao tiếp mạng. Có, tôi biết "nó phụ thuộc", nhưng bạn có thể nói rằng về bất kỳ dự án nào, nhưng có rất nhiều mẫu bao gồm các ý tưởng chung.

+2

Xin chào, tôi đã cố hỏi một câu hỏi tương tự và tôi đã tìm thấy câu hỏi của bạn. Tôi đã phát triển nhiều ứng dụng trong đó có chuỗi người nghe và khách hàng trên mỗi nút. Như bạn đã nói, các ứng dụng khác nhau có thể có các nhu cầu khác nhau. Một số có thể yêu cầu ACK, một số có thể dựa vào thông điệp trùng lặp vv Trong khi phát triển, hầu hết các lần tôi nhìn lại mã trước của tôi hoặc đi với những gì cảm thấy giống như cách hợp lý nhất để làm điều gì đó. Nó sẽ thực sự hữu ích, nếu có bất kỳ mẫu nào, mà nói về giao tiếp lớp ứng dụng Hoặc nên chỉ cần nhìn vào các giao thức hiện có, để tìm giải pháp? – Kalp

+0

Kiểm tra các mẫu Proactor/Reactor. Đây là một bài viết ví dụ: [http://www.artima.com/articles/io_design_patterns.html](http://www.artima.com/articles/io_design_patterns.html) – alariq

+0

@casperOne - Mục đích của đóng một câu hỏi 3 năm cũ đã được trả lời? –

Trả lời

8

Tôi có thể nói rằng chuỗi mô hình trách nhiệm có thể hữu ích khi gửi/nhận dữ liệu từ/đến mạng.

Bạn xây dựng một loạt lệnh để gửi tới máy chủ từ máy khách. Mỗi lệnh được xử lý thông qua chuỗi trách nhiệm, với dữ liệu được thêm vào để xử lý lệnh một cách chính xác.

On dữ liệu gửi, chuỗi có thể nhìn như thế

 

Command --> Wrap some  --> Encrypt --> Send data 
to send  data around 
       the command 
       (source, extra 
       information if 
       needed) 

On dữ liệu nhận được, chuỗi có thể là tương tự, nhưng cách khác xung quanh

 
Receive Data --> Decrypt --> Unwrap extra data --> Execute command 

Bạn có thể kiểm tra bài viết này để biết thêm thông tin về chuỗi trách nhiệm. http://www.vincehuston.org/dp/chain.html

-1

Tôi không biết về các mẫu, như vậy, nhưng có một số điểm chọn lọc "rõ ràng". Trước tiên, bạn có muốn sử dụng ASN.1 hay không (điều này ảnh hưởng đến lô WHOLE)? Thứ hai, bạn có muốn giao thức người đọc hay nhị phân không? Thứ ba, bạn có muốn bất kỳ khía cạnh bảo mật nào trong giao thức của mình không?

Không phải trả lời "muốn sử dụng ASN.1" sẽ buộc trả lời cho một số câu hỏi thiết kế giao thức.

2

Tôi khuyên bạn nên: trừu tượng hóa giao thức mạng/s.

Trước tiên hãy quyết định chức năng, mô-đun và API giữa chúng là gì. Sau đó, quyết định giao thức nào là dữ liệu sẽ đi qua mạng. Sau đó cẩn thận gói gọn tất cả các vấn đề mạng trong lớp riêng của chúng để sau này bạn có thể áp dụng mã hóa, nén, thêm http vận chuyển (để vượt tường lửa) hoặc bất kỳ thứ gì bạn muốn thêm sau này theo cách trực giao với chức năng.

0

Tôi không biết về các mẫu thiết kế, nhưng nghiên cứu các giao thức hiện có có thể là điểm khởi đầu tốt, đặc biệt là các điểm "hiện đại" đã được chuẩn hóa.

BitTorrent là một giao thức phân cấp rất phổ biến có một số tiện ích mở rộng.

OpenSSH là một ứng viên tốt khác; nó hỗ trợ đàm phán tính năng, nhiều loại mã hóa và các kênh de/muxing.

giao thức VoIP là tốt cho streaming ứng dụng: RTP và H.323

Mạng giao thức định tuyến là tốt cũng như: BGP (và phần mở rộng), LDP, VRRP/CARP.

11

Đây là một câu hỏi khá rộng và điều trị của nó có thể yêu cầu một cuốn sách khá dày đặc.

Tôi không biết về bất kỳ như nguồn lực bản thân mình, nhưng cho phép nghĩ rằng đây thông qua và xem xét những gì sẽ là kích thước của một không gian mạng mô hình truyền thông:

kết nối phương thức: {kết nối dựa trên kết nối ít}

tương tác phương thức: {đồng bộ, không đồng bộ}

chuyện phức tạp: {lệnh-phản ứng, hộp thoại}

dạng

nhắn: {freeform-stream, khối bán cấu trúc, hoàn toàn cấu trúc block} ..? Một nơi tốt để bắt đầu là lấy họ TCP/IP của giao thức, ánh xạ chúng vào không gian trên, và xem xét (các) việc triển khai của một hoặc nhiều mẫu vật chiếm một vị trí duy nhất ở trên. không gian mẫu giao thức-đặc điểm. Mã nguồn của hệ điều hành * nix yêu thích của bạn sẽ là một nơi tốt để xem.

Triển khai trình phân tích cú pháp có thể sẽ rơi vào hai danh mục rộng: {xử lý chuyển mạch lệnh, finite-state-machine}.

Trước đây là (rõ ràng) đơn giản hơn cả hai và có khả năng thực hiện ban đầu (trừ khi bạn đã thực hiện loại điều này trước đây).

Loại thứ hai (có khả năng) mạnh mẽ hơn, hiệu quả hơn (về mặt địa phương) và sẽ cho phép áp dụng các thay đổi đối với giao thức (nếu vẫn còn thay đổi thiết kế).

(The tiềm ẩn (ảo) cơ sở vật chất mạng OS (tất nhiên) cũng ảnh hưởng đáng kể thực hiện Hãy JVM, ví dụ:.. Chọn nio xử lý kênh dựa sẽ làm việc khá độc đáo với một FSM)

Hy vọng rằng sẽ giúp .

-1

Chưa trải qua này kỹ lưỡng, nhưng tôi đoán this là doc tốt:

Ngoài ra, this trông giống như một cuốn sách tốt:

2

mẫu người chấp nhận/kết nối: http://www.cs.wustl.edu/~schmidt/PDF/Acceptor.pdf

Chain các bộ lọc dựa trên Gof Chain Of responsabiliy, nó được sử dụng trong rất nhiều ngăn xếp/khung mạng.

Máy trạng thái mã hóa/giải mã PDU.