2010-02-11 14 views
8

SCTP hỗ trợ đa hướng gốc nếu tôi hiểu chính xác sẽ tự động định tuyến lại gói của bạn qua NIC phụ nếu giao diện chính bị hỏng. Tôi nhân bản chức năng này với TCP bằng cách viết một deamon định tuyến tùy chỉnh để sửa đổi các bảng định tuyến nếu NIC chính của tôi bị hỏng. Tôi muốn thử sử dụng SCTP để thay thế.SCTP với Multihoming thay thế cho TCP

Trong Steven Unix Network Programming V1 3rd Edition trên trang 288 nó nói:

Đối với ví dụ này, chúng tôi sử dụng một một-nhiều kiểu máy chủ. Chúng tôi thực hiện lựa chọn này vì một lý do quan trọng. Các ví dụ trong Chương 5 có thể sửa đổi để chạy trên SCTP với một thay đổi nhỏ: thay đổi cuộc gọi socket chức năng để xác định IPPROTO_SCTP thay vì IPPROTO_TCP như là đối số thứ ba. Chỉ cần thực hiện thay đổi này, tuy nhiên, sẽ không tận dụng bất kỳ tính năng bổ sung nào của các tính năng bổ sung được cung cấp bởi SCTP ngoại trừ đa homing.

Bây giờ tôi đã thử điều này với kết quả khá kém.

Tôi đang chạy trên Ubuntu 9.04 với gói libsctp1, libsctp-dev và lksctp-tools được cài đặt. Tôi đã xác minh với lksctp-tools rằng SCTP đang hoạt động bình thường.

Tôi lấy số UNP example code và sửa đổi như được nêu ở trên các chương trình ~/unpv13e/tcpcliserv/tcpserv04.c~/unpv13e/select/tcpcli02.c.

Đây là cặp máy chủ/máy khách echo đơn giản. Máy chủ chạy nghe rõ ràng, nhưng các máy khách thoát ra nói rằng kết nối đã bị từ chối. Kể từ netstat không hỗ trợ SCTP tôi đã sử dụng lsof -n | grep tcpserv mà chỉ cho tôi:

tcpserv04 6208  alice 3u  sock  0,4   33889 can't identify protocol 

này dường như không để cho tôi biết nhiều ngoại trừ tcpserv04 có một số loại ổ cắm mở.

Tôi đã viết lại và kiểm tra máy khách TCP ban đầu trong perl, vì vậy tôi chuyển nó sang sctp và có thể kết nối mặc dù đường ống một tệp trên stdin không hoàn toàn hoạt động (treo khoảng 2/3 trong quá trình nhận lưng của echo). Có vẻ như UNP ngụ ý rằng việc chuyển các ứng dụng TCP tới SCTP để tận dụng lợi thế của multi-homing là tầm thường, nhưng dựa trên nỗ lực đơn giản này mà thực sự không phải là trường hợp.

Bất cứ ai có thể chỉ cho tôi một hướng dẫn hay hoặc đưa ra lời khuyên tốt về mọi ứng dụng cần lưu ý khi chuyển các ứng dụng TCP sang SCTP một-một-một để tận dụng lợi thế của multi-homing?

+0

TCP cũng có thể triển khai hình thức dự phòng này — nhiều tuyến từ a đến b trong bảng định tuyến - tại sao phải bận tâm? –

+0

@Hassan Syed: Vì tôi tò mò. –

+0

bạn đã thử chụp hình wireshark chưa. Nếu mọi thứ được thiết lập đúng, một cuộc gọi kết nối trên máy khách sẽ kích hoạt bắt tay 4 chiều đối với máy chủ. Bên cạnh đó, tôi không thể tìm thấy tệp khách hàng (~/unpv13e/select/tcpcli02.c) từ liên kết bạn đã cung cấp. –

Trả lời

2

tcpcli02 cố gắng kết nối với cổng 7, trong khi tcpserv04 nghe trên cổng 9877 (giá trị mặc định cho SERV_PORT). Sau khi thay đổi chúng để phù hợp, nó làm việc cho tôi.

Hỗ trợ cho SCTP thường rất tệ. Trừ khi bạn kiểm soát toàn bộ cơ sở hạ tầng mạng giữa các máy chủ mà bạn đang cố gắng kết nối, tôi sẽ không dựa vào nó để hoạt động đáng tin cậy. Việc tự chuyển các ứng dụng sẽ khá phức tạp, như đã đề cập trong UNP.

+0

Tôi nghĩ rằng tôi chỉ cần kiểm soát hai điểm cuối đang nói chuyện với nhau. Tại sao tôi cần kiểm soát toàn bộ cơ sở hạ tầng mạng? Ahh, tôi đoán tất cả các bộ định tuyến trong mạng sẽ cần phải có sự hỗ trợ rõ ràng cho SCTP và hiện tại hầu hết không có? –

+1

Thật vậy. Về lý thuyết, router không phải là một vấn đề, vì chúng không kiểm tra vào lớp 4. Router trong lõi của internet có lẽ sẽ không. Tuy nhiên, bạn càng tiến gần đến mép thì càng có nhiều khả năng. Một khi bạn vào các hộp làm NAPT (dựa trên các gói ánh xạ tới các điểm cuối bằng cách sử dụng các tiêu đề lớp 4), bạn có thể không may mắn vì chúng chắc chắn sẽ chỉ xử lý TCP và UDP. – fnl