Sự khác biệt giữa TCP và UDP?


144

Sự khác biệt giữa TCP và UDP là gì?

Tôi biết rằng TCP được sử dụng trong trường hợp các ứng dụng quan trọng không phải là thời gian và UDP được sử dụng cho các trò chơi hoặc ứng dụng yêu cầu truyền dữ liệu nhanh. Tôi biết rằng TCP được sử dụng cho HTTP, HTTPs, FTP, SMTP và Telnet. Tôi biết rằng UDP được sử dụng cho DNS và DHCP.

Nhưng tại sao? Những đặc điểm nào của TCP và UDP làm cho nó hữu ích cho các trường hợp sử dụng tương ứng của chúng?


13
Và điều này ( Skullbox.net/tcpudp.php ) - lần đầu tiên Google thành công - không đủ rõ ràng? Điều gì đã gây nhầm lẫn về nó? Có lẽ điều này là tốt hơn? tcpipguide.com/free/...
S. Lott

1
Tôi thực sự tò mò tại sao câu hỏi này có (tại thời điểm viết) 3 câu hỏi. Câu đầu tiên thậm chí không có ý nghĩa và có rất nhiều tài liệu có sẵn về chủ đề này nếu một tìm kiếm.
MattH

21
@MattH: 1) Đó là một câu hỏi hay, nếu khá rộng và một bản sao đã được trả lời tốt. 2) Bạn đã có quá nhiều danh tiếng để sửa lỗi đánh máy trong câu đầu tiên. 3) Không liên quan khi thông tin về điều này tồn tại ở nơi khác. Stack Overflow nhằm mục đích trở thành một kho lưu trữ kiến ​​thức và trả lời các câu hỏi theo quy tắc tại đây .
ire_and_curses

2
Điều thú vị là hầu như không ai đề cập đến việc DHCP sử dụng phát sóng, nhưng mọi người đều nghĩ rằng 'câu trả lời' là về sự đảm bảo của việc phân phối và truyền lại.
Heath Hunnicutt

1
Chỉ dành cho bất kỳ ai khác đọc điều này trong tương lai, trang web Skullbox được đề cập ở trên có MALware theo Google (nó đã dừng tôi khi tôi nhấp vào nó). Tôi khuyên bạn không nên đến đó.
Alan006

Câu trả lời:


119

TCPlà một luồng định hướng kết nối qua mạng IP. Nó đảm bảo rằng tất cả các gói đã gửi sẽ đến đích theo đúng thứ tự. Điều này ngụ ý việc sử dụng các gói xác nhận được gửi lại cho người gửi và truyền lại tự động, gây ra sự chậm trễ bổ sung và việc truyền tải kém hiệu quả hơn so với UDP.

UDPlà một giao thức không có kết nối. Truyền thông được định hướng datagram . Tính toàn vẹn chỉ được đảm bảo trên datagram duy nhất. Datagram đến đích và có thể đến trật tự hoặc không đến nơi nào cả. Nó hiệu quả hơn TCPvì nó sử dụng không ACK . Nó thường được sử dụng cho giao tiếp thời gian thực, trong đó một tỷ lệ phần trăm mất gói tin thích hợp hơn so với chi phí TCPkết nối.

Trong một số tình huống UDPđược sử dụng vì nó cho phép truyền gói tin quảng bá. Điều này đôi khi là cơ bản trong các trường hợp như DHCPgiao thức, bởi vì máy khách vẫn chưa nhận được IPđịa chỉ (đây là DHCPmục đích của giao thức đàm phán) và sẽ không có cách nào để thiết lập TCPluồng mà không có IPđịa chỉ.


5
Một ví dụ sử dụng UDP là trong truyền video và âm thanh khi mất một vài gói ở đây và thường không có vấn đề gì nhiều (màu của khung có thể bị tắt hoặc âm thanh nano giây nhỏ có thể bị cắt hoặc thay đổi - không thực sự đáng chú ý đối với con người). Tất nhiên, nếu kết nối của bạn thực sự xấu, bạn có thể mất rất nhiều gói khiến video xuất hiện mờ / pixel và âm thanh trở nên mờ và cắt vào và ra rất nhiều.
Niko Bellic

53

Từ bài viết của Skullbox:

TCP (Giao thức điều khiển truyền) là giao thức được sử dụng phổ biến nhất trên Internet. Lý do cho điều này là do TCP cung cấp sửa lỗi. Khi giao thức TCP được sử dụng, sẽ có "phân phối được bảo đảm". Điều này phần lớn là do một phần của một phương pháp gọi là "kiểm soát dòng chảy". Kiểm soát luồng xác định khi nào dữ liệu cần được gửi lại và dừng luồng dữ liệu cho đến khi các gói trước đó được chuyển thành công. Điều này hoạt động vì nếu một gói dữ liệu được gửi, một vụ va chạm có thể xảy ra. Khi điều này xảy ra, máy khách yêu cầu lại gói từ máy chủ cho đến khi toàn bộ gói hoàn thành và giống hệt với bản gốc của nó.

UDP (Giao thức gói dữ liệu người dùng) là giao thức được sử dụng phổ biến trên Internet. Tuy nhiên, UDP không bao giờ được sử dụng để gửi dữ liệu quan trọng như trang web, thông tin cơ sở dữ liệu, v.v; UDP thường được sử dụng để truyền phát âm thanh và video. Truyền phát phương tiện như các tệp âm thanh Windows Media (.WMA), Real Player (.RM) và các phương tiện khác sử dụng UDP vì nó cung cấp tốc độ! Lý do UDP nhanh hơn TCP là vì không có hình thức kiểm soát luồng hoặc sửa lỗi. Dữ liệu được gửi qua Internet bị ảnh hưởng bởi các va chạm và sẽ xuất hiện lỗi. Hãy nhớ rằng UDP chỉ liên quan đến tốc độ. Đây là lý do chính tại sao truyền thông trực tuyến không có chất lượng cao.

1) TCP được định hướng kết nối và đáng tin cậy trong đó UDP là kết nối ít hơn và không đáng tin cậy.

2) TCP cần xử lý nhiều hơn ở cấp giao diện mạng trong khi ở UDP thì không.

3) TCP sử dụng, bắt tay 3 bước, điều khiển tắc nghẽn, điều khiển luồng và cơ chế khác để đảm bảo việc truyền tin cậy.

4) UDP chủ yếu được sử dụng trong trường hợp độ trễ gói nghiêm trọng hơn mất gói.


1
+1 Tóm tắt hợp lý. Mặc dù is the most commonly used protocol on the Internettuyên bố là có thể tranh cãi và thực sự phụ thuộc vào cách bạn xác định most commonly used, protocolthe Internet. Ví dụ: Giao thức Internet là một ứng cử viên có khả năng cao hơn với vương miện cụ thể đó.
MattH

-1: Lý do UDP được sử dụng cho DHCP không liên quan gì đến việc chậm hoặc mất gói.
Heath Hunnicutt

2
Khi gửi nhiều dữ liệu trên một kênh rõ ràng, TCP thường nhanh hơn UDP. Lý do UDP được sử dụng cho những thứ như âm thanh hoặc video phát trực tiếp là khi gói TCP bị mất, ứng dụng nhận sẽ không nhìn thấy gì thêm cho đến khi dữ liệu bị thiếu đã được truyền lại và nhận thành công. Trong nhiều ứng dụng phát trực tuyến, dữ liệu đến muộn sẽ vô dụng, do đó, không có lý do gì để giữ mọi thứ trong khi chờ truyền lại, điều này sẽ vô dụng.
supercat

UDP được sử dụng cho DHCP vì TCP không hỗ trợ phát sóng. DHCP dựa vào việc sử dụng phát sóng để lấy địa chỉ IP cho máy chủ DHCP. Xem stackoverflow.com/questions/21266008/
Mạnh

41

Hãy nghĩ về TCP như một gói nhận / thả gói UPS / FedEx dành riêng giữa hai địa điểm, trong khi UDP tương đương với việc ném bưu thiếp vào hộp thư.

UPS / FedEx sẽ cố gắng hết sức để đảm bảo rằng gói hàng bạn gửi đi đến đó và đến đó đúng giờ. Với thẻ bài, bạn thật may mắn nếu nó đến, và nó có thể bị hỏng hoặc trễ (bạn đã nhận được một tấm bưu thiếp từ ai đó SAU bao nhiêu lần họ về nhà sau kỳ nghỉ?)

TCP gần với giao thức phân phối được bảo đảm như bạn có thể nhận được, trong khi UDP chỉ là "nỗ lực tốt nhất".


1
Đủ trả lời. Tôi sẽ thêm rằng trong một luồng TCP, các gói được xác nhận bởi đích và các gói bị hỏng / gói bị thiếu được gửi bởi người gửi. Trong UDP, các gói được gửi và đích nhận chúng theo bất kỳ thứ tự nào và không xác nhận đã nhận.
Erik Ned Worldwidek

2
Một chút tương tự gây hiểu lầm có lẽ phù hợp hơn với QoS
MattH

11
Tôi thích sự tương tự rất nhiều, nhưng một điều mà câu trả lời này hơi sai lệch là tốc độ. nó làm cho nó có vẻ như TCP nhanh hơn, trong khi thực tế UDP là do có ít chi phí hoạt động hơn.
iliketocode

22

Lý do UDP được sử dụng cho DNS và DHCP:

DNS - TCP yêu cầu nhiều tài nguyên hơn từ máy chủ (lắng nghe các kết nối) so với từ máy khách. Cụ thể, khi kết nối TCP bị đóng, máy chủ được yêu cầu ghi nhớ các chi tiết của kết nối (giữ chúng trong bộ nhớ) trong hai phút, trong trạng thái được gọi là TIME_WAIT_2. Đây là một tính năng bảo vệ chống lại các gói lặp lại sai từ kết nối trước được hiểu là một phần của kết nối hiện tại. Duy trì TIME_WAIT_2 sử dụng hết bộ nhớ kernel trên máy chủ. Yêu cầu DNS nhỏ và đến thường xuyên từ nhiều khách hàng khác nhau. Kiểu sử dụng này làm trầm trọng thêm tải trên máy chủ so với máy khách. Người ta tin rằng việc sử dụng UDP, không có kết nối và không có trạng thái để duy trì trên cả máy khách hoặc máy chủ, sẽ cải thiện vấn đề này.

DHCP - DHCP là một phần mở rộng của BOOTP. BOOTP là một giao thức mà máy tính khách sử dụng để lấy thông tin cấu hình từ máy chủ, trong khi máy khách đang khởi động. Để xác định vị trí máy chủ, một chương trình phát được gửi yêu cầu máy chủ BOOTP (hoặc DHCP). Phát sóng chỉ có thể được gửi qua một giao thức không kết nối, chẳng hạn như UDP. Do đó, BOOTP yêu cầu ít nhất một gói UDP, để phát sóng định vị máy chủ. Hơn nữa, vì BOOTP đang chạy trong khi máy khách ... khởi động và đây là khoảng thời gian mà máy khách có thể không tải và chạy toàn bộ ngăn xếp TCP / IP, UDP có thể là giao thức duy nhất mà máy khách sẵn sàng xử lý thời gian. Cuối cùng, một số máy khách DHCP / BOOTP chỉ có UDP trên tàu. Ví dụ, một số bộ điều nhiệt IP chỉ thực hiện UDP.

Như những người khác đã đề cập, UDP cũng hữu ích cho việc truyền phát phương tiện, đặc biệt là âm thanh. Cuộc trò chuyện có vẻ tốt hơn trong độ trễ mạng nếu bạn chỉ cần bỏ các gói bị trì hoãn. Bạn có thể làm điều đó với UDP, nhưng với TCP, tất cả những gì bạn nhận được trong thời gian trễ là tạm dừng, theo sau là âm thanh sẽ luôn bị trì hoãn nhiều như đã tạm dừng. Đối với các cuộc trò chuyện kiểu điện thoại hai chiều, điều này là không thể chấp nhận được.


17

Một trong những khác biệt là trong ngắn hạn

UDP : Gửi tin nhắn và không nhìn lại nếu nó đến đích, Giao thức không kết nối
TCP : Gửi tin nhắn và đảm bảo đến đích, Giao thức hướng kết nối


9

TCP thiết lập kết nối trước khi truyền dữ liệu thực tế diễn ra, UDP thì không. Bằng cách này, UDP có thể cung cấp giao hàng nhanh hơn. Các ứng dụng như DNS, truy cập máy chủ thời gian, do đó, sử dụng UDP.

Không giống như UDP, TCP sử dụng điều khiển tắc nghẽn. Nó đáp ứng với tải mạng. Không giống như UDP, nó chậm lại khi sắp xảy ra tắc nghẽn mạng. Vì vậy, các ứng dụng như đa phương tiện thích thông lượng liên tục có thể dùng cho UDP.

Ngoài ra, UDP không đáng tin cậy, nó không phản ứng với việc mất gói. Vì vậy, mất các ứng dụng nhạy cảm như truyền đa phương tiện thích UDP. Tuy nhiên, TCP là một giao thức đáng tin cậy, vì vậy, các ứng dụng yêu cầu độ tin cậy như chuyển web, email, tải xuống tệp thích TCP hơn.

Bên cạnh đó, trong UDP internet ngày nay không được chào đón như TCP do các hộp giữa. Một số ứng dụng như skype rơi xuống TCP khi kết nối UDP được cho là bị chặn.



2

Sự khác biệt ngắn và đơn giản giữa giao thức Tcp và Udp:

1) Tcp - Giao thức điều khiển truyền và Udp - Giao thức datagram người dùng.

2) Tcp là giao thức đáng tin cậy, trong đó Udp là giao thức không đáng tin cậy.

3) Tcp là một luồng định hướng, trong đó Udp là một giao thức hướng thông điệp.

4) Tcp chậm hơn Udp.


1

Chạy vào chủ đề này và để tôi cố gắng diễn đạt nó theo cách này.

TCP

Bắt tay 3 bước

Bob: Này Amy, tôi muốn nói với bạn một bí mật
Amy: OK, hãy tiếp tục, tôi đã sẵn sàng
Bob: OK


Bob giao tiếp : 'Tôi', đây là lá thư đầu tiên
Amy: Thư đầu tiên nhận được, xin vui lòng gửi cho tôi lá thư thứ hai
Bob: '', đây là lá thư thứ hai
Amy: Thư thứ hai nhận được, xin vui lòng gửi cho tôi lá thư thứ ba
Bob: 'L ', đây là bức thư thứ ba
Sau một thời gian
Bob: ' L ', đây là bức thư thứ ba
Amy: Thư thứ ba nhận được, xin vui lòng gửi cho tôi lá thư thứ tư
Bob: ' O ', đây là bức thư thứ tư
Amy: ...
... ...


Bob bắt tay 4 bước : Bí mật của tôi đã được phơi bày, bây giờ, bạn biết trái tim tôi.
Amy: OK. Tôi không có gì để nói.
Bob: OK.

UDP

Bob: Tôi yêu U
Amy nhận được: OVI LE

TCP đáng tin cậy hơn UDP với thứ tự tin nhắn được đảm bảo, đó là lý do tại sao UDP nhẹ hơn và hiệu quả hơn.


0

Giải thích đơn giản bằng cách tương tự

TCP là như thế này.

Hãy tưởng tượng bạn có một cây bút trên sao Hỏa (chúng tôi đã liên lạc với những lá thư được viết lại trong những ngày tốt đẹp trước khi có internet).

Bạn cần gửi cho bạn cây bút bảy thói quen của những người có hiệu quả cao. Vì vậy, bạn quyết định gửi nó trong bảy chữ cái riêng biệt:

  1. Thư 1 - Hãy chủ động
  2. Thư 2 - Bắt đầu với kết thúc trong tâm trí ...

Vân vân.

vv..Letter 7 - Làm sắc nét lưỡi cưa

Yêu cầu:

Bạn muốn chắc chắn rằng bạn bút của bạn nhận được tất cả các chữ cái của bạn - theo thứ tự và chúng đến hoàn hảo . Nếu bút trả tiền của bạn nhận được thư 7 trước thư 1 - điều đó không tốt. nếu bạn qua thư nhận được tất cả các chữ cái trừ chữ 3 - điều đó cũng không tốt.

Đây là cách chúng tôi đảm bảo rằng các yêu cầu của chúng tôi được đáp ứng:

  • Thư xác nhận: Vì vậy, bạn của bạn sẽ gửi thư xác nhận để nói rằng "Tôi đã nhận được thư 1". Bằng cách đó bạn biết rằng bạn thân của bạn đã nhận được nó. Nếu một lá thư không đến, hoặc không theo thứ tự, thì bạn phải dừng lại, và quay lại và gửi lại bức thư đó, và tất cả các chữ cái tiếp theo.
  • Kiểm soát dòng chảy: Trong khoảng thời gian Xmas bạn biết rằng bạn bè của bạn sẽ nhận được rất nhiều thư, vì vậy bạn chậm lại vì bạn không muốn áp đảo bạn. . sẽ không thể đọc chúng.
  • Đến hoàn hảo. Đôi khi trong khi bạn gửi thư của bạn trong thư, nó có thể bị rách hoặc một con ốc sên có thể ăn một nửa số đó. Làm thế nào để bạn biết rằng tất cả thư của bạn đã đến trong tình trạng hoàn hảo? Chà, cây bút của bạn sẽ cung cấp cho bạn một cơ chế để bạn có thể kiểm tra xem họ đã nhận được toàn bộ thư hay chưa và đó có phải là chính xác bức thư mà bạn đã gửi không. (ví dụ thông qua một số từ, vv). một sự tương tự cơ bản.

0

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.