Tại sao bạn nghĩ rằng việc sử dụng TCP làm cho việc truyền chậm hơn? TCP thường có thể sử dụng tất cả băng thông có sẵn. Sử dụng UDP thay vì không thể nhanh hơn. Trong thực tế, nếu bạn đã cố gắng thực hiện chuyển tập tin dựa trên UDP đáng tin cậy, bạn có thể sẽ thực hiện một thay thế kém hơn cho TCP - vì bạn phải tự mình thực hiện độ tin cậy.
là có vấn đề về FTP là nó thực hiện nhiều lệnh yêu cầu phản hồi đồng bộ cho mọi tệp bạn chuyển và mở kết nối dữ liệu mới cho mỗi tệp. Điều này dẫn đến việc chuyển rất kém hiệu quả khi nhiều tệp nhỏ hơn đang được chuyển, vì phần lớn thời gian được dành cho các yêu cầu/phản hồi chờ đợi và thiết lập các kết nối dữ liệu thay vì thực sự chuyển dữ liệu.
Cách đơn giản để giải quyết vấn đề này là đóng gói tệp/thư mục vào lưu trữ. Trong khi bạn có thể, tất nhiên, chỉ cần làm cho các kho lưu trữ, gửi nó bằng cách sử dụng FTP hoặc tương tự, và giải nén nó ở phía bên kia, thời gian dành cho đóng gói và giải nén có thể là không thể chấp nhận. Bạn có thể tránh sự chậm trễ này bằng cách thực hiện việc đóng gói và giải nén trực tuyến. Tôi không biết bất kỳ phần mềm nào tích hợp gói/giải nén trực tuyến như vậy. Bạn có thể, tuy nhiên, chỉ cần sử dụng các chương trình nc
và tar
trong một đường ống (Linux, Windows sử dụng Cygwin):
chạy đầu tiên trên người nhận:
nc -l -p 7000 | tar x -C <destination_folder>
này sẽ làm cho người nhận chờ đợi cho một kết nối trên cổng số 7000. Sau đó chạy trên người gửi:
cd /some/folder
tar c ./* | nc -q0 <ip_address_of_receiver>:7000
Điều này sẽ khiến người gửi kết nối với người nhận, bắt đầu chuyển. Người gửi sẽ tạo kho lưu trữ tar, gửi nó đến người nhận, sẽ giải nén nó - tất cả cùng một lúc. Nếu cần, bạn có thể đảo ngược vai trò của người gửi và người nhận (bằng cách yêu cầu người nhận kết nối với người gửi).
Cách tiếp cận trực tuyến-tar này không có hai vấn đề về hiệu suất của FTP; nó không thực hiện bất kỳ lệnh yêu cầu-đáp ứng nào, và chỉ sử dụng một kết nối TCP duy nhất.
Tuy nhiên, lưu ý rằng điều này không an toàn; ai cũng có thể kết nối với người nhận trước khi người gửi của chúng tôi gửi, gửi cho anh ta kho lưu trữ tar của riêng mình. Nếu đây là một vấn đề, một VPN có thể được sử dụng, kết hợp với các quy tắc tường lửa thích hợp.
EDIT: bạn đã đề cập đến mất gói là sự cố với hiệu suất TCP, đây là vấn đề quan trọng, nếu trang FileCatalyst được tin tưởng.Đúng là TCP có thể thực hiện không tối ưu với các liên kết mất gói cao. Điều này là do TCP thường phản ứng tích cực với mất gói, bởi vì nó giả định mất là do tắc nghẽn; xem Additive_increase/multiplicative_decrease. Tôi không biết về bất kỳ chương trình truyền tệp miễn phí/mã nguồn mở nào có thể cố gắng khắc phục điều này bằng các giao thức tùy chỉnh. Tuy nhiên, bạn có thể thử khác nhau TCP congestion avoidance algorithms. Cụ thể, hãy thử Vegas, điều này làm không sử dụng mất gói làm tín hiệu để giảm tốc độ truyền.
Bạn đã xem các liên kết tôi đã bao gồm chưa? Nếu bạn có một tập tin 500GB để chuyển, các kết nối điều khiển của FTP hoàn toàn không đáng kể, và những gì bạn kết thúc với là hiệu suất TCP thô. Điều này không nhất thiết phải được điều chỉnh để chuyển các tập tin lớn nhanh nhất có thể - đặc biệt không vượt quá các liên kết với bất kỳ mất gói nào. Các sản phẩm trong các liên kết tôi bao gồm DO thực hiện độ tin cậy bản thân, rõ ràng. – stolsvik
@stolsvik bạn chưa đề cập đến các liên kết mất mát cao, mà AFAIK hiếm gặp trên Internet. Tôi đã thêm một cái gì đó về điều đó. –
Trên thực tế, giao thức TCP thực sự không được thiết kế để chuyển số lượng lớn một chiều. Chắc chắn nó có thể được thực hiện để làm điều đó, nhưng TCP yêu cầu trả lại các gói theo cách gây ra các gian hàng ngắn và nó có thể là một hành động cân bằng để chọn kích thước bộ đệm và kích thước cửa sổ cho tốc độ thực sự tối ưu. Ngoài ra, việc triển khai có thể không phải lúc nào cũng thực hiện những gì mà chúng thực sự phải thực hiện với các cài đặt tùy chọn khác nhau. –