HTTP ใช้ UDP หรือไม่


104

นี่อาจเป็นคำถามโง่ ๆ :

  • HTTP เคยใช้ User Datagram Protocol หรือไม่?

ตัวอย่างเช่น:

หากสตรีมมิ่ง MP3 หรือวิดีโอโดยใช้ HTTP จะใช้ UDP ในการขนส่งหรือไม่


คุณหมายถึงอะไร: "เว็บ"? คุณหมายถึงการใช้เบราว์เซอร์? หรือผ่านอินเทอร์เน็ตสาธารณะ?
benc

สิ่งที่ผมหมายถึงการถามก็บอกว่ามีเป็น mp3 โฮสต์บนบางสิ่งบางอย่าง URL เช่นSOMESERVER / somemusic.mp3 หากสตรีมไปยังไคลเอนต์ - เบราว์เซอร์อุปกรณ์ ฯลฯ http จะโอนสิ่งนี้อย่างไร หากฉันเข้าใจคำตอบด้านล่างอย่างถูกต้องนี่คือการมอบหมายให้ RTP
Sesh

นอกจากนี้พอร์ต 80 UDP ยังสงวนไว้สำหรับ HTTP ซึ่งฉันรู้สึกสนุกอย่างที่ไม่เคยเห็นมาก่อนและฉันก็นึกไม่ออกว่าจะใช้ประโยชน์ได้ดี
Joshua

1
สงวนลิขสิทธิ์เนื่องจากคณะกรรมการ IANA มีจินตนาการที่ยืดหยุ่นกว่าที่คุณทำ ;-) พวกเขาคิดว่าอาจจะมีประโยชน์สำหรับมัน นอกจากนี้การไม่จองพอร์ต 80 สำหรับ UDP / HTTP จะปล่อยให้มันเปิดไว้สำหรับโปรโตคอล UDP อื่น ๆ ซึ่งจะทำให้เกิดความสับสนเมื่อพูดถึงพอร์ต 80
Jesse Chisholm

คำตอบ:


43

โดยปกติแล้วไม่

ไม่ค่อยมีการใช้การสตรีมผ่าน HTTP และ HTTP แทบจะไม่ทำงานผ่าน UDP ดู แต่RTP

สำหรับบางสิ่งตามตัวอย่างของคุณ (ในความคิดเห็น) คุณไม่ได้แสดงโปรโตคอลสำหรับทรัพยากร ถ้าโปรโตคอลนั้นเป็น HTTP ฉันจะไม่เรียกการเข้าถึงว่า "สตรีมมิ่ง" แม้ว่าในบางแง่ของคำก็คือเนื่องจากมันส่งทรัพยากร (อาจมีขนาดใหญ่) แบบอนุกรมผ่านเครือข่าย โดยปกติทรัพยากรจะถูกบันทึกลงในดิสก์ภายในเครื่องก่อนที่จะเล่นดังนั้นการถ่ายโอนเครือข่ายจึงไม่ได้หมายถึง "สตรีมมิง"

ตามที่ผู้แสดงความคิดเห็นได้ชี้ให้เห็นว่าเป็นไปได้อย่างแน่นอนที่จะสตรีมผ่าน HTTP และบางคนก็ทำได้


16
เห็นได้ชัดว่าผิดพลาดไม่มีสิ่งใดใน HTTP ที่ป้องกันการสตรีมได้ แต่ไม่ได้มีประสิทธิภาพเท่ากับโปรโตคอลเฉพาะ HTTP Dyanmic Streaming โดยใช้ chunks: adobe.com/products/httpdynamicstreaming HTTP Pseudo-Streaming: longtailvideo.com/support/jw-player/jw-player-for-flash-v5/…
Steve-o

14
สตรีม youtube ผ่าน http
เลขที่

6
@ snowcrash09 ฉันลบมันเองไม่ได้เพราะมันถูกยอมรับ แปลกแฮะ, แปลกนะ, มันแปลก ๆ นะ. ฉันเขียนมันใหม่ฉันหวังว่าตอนนี้มันจะมีความผิดน้อยลง
ผ่อนคลาย

1
เพียงแค่มีความเข้าใจเกี่ยวกับ HTTP และการสตรีม - ย้อนกลับไปในยุคมืดของวิดีโอ QuickTime มีserver pushที่การเชื่อมต่อ HTTP ส่ง MJPEG (ภาพ JPEG หลายภาพ) แต่ละภาพเป็นส่วนแยกของการตอบสนอง MIME หลายส่วนต่อคำขอ HTTP ภาพ JPEG แต่ละภาพจะเข้ามาแทนที่ภาพก่อนหน้าในจอแสดงผล แต่คุณถูกต้อง @unwind ซึ่งแทบจะไม่เกิดขึ้นในวันนี้เนื่องจาก RTP / RTSP ทำงานได้ดีขึ้น
Jesse Chisholm

3
@nos Youtube ไม่สตรีมมิ่ง เบราว์เซอร์จะดาวน์โหลดไฟล์ลงในแคชและเริ่มเล่นจากไฟล์ก่อนที่จะดาวน์โหลดอย่างสมบูรณ์ แม้ว่าจะจำลองการสตรีม แต่ก็ไม่ได้เป็นเช่นนั้น
SimonStiph

114

จากRFC 2616 :

การสื่อสาร HTTP มักเกิดขึ้นผ่านการเชื่อมต่อ TCP / IP พอร์ตเริ่มต้นคือ TCP 80 แต่สามารถใช้พอร์ตอื่นได้ สิ่งนี้ไม่ได้กีดกันไม่ให้นำ HTTP ไปใช้กับโปรโตคอลอื่น ๆ บนอินเทอร์เน็ตหรือบนเครือข่ายอื่น ๆ HTTP ถือว่าเป็นการขนส่งที่เชื่อถือได้เท่านั้น สามารถใช้โปรโตคอลใด ๆ ที่ให้การค้ำประกันดังกล่าวได้ การแมปคำขอ HTTP / 1.1 และโครงสร้างการตอบกลับไปยังหน่วยข้อมูลการขนส่งของโปรโตคอลที่เป็นปัญหาอยู่นอกขอบเขตของข้อกำหนดนี้

ดังนั้นแม้ว่าจะไม่ได้กล่าวอย่างชัดเจน แต่ก็ไม่ได้ใช้ UDP เนื่องจากไม่ใช่ "การขนส่งที่เชื่อถือได้"

แก้ไข - เมื่อเร็ว ๆ นี้โปรโตคอล QUIC (ซึ่งเป็นการขนส่งหลอกหรือโปรโตคอลชั้นเซสชันที่เคร่งครัดกว่า) ใช้ UDP สำหรับการรับส่งข้อมูล HTTP / 2.0 และการรับส่งข้อมูลส่วนใหญ่ของ Google ใช้โปรโตคอลนี้อยู่แล้ว มันกำลังคืบหน้าไปสู่มาตรฐานเป็นHTTP / 3


มีเว็บเซิร์ฟเวอร์ใดบ้างที่สามารถกำหนดค่าให้ยอมรับการเชื่อมต่อที่ไม่ใช่ TCP?
Spidey

1
มีการดัดแปลง apache ที่นี่pel.cis.udel.eduเพื่อใช้โปรโตคอล SCTP แทน TCP
เลขที่

@nos Yup และ Google ก็มี SPDY เช่นกัน ทั้งสองเป็นกลไกการขนส่งที่เชื่อถือได้
Alnitak

5
@Alnitak SPDY เป็นโปรโตคอลชั้นแอปพลิเคชันไม่ใช่โปรโตคอลชั้นการขนส่ง
Walking Wiki

@WalkingWiki คุณถูกต้องแน่นอน - ในบริบทนั้น SPDY จะแทนที่ HTTP ไม่ใช่ TCP
Alnitak

37

อาจจะเป็นเรื่องเล็กน้อย แต่ UPnP จะใช้ข้อความที่จัดรูปแบบ HTTP ผ่าน UDP สำหรับการค้นหาอุปกรณ์


4
เพื่อให้เฉพาะเจาะจงมากขึ้นส่วนของ UPnP ที่ใช้ UDP และข้อความคล้าย HTTP เรียกว่า SSDP (Simple Service Discovery Protocol) โครงสร้างข้อความเหมือนกัน แต่METHODชุดต่างกัน หลังจากนั้น UPnP จะใช้โปรโตคอลอื่น ๆ (และโดยปกติจะเป็น TCP) สำหรับสิ่งที่เหลือ
Jesse Chisholm

20

ใช่ HTTP เป็นโปรโตคอลแอปพลิเคชันสามารถถ่ายโอนผ่านโปรโตคอลการขนส่ง UDP นี่คือบริการบางส่วนที่ใช้ UDP และโปรโตคอลพื้นฐานสำหรับการถ่ายโอนข้อมูล HTTP และสตรีมไปยังผู้ใช้ปลายทาง:

  • วิธีการขนส่ง Jingle Raw UDP ของ XMPP
  • หมายเลขสำหรับบริการที่ใช้ UDT - UDP-based Data Transfer Protocol ซึ่งเป็นส่วนเหนือของโปรโตคอล UDP
  • โปรโตคอล Transport Layer Security (TLS) ที่ห่อหุ้ม HTTP เช่นเดียวกับ XMPP ที่กล่าวถึงข้างต้นและโปรโตคอลแอปพลิเคชันอื่น ๆ มีการใช้งานที่ใช้ UDP ในเลเยอร์การขนส่ง การใช้งานนี้เรียกว่า Datagram Transport Layer Security (DTLS)
  • การแจ้งเตือนแบบพุชใน GNUTella เป็นคำขอ HTTP ที่ส่งผ่านการขนส่ง UDP

บทความนี้มีรายละเอียดเพิ่มเติมเกี่ยวกับการสตรีมผ่าน UDP และ superset ที่เชื่อถือได้ RUDP: Trusted UDP (RUDP): The Next Big Streaming Protocol?


1
คำถามอื่น: เว็บเบราว์เซอร์หลักรองรับหน้าเว็บ HTTP ผ่าน UDP หรือไม่?
user2284570

ใช่เนื่องจาก HTTP อยู่ในเลเยอร์แอปพลิเคชันและ UDP ในเลเยอร์การขนส่ง เบราว์เซอร์ไม่เขียนแพ็กเก็ต TCP หรือ UDP พวกเขาไม่เขียนแพ็กเก็ต IP สิ่งเหล่านี้ได้รับการจัดการโดย OS และไดรเวอร์ ชั้นอีเธอร์เน็ตต่ำมากจนสามารถอยู่ในชิปใกล้เคียงกับ MAC ได้ในจุดนี้
yan bellavance

@yanbellavance ไม่ถูกต้องทั้งหมด ในขณะที่เบราว์เซอร์และเว็บเซิร์ฟเวอร์จริงไม่สร้างดิบเฟรม TCP (หรือคน UDP สำหรับเรื่องที่) พวกเขาจะต้องเลือกการขนส่งการใช้งานและสำหรับ HTTP ปกติที่เสมอ TCP อย่างไรก็ตามโปรโตคอลหลอก QUIC ที่ใหม่กว่าใช้ UDP
Alnitak

18

แน่นอนว่าไม่จำเป็นต้องส่งผ่าน TCP ฉันติดตั้ง HTTP บน UDP เพื่อใช้ในอุตสาหกรรมการแพร่ภาพโทรทัศน์ผ่านดาวเทียม


6

อาจมีการเปลี่ยนแปลงบางอย่างในหัวข้อนี้ด้วยQUIC

QUIC (Quick UDP Internet Connections ออกเสียงว่าด่วน) เป็นโปรโตคอลเครือข่ายขนส่งชั้นทดลองที่พัฒนาโดย Google และนำมาใช้ในปี 2013 QUIC สนับสนุนชุดการเชื่อมต่อแบบมัลติเพล็กซ์ระหว่างสองจุดสิ้นสุดผ่าน User Datagram Protocol (UDP) และได้รับการออกแบบมาเพื่อให้การป้องกันความปลอดภัย เทียบเท่ากับ TLS / SSL พร้อมกับลดเวลาแฝงในการเชื่อมต่อและการขนส่งและการประมาณแบนด์วิดท์ในแต่ละทิศทางเพื่อหลีกเลี่ยงความแออัด เป้าหมายหลักของ QUIC คือการเพิ่มประสิทธิภาพเว็บแอปพลิเคชันที่เน้นการเชื่อมต่อที่ใช้ TCP อยู่ในปัจจุบัน


4

หากคุณกำลังสตรีมไฟล์ mp3 หรือวิดีโอที่อาจไม่จำเป็นต้องอยู่บน HTTP อันที่จริงฉันจะแปลกใจถ้าเป็นเช่นนั้น อาจเป็นโปรโตคอลอื่นบน TCP แต่ฉันไม่เห็นเหตุผลว่าทำไมคุณไม่สามารถสตรีมผ่าน UDP ได้

หากคุณต้องคำนึงว่าไม่มีความมั่นใจว่าข้อมูลของคุณจะมาถึงอีกด้านหนึ่ง แต่ฉันสามารถเข้าใจได้ว่าคุณรู้เกี่ยวกับ UDP

เพื่อตอบคำถามคุณไม่ HTTP ไม่ใช้ UDP สำหรับสิ่งที่คุณพูดถึงการสตรีม mp3 / วิดีโออาจเกิดขึ้นผ่าน UDP และในความคิดของฉันไม่ควรเกิดขึ้นผ่าน HTTP


1
"สตรีมมิ่ง" ผ่าน HTTP มักเรียกว่า (สิ่งที่ฉันคิดว่าถูกต้องที่สุด) "สตรีมมิงหลอก" - อัตราบิตที่มีการควบคุมผ่าน HTTP เช่นเดียวกับในโลกของเราประเภทการตลาดได้ใช้ระบบการตั้งชื่อในทางที่ผิดโดยทิ้งคนที่มุ่งเน้นรายละเอียดเช่นตัวเราเองที่เข้าใจเฉพาะเจาะจง
Stu Thompson

4

ในทางทฤษฎีใช่เป็นไปได้ที่จะใช้ UDP สำหรับ http แต่อาจเป็นปัญหาได้ ตัวอย่างเช่นในตัวอย่างของคุณกำลังสตรีม mp3 หรือวิดีโอจะมีปัญหาในการสั่งซื้อและบิตบางส่วนอาจหายไปเนื่องจาก UDP ไม่ได้มุ่งเน้นการเชื่อมต่อจึงไม่มีกลไกการส่งซ้ำ


1
กล่าวถึง: UDP is not connection oriented there is no retransmit mechanism.
ivanleoncz

4

ฉันคิดว่าคำตอบบางคำขาดประเด็นสำคัญ ทางเลือกระหว่าง UDP และ TCP ควรไม่ต้องขึ้นอยู่กับชนิดของข้อมูล (เช่นเสียงหรือวิดีโอ) หรือว่าโปรแกรมจะเริ่มต้นที่จะเล่นมันก่อนที่จะโอนเป็นที่เรียบร้อยแล้ว ( "สตรีมมิ่ง") แต่ไม่ว่าจะเป็นเวลาจริง ข้อมูลเรียลไทม์ (ตามคำจำกัดความ) ไวต่อความล่าช้าดังนั้นจึงมักส่งผ่าน RTP / UDP ได้ดีที่สุด (โปรโตคอลเรียลไทม์ผ่าน UDP)

ความล่าช้าไม่ใช่ปัญหากับข้อมูลที่จัดเก็บจากไฟล์แม้ว่าจะเป็นเสียงและ / หรือวิดีโอก็ตามดังนั้นจึงควรส่งผ่าน TCP ได้ดีที่สุดเพื่อให้สามารถแก้ไขการสูญเสียแพ็คเก็ตได้ ผู้ส่งสามารถอ่านล่วงหน้าและทำให้เน็ตเวิร์กไพพ์เต็มและผู้รับยังสามารถใช้บัฟเฟอร์การเล่นจำนวนมากได้ดังนั้นจึงไม่ถูกขัดจังหวะจากการส่ง TCP ใหม่เป็นครั้งคราวหรือการชะลอตัวของเครือข่ายชั่วขณะ ข้อ จำกัด คือการถ่ายโอนการบันทึกทั้งหมดก่อนที่จะเริ่มเล่น วิธีนี้ช่วยลดความเสี่ยงของการหยุดเล่น แต่มักจะไม่สามารถใช้งานได้จริง

ปัญหาเกี่ยวกับ TCP สำหรับข้อมูลแบบเรียลไทม์ไม่ใช่การส่งซ้ำมากเท่ากับการบัฟเฟอร์มากเกินไปเนื่องจาก TCP พยายามใช้ไปป์อย่างมีประสิทธิภาพมากที่สุดโดยไม่คำนึงถึงเวลาแฝง UDP รักษาขอบเขตแพ็คเก็ตของแอปพลิเคชันและไม่มีที่เก็บข้อมูลภายในดังนั้นจึงไม่ทำให้เกิดความหน่วงใด ๆ


3

คำตอบ:ใช่

เหตุผล:ดูโมเดล OSI

คำอธิบาย:

HTTP เป็นโปรโตคอลชั้นแอปพลิเคชันซึ่งสามารถห่อหุ้มด้วยโปรโตคอลที่ใช้ UDP ซึ่งให้การสื่อสารที่เชื่อถือได้เร็วกว่า TCP เซิร์ฟเวอร์ daemon และไคลเอ็นต์จำเป็นต้องสนับสนุนโปรโตคอลใหม่นี้อย่างชัดเจน โปรโตคอล Quake 2 พิสูจน์ว่าสามารถใช้ UDP ผ่าน TCP เพื่อเป็นพื้นฐานสำหรับระบบการสื่อสารที่มีโครงสร้างซึ่งรับประกันการควบคุมการไหล (เช่นรหัสชิ้น)


1
คุณไม่สามารถเอาชนะ TCP ด้วยมือได้หากไม่มีข้อมูลมากกว่าที่คุณควรจะมีในระดับนั้น
Joshua

1
"สามารถใช้ UDP ผ่าน TCP ได้" ทั้งสองเป็นโปรโตคอลชั้นการขนส่งดังนั้นจึงเป็นหนึ่งหรืออีกอย่างหนึ่ง
opyate


2

http ผ่าน udp ถูกใช้โดยการใช้งานตัวติดตาม torrent บางตัว (และ supporteb โดยลูกค้าหลักทั้งหมด)


4
โปรดใส่ข้อมูลอ้างอิงเพื่อสนับสนุนข้อความของคุณ
Max Leske

1
ตามที่ฉันอ่านโปรโตคอล Torrent UDP Tracker เป็นไบนารีและไม่ได้จัดรูปแบบเหมือน HTTP เลย xbtt.sourceforge.net/udp_tracker_protocol.html
Jesse Chisholm

2

(นี่เป็นคำถามเก่า แต่สมควรได้รับคำตอบที่อัปเดตแล้ว)

ในความเป็นไปได้ทั้งหมด HTTP / 3 จะใช้โปรโตคอล QUICซึ่งอธิบายไว้ว่า

การขนส่งแบบมัลติเพล็กซ์ผ่าน UDP

ดังนั้นจากมุมมองหนึ่งคุณสามารถพูดได้ว่า HTTP / 3 จะใช้ UDP


1

UDP เป็นโปรโตคอลที่ดีที่สุดสำหรับการสตรีมเนื่องจากไม่ต้องการแพ็กเกจที่ขาดหายไปเช่น TCP และหากไม่ตอบสนองความต้องการโฟลว์ก็เร็วขึ้นมากและไม่มีการบัฟเฟอร์ใด ๆ

แม้ความล่าช้าของสตรีมจะน้อยกว่า TCP นั่นเป็นเพราะ TCP (เป็นโปรโตคอลที่ปลอดภัยกว่ามาก) ทำให้ต้องการแพ็กเกจที่หายไปโดยเขียนทับแพ็กเกจที่มีอยู่

ดังนั้น TCP จึงเป็นโปรโตคอลขั้นสูงเกินกว่าที่จะใช้สำหรับการสตรีม


3
สิ่งนี้ไม่ตอบคำถาม แต่อาจเป็นเหตุผลสำหรับคำตอบ
Hawken

2
re: "โปรโตคอลที่ดีที่สุดสำหรับการสตรีม" เนื่องจาก "ความเร็วของข้อมูลแต่ละส่วน" สำคัญกว่า "ข้อมูลทั้งหมดที่รับผ่าน" หากสตรีมของคุณไม่สามารถกู้คืนจากชิ้นส่วนที่ขาดหายไปได้อย่างง่ายดายคุณควรใช้ TCP โปรโตคอลวิดีโอความปลอดภัยจำนวนมากเลือก TCP ด้วยเหตุผลนั้น - ความน่าเชื่อถือมีความสำคัญมากกว่าความเร็วดิบ
Jesse Chisholm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.