TLDR;
- TCP - định hướng theo luồng, yêu cầu kết nối, đáng tin cậy, chậm
- UDP - hướng thông điệp, không kết nối, không đáng tin cậy, nhanh chóng
Trước khi chúng ta bắt đầu, hãy nhớ rằng tất cả các nhược điểm của một cái gì đó là sự tiếp nối các lợi thế của nó . Chỉ có một công cụ phù hợp cho một công việc, không có thuốc chữa bách bệnh. TCP / UDP cùng tồn tại trong nhiều thập kỷ và vì một lý do.
TCP
Nó được thiết kế cực kỳ đáng tin cậy và nó hoạt động rất tốt. Nó rất phức tạp vì nó hoàn thành một nhiệm vụ khó khăn: chứng minh sự vận chuyển đáng tin cậy qua giao thức IP không đáng tin cậy.
Vì tất cả logic phức tạp của TCP được gói gọn trong ngăn xếp mạng, nên bạn không phải làm quá nhiều công việc cấp thấp, dễ bị lỗi trong lớp ứng dụng.
Khi bạn gửi dữ liệu qua TCP, bạn viết một luồng byte đến ổ cắm tại người gửi, nơi nó được chia thành các gói, truyền xuống ngăn xếp và gửi qua dây. Trên các gói phía bên nhận được lắp lại một lần nữa thành một luồng byte liên tục.
Duy trì sự trừu tượng tốt đẹp này có chi phí về độ phức tạp và hiệu suất. Nếu gói thứ 1 từ luồng byte bị mất, bộ thu sẽ trì hoãn xử lý các gói tiếp theo ngay cả những gói đã đến.
Ngoài ra, để đáng tin cậy, TCP thực hiện điều này:
- TCP yêu cầu kết nối được thiết lập, yêu cầu 3 chuyến khứ hồi (bắt tay 3 bước "khét tiếng").
- TCP có một tính năng gọi là "khởi động chậm" khi nó tăng dần tốc độ truyền sau khi thiết lập kết nối để cho phép người nhận theo kịp dữ liệu.
- Mỗi gói đã gửi phải được xác nhận nếu không người gửi sẽ ngừng gửi thêm dữ liệu
- Và trên và trên và trên...
Tất cả điều này trở nên trầm trọng hơn trong các mạng không dây chậm không đáng tin cậy trong khi TCP được thiết kế cho các mạng có dây, trong đó độ trễ có thể dự đoán được và việc mất gói không quá phổ biến. Ngoài ra, giống như nhiều người đã đề cập, đối với một số thứ, TCP hoàn toàn không hoạt động (DHCP). Tuy nhiên, khi có liên quan, TCP vẫn hoạt động rất tốt.
Sử dụng một thư tương tự một phiên TCP tương tự như kể một câu chuyện cho thư ký của bạn, người chia nó thành thư và gửi một dịch vụ thư nhảm nhí cho nhà xuất bản. Mặt khác, một thư ký khác tập hợp các thư thành một đoạn văn bản. Một số thư bị mất, một số bị hỏng, do đó cần một quy trình rất phức tạp để gửi đáng tin cậy và câu chuyện 10 trang của bạn có thể mất nhiều thời gian để đến nhà xuất bản của bạn.
UDP
Mặt khác, UDP được định hướng theo thông điệp, do đó, một người nhận ghi một thông điệp (gói) vào ổ cắm và sau đó nó được truyền đến một người nhận như hiện tại, mà không có sự phân tách / lắp ráp.
So với TCP, đặc điểm kỹ thuật của nó rất đơn giản. Về cơ bản, tất cả những gì nó làm cho bạn là thêm một tổng kiểm tra vào gói để người nhận có thể phát hiện ra tham nhũng của nó. Mọi thứ khác phải được thực hiện bởi bạn, một nhà phát triển phần mềm. Bây giờ hãy đọc thông số TCP đồ sộ và thử nghĩ đến việc triển khai lại một số phần của nó.
Một số người đã đi theo cách này và nhận được kết quả rất tốt, đến mức HTTP / 3 sử dụng QUIC - một giao thức dựa trên UDP. Tuy nhiên, đây là một ngoại lệ. Các ứng dụng phổ biến của UDP là các ứng dụng truyền phát và hội thảo âm thanh / video như Skype, Zoom hoặc Google Hangout trong đó việc mất các gói không quá quan trọng so với độ trễ do TCP đưa ra.