HTTP có sử dụng UDP không?


103

Đây có thể là một câu hỏi ngớ ngẩn:

  • HTTP có bao giờ sử dụng Giao thức dữ liệu người dùng không?

Ví dụ:

Nếu một người đang phát trực tuyến MP3 hoặc video bằng HTTP, nó có sử dụng UDP để truyền tải nội bộ không?


Bạn có nghĩa là gì bởi: "web"? Ý bạn là sử dụng trình duyệt? Hay qua internet công cộng?
benc 24/09/09

Ý tôi muốn hỏi là có một bản mp3 được lưu trữ trên một URL giống như someserver / somemusic.mp3 . Nếu điều này được truyền trực tuyến tới bất kỳ ứng dụng khách nào - trình duyệt, thiết bị, v.v ... thì http sẽ chuyển điều này như thế nào. Nếu tôi hiểu đúng các câu trả lời dưới đây, điều này sẽ được ủy quyền cho RTP.
Sesh

Cổng 80 UDP cũng được dành riêng cho HTTP, điều này tôi cảm thấy thú vị vì tôi chưa bao giờ thấy nó được sử dụng, cũng như tôi không thể tưởng tượng được cách sử dụng nó tốt.
Joshua

1
Nó được bảo lưu vì ủy ban IANA có trí tưởng tượng linh hoạt hơn bạn làm. ;-) Họ hình dung rằng có thể có một công dụng tốt cho nó. Bên cạnh đó, để không dự trữ cổng 80 cho UDP / HTTP sẽ rời khỏi nó mở đối với một số giao thức UDP khác, trong đó sẽ chỉ gây ra sự nhầm lẫn khi nói về cổng 80.
Jesse Chisholm

Câu trả lời:


42

Điển hình là không.

Truyền trực tuyến hiếm khi được sử dụng qua chính HTTP và HTTP hiếm khi chạy qua UDP. Tuy nhiên, hãy xem RTP .

Đối với một cái gì đó như ví dụ của bạn (trong nhận xét), bạn không hiển thị một giao thức cho tài nguyên. Nếu giao thức đó là HTTP, thì tôi sẽ không gọi quyền truy cập là "streaming"; ngay cả khi nó theo một nghĩa nào đó là vì nó đang gửi một tài nguyên (có thể lớn) nối tiếp nhau qua một mạng. Thông thường, tài nguyên sẽ được lưu vào đĩa cục bộ trước khi được phát lại, vì vậy việc truyền mạng không phải là thông thường có nghĩa là "phát trực tuyến".

Tuy nhiên, như các nhà bình luận đã chỉ ra, chắc chắn có thể thực sự phát trực tuyến qua HTTP và điều đó được thực hiện bởi một số.


16
Rõ ràng là sai, không có gì trong HTTP ngăn cản việc phát trực tuyến, nó không hiệu quả như một giao thức chuyên dụng. Truyền trực tuyến Dyanmic HTTP bằng cách sử dụng các đoạn: adobe.com/products/httpdynamicstreaming HTTP Pseudo-Streaming: longtailvideo.com/support/jw-player/jw-player-for-flash-v5/…
Steve-o

14
luồng youtube qua http.
nos

6
@ snowcrash09 Tôi thậm chí không thể tự xóa nó vì nó được chấp nhận. Lạ nhỉ. Tôi đã viết lại nó, tôi hy vọng nó bớt xúc phạm hơn bây giờ.
thư giãn

1
Chỉ nói về HTTP và truyền trực tuyến - quay lại thời kỳ đen tối của video QuickTime, ở đó server push, kết nối HTTP gửi MJPEG (nhiều hình ảnh JPEG) như một phần riêng biệt của phản hồi đa phần MIME đối với yêu cầu HTTP. Mỗi ảnh JPEG đến và thay thế ảnh trước đó trong màn hình. Nhưng bạn nói đúng @unwind, điều này hiếm khi được thực hiện ngày nay, vì RTP / RTSP hoạt động tốt hơn.
Jesse Chisholm

3
@nos Youtube không phát trực tuyến. Trình duyệt tải tệp xuống bộ nhớ đệm và bắt đầu phát từ tệp trước khi tải xuống hoàn toàn. Mặc dù điều này mô phỏng phát trực tuyến, nhưng không phải vậy.
SimonStiph

113

Từ RFC 2616 :

Giao tiếp HTTP thường diễn ra qua các kết nối TCP / IP. Cổng mặc định là TCP 80, nhưng các cổng khác có thể được sử dụng. Điều này không ngăn cản việc HTTP được triển khai trên bất kỳ giao thức nào khác trên Internet hoặc trên các mạng khác. HTTP chỉ giả định một phương tiện truyền tải đáng tin cậy; có thể sử dụng bất kỳ giao thức nào cung cấp các đảm bảo như vậy; ánh xạ của cấu trúc yêu cầu và phản hồi HTTP / 1.1 lên các đơn vị dữ liệu truyền tải của giao thức được đề cập nằm ngoài phạm vi của đặc tả này.

Vì vậy, mặc dù nó không nói rõ ràng như vậy, UDP không được sử dụng vì nó không phải là một "phương tiện truyền tải đáng tin cậy".

CHỈNH SỬA - gần đây hơn, giao thức QUIC (chính xác hơn là giao thức truyền tải giả hoặc giao thức lớp phiên) sử dụng UDP để thực hiện lưu lượng HTTP / 2.0 và phần lớn lưu lượng truy cập của Google đã sử dụng giao thức này. Nó hiện đang tiến tới tiêu chuẩn hóa dưới dạng HTTP / 3 .


Có bất kỳ máy chủ web nào có thể được cấu hình để chấp nhận các kết nối không phải là TCP không?
Spidey

1
Có sửa đổi đối với apache ở đây pel.cis.udel.edu để sử dụng giao thức SCTP thay vì TCP.
nos

@nos Yup và Google cũng có SPDY. Tuy nhiên, cả hai đều là cơ chế vận chuyển đáng tin cậy .
Alnitak

5
@Alnitak SPDY là một giao thức lớp ứng dụng, không phải là một giao thức lớp truyền tải.
Đi bộ Wiki

@WalkingWiki, tất nhiên bạn đúng - trong bối cảnh đó, SPDY thay thế HTTP, không phải TCP.
Alnitak

36

Có thể chỉ là một chút rắc rối, nhưng UPnP sẽ sử dụng các thông báo được định dạng HTTP qua UDP để khám phá thiết bị.


4
Cụ thể hơn, phần UPnP sử dụng các thông báo giống UDP và HTTP được gọi là SSDP (Simple Service Discovery Protocol). Cấu trúc thông báo giống nhau, nhưng METHODtập hợp khác nhau. Sau đó, UPnP sử dụng các giao thức khác (và thường là TCP) cho phần còn lại của những gì nó thực hiện.
Jesse Chisholm

20

Có, HTTP, như một giao thức ứng dụng, có thể được chuyển qua giao thức truyền tải UDP. Dưới đây là một số dịch vụ sử dụng UDP và một giao thức cơ bản để truyền dữ liệu HTTP và truyền trực tuyến đến người dùng cuối:

  • Phương thức truyền tải UDP thô Jingle của XMPP
  • Một số cho các dịch vụ sử dụng UDT --- Giao thức truyền dữ liệu dựa trên UDP, là một tập hợp siêu của giao thức UDP.
  • Giao thức Bảo mật lớp truyền tải (TLS) đóng gói HTTP cũng như XMPP được đề cập ở trên và các giao thức ứng dụng khác có một triển khai sử dụng UDP trong lớp truyền tải của nó; triển khai này được gọi là Datagram Transport Layer Security (DTLS).
  • Thông báo đẩy trong GNUTella là các yêu cầu HTTP được gửi qua truyền tải UDP.

Bài viết này cung cấp thêm chi tiết về phát trực tuyến qua UDP và bộ siêu đáng tin cậy của nó, RUDP: UDP đáng tin cậy (RUDP): Giao thức truyền tải lớn tiếp theo?


1
Một câu hỏi khác: các trình duyệt web chính có hỗ trợ các trang web HTTP qua UDP không?
dùng2284570

có vì HTTP nằm trong lớp ứng dụng và UDP ở lớp truyền tải. trình duyệt không ghi gói TCP hoặc UDP. Họ cũng không viết các gói IP. Chúng được xử lý bởi hệ điều hành và trình điều khiển. Lớp Ethernet thấp đến mức nó có thể nằm trong chip gần MAC tại thời điểm này.
yan bellavance

@yanbellavance điều đó hoàn toàn không chính xác. Trong khi các trình duyệt và máy chủ web thực sự không tạo ra nguyên khung TCP (hay những UDP cho rằng vấn đề) họ làm phải chọn phương tiện giao thông để sử dụng, và cho HTTP bình thường mà luôn TCP. Tuy nhiên, giao thức giả QUIC mới hơn không sử dụng UDP.
Alnitak

18

Tất nhiên, nó không nhất thiết phải được truyền qua TCP. Tôi đã triển khai HTTP trên UDP, để sử dụng trong ngành Phát thanh Truyền hình Vệ tinh.


6

Có thể một số thay đổi về chủ đề này với QUIC

QUIC (Quick UDP Internet Connections, phát âm là nhanh) là một giao thức mạng tầng vận chuyển thử nghiệm do Google phát triển và triển khai vào năm 2013. QUIC hỗ trợ một tập hợp các kết nối đa hợp giữa hai điểm cuối qua Giao thức dữ liệu người dùng (UDP) và được thiết kế để cung cấp bảo vệ an ninh tương đương với TLS / SSL, cùng với việc giảm độ trễ kết nối và truyền tải, đồng thời ước tính băng thông theo từng hướng để tránh tắc nghẽn. Mục tiêu chính của QUIC là tối ưu hóa các ứng dụng web hướng kết nối hiện đang sử dụng TCP.


4

Nếu bạn đang phát trực tuyến mp3 hoặc video có thể không nhất thiết phải qua HTTP, trên thực tế, tôi sẽ ngạc nhiên nếu có. Nó có thể sẽ là một giao thức khác qua TCP nhưng tôi không hiểu lý do gì khiến bạn không thể phát trực tuyến qua UDP.

Nếu bạn có, bạn phải lưu ý rằng không có gì chắc chắn rằng dữ liệu của bạn sẽ đến đầu bên kia, nhưng tôi có thể hiểu rằng bạn biết về UDP.

Để trả lời câu hỏi của bạn, Không, HTTP KHÔNG sử dụng UDP. Tuy nhiên, đối với những gì bạn đang nói, phát trực tuyến mp3 / video SẼ xảy ra qua UDP và theo ý kiến ​​của tôi sẽ không bao giờ xảy ra qua HTTP.


1
"phát trực tuyến" qua HTTP thường được gọi (cái mà tôi coi là chính xác nhất) "phát trực tuyến giả" - một tốc độ bit được quy định của dữ liệu qua HTTP. Cũng giống như trong thế giới của chúng ta, các loại hình tiếp thị đã lạm dụng danh pháp để lại cho những người định hướng chi tiết như chúng ta nắm bắt các chi tiết cụ thể.
Stu Thompson

4

Về lý thuyết, có thể sử dụng UDP cho http nhưng điều đó có thể có vấn đề. Ví dụ trong ví dụ của bạn, một mp3 hoặc một video đang được phát trực tuyến, sẽ có vấn đề về thứ tự và một số bit có thể bị thiếu vì UDP không được định hướng kết nối nên không có cơ chế truyền lại.


1
Vâng đề cập: UDP is not connection oriented there is no retransmit mechanism.
ivanleoncz

4

Tôi nghĩ rằng một số câu trả lời đang thiếu một điểm quan trọng. Lựa chọn giữa UDP và TCP không nên dựa trên loại dữ liệu (ví dụ: âm thanh hoặc video) hoặc liệu ứng dụng có bắt đầu phát nó trước khi quá trình truyền hoàn tất ("phát trực tuyến") hay không, mà là thời gian thực . Dữ liệu thời gian thực (theo định nghĩa) nhạy cảm với độ trễ, vì vậy nó thường được gửi tốt nhất qua RTP / UDP (Giao thức thời gian thực qua UDP).

Độ trễ không phải là vấn đề với dữ liệu được lưu trữ từ tệp, ngay cả khi đó là âm thanh và / hoặc video, vì vậy tốt nhất có thể nó nên được gửi qua TCP để mọi mất mát gói có thể được sửa chữa. Người gửi có thể đọc trước và giữ cho đường ống mạng luôn đầy và người nhận cũng có thể sử dụng nhiều bộ đệm phát để không bị gián đoạn bởi việc truyền lại TCP không thường xuyên hoặc mạng bị chậm lại trong giây lát. Trường hợp giới hạn là toàn bộ bản ghi được chuyển trước khi bắt đầu phát lại. Điều này giúp loại bỏ bất kỳ nguy cơ ngừng phát lại nào, nhưng thường không thực tế.

Vấn đề với TCP cho dữ liệu thời gian thực không phải là việc truyền lại quá nhiều bộ đệm quá mức vì TCP cố gắng sử dụng đường ống hiệu quả nhất có thể mà không liên quan đến độ trễ. UDP duy trì ranh giới gói ứng dụng và không có bộ nhớ trong, vì vậy nó không gây ra bất kỳ độ trễ nào.


3

Câu trả lời:

Lý do: Xem mô hình OSI.

Giải thích:

HTTP là một giao thức lớp ứng dụng, có thể được đóng gói bằng một giao thức sử dụng UDP, cung cấp giao tiếp đáng tin cậy nhanh hơn TCP. Daemon máy chủ và máy khách rõ ràng sẽ cần hỗ trợ giao thức mới này. Giao thức Quake 2 chứng minh rằng UDP có thể được sử dụng qua TCP để cung cấp cơ sở cho một hệ thống truyền thông có cấu trúc đảm bảo kiểm soát luồng (ví dụ: id chunk).


1
Bạn không thể đánh bại TCP bằng tay mà không có nhiều thông tin hơn mức bạn phải có ở cấp độ đó.
Joshua

1
"UDP có thể được sử dụng qua TCP". Cả hai đều là giao thức lớp truyền tải, vì vậy nó là cái này hay cái khác.
opyate




1

UDP là giao thức tốt nhất để phát trực tuyến, vì nó không yêu cầu các gói bị thiếu như TCP. Và nếu nó không tạo ra yêu cầu, dòng chảy sẽ nhanh hơn nhiều và không có bất kỳ bộ đệm nào.

Ngay cả độ trễ luồng cũng ít hơn TCP. Đó là bởi vì TCP (là một giao thức an toàn hơn nhiều) tạo ra các yêu cầu về các gói bị thiếu, ghi đè các gói hiện có.

Vì vậy, TCP là một giao thức quá tiên tiến để được sử dụng để phát trực tuyến.


3
điều này không trả lời câu hỏi, Tuy nhiên nó có thể là lý do cho một câu trả lời.
Hawken

2
re: "giao thức tốt nhất để phát trực tuyến" cho rằng "tốc độ của các khối dữ liệu riêng lẻ" nó quan trọng hơn "tất cả dữ liệu được truyền qua". Nếu luồng của bạn không thể dễ dàng khôi phục từ các phần bị thiếu, thì bạn nên sử dụng TCP. Nhiều giao thức video bảo mật chọn TCP vì lý do đó - độ tin cậy quan trọng hơn tốc độ thô.
Jesse Chisholm
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.