UDP ทำอะไรเลยหรือไม่?

Sep 15 2020

ฉันเข้าใจว่า TCP มีตรรกะในการสร้างความมั่นใจในการสื่อสารที่เชื่อถือได้ แต่ UDP เพียงแค่ส่งข้อมูลไปตามช่องทางที่ตั้งค่าไว้โดยใช้ IP และสิ่งต่างๆในเลเยอร์ที่ต่ำกว่า

UDP ทำอะไรได้จริงหรือ? ฉันงงว่าทำไมมันถึงมีชื่อ

คำตอบ

60 JeffWheeler Sep 15 2020 at 07:10

มุมมองและคำถามที่น่าสนใจ!

ใช่ส่วนใหญ่ของสิ่ง UDP ไม่เป็นจัดหาวิธีมาตรฐานสำหรับการใช้งานหลายคนที่จะอยู่ร่วมโดยใช้ที่อยู่ IP เดียวกันโดยการกำหนดแนวคิดของUDP พอร์ต

ส่วนที่น่าตื่นเต้นเกี่ยวกับ UDP ไม่ใช่โปรโตคอลเครือข่ายมากนัก แต่เป็น API ที่ใช้งานโดยระบบปฏิบัติการและไลบรารีซ็อกเก็ต แม้ว่าจะไม่ได้เป็นส่วนหนึ่งของข้อกำหนด UDP แต่ความสามารถในการใช้ abstractions เช่น POSIX socket API เพื่อพัฒนาซอฟต์แวร์บนโปรโตคอลอย่าง UDP เป็นกุญแจสำคัญในความสำเร็จของ Internet Protocol stack

45 RonMaupin Sep 15 2020 at 06:11

UDP เป็นโปรโตคอลการขนส่งเช่น TCP นั่นหมายความว่ามีโปรโตคอลสำหรับแอปพลิเคชันเพื่อใช้ IP เช่นเดียวกับ TCP UDP มีการกำหนดแอดเดรส (พอร์ต) ที่แอ็พพลิเคชันผูกไว้เพื่อให้ดาตาแกรมที่กำหนดไปยังแอ็พพลิเคชันที่ถูกผูกไว้ถูกส่งโดย UDP ไปยังแอ็พพลิเคชันที่ถูกต้อง UDP สำหรับ IPv4 ยังมีการตรวจสอบที่เป็นทางเลือก แต่จำเป็นต้องมีการตรวจสอบสำหรับ IPv6

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

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

14 AustinHemmelgarn Sep 16 2020 at 05:27

ฉันขอแนะนำให้คุณดูว่าโปรโตคอลระดับสูงกว่าที่ใช้ UDP ใช้งานจริงได้อย่างไร ตัวอย่างคลาสสิกและเอกสารที่ดีคือ DNS (ในกรณีส่วนใหญ่เป็นไปได้ที่จะทำ DNS ผ่าน TCP แต่เป็นเรื่องผิดปกติจริงๆ), DHCP, NTP และ PTP

โปรโตคอลเหล่านี้ทั้งหมดมีบางสิ่งบางอย่างที่เหมือนกัน:

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

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

กล่าวอีกนัยหนึ่งคือ 'คุณลักษณะ' ของ UDP ที่ทำให้คุณไม่ต้องกังวลเลยก็คือมันให้ค่าต่ำสุดที่เปลือยเปล่าสำหรับสองจุดแรกเหล่านั้นโดยไม่เข้ามาขวางทางคุณเหมือนกับที่ TCP ทำกับแอปพลิเคชันประเภทนี้ นอกจากนี้ยังมีบิตของประโยชน์มากกว่า TCP ในการที่จะเป็นที่น่ารำคาญในการดำเนินการอย่างใดอย่างหนึ่งอย่างหมดจดในฮาร์ดแวร์หรือระบบ miniscule ที่มีน้อยกว่า 1KB of RAM และจำนวนเงินที่ miniscule ของพื้นที่เก็บข้อมูลสำหรับรหัส (นี้เป็นส่วนหนึ่งของเหตุผลที่ BOOTP, RARP, TFTP และโปรโตคอล bootstrap อื่น ๆ ที่ใช้มา แต่เดิม) ข้อเสียคือความน่าเชื่อถือและความอ่อนไหวต่อการโจมตีบางประเภทหากใช้ 'การเชื่อมต่อ' ที่มีสถานะเป็นเวลานานโดยไม่มีการจัดการที่รอบคอบมากนัก แต่โปรโตคอลที่ใช้และใส่ใจในการจัดการนั้นเอง (ดู TFTP สำหรับตัวอย่างการจัดการกับ ปัญหาความน่าเชื่อถือแม้ว่าจะเสียค่าใช้จ่าย)

ขณะนี้มีตัวเลือกที่สามารถบรรลุชุดคุณลักษณะที่คล้ายกัน (หรือชุดคุณลักษณะที่ครอบคลุมมากขึ้น) ไปยัง TCP โดยมีค่าใช้จ่ายน้อยกว่ามากและยังคงอนุญาตให้มีการสื่อสารที่มุ่งเน้นข้อความ (ตัวอย่างหลัก ได้แก่ RUDP, DCCP และ SCTP) พวกเขาไม่ได้จริงๆ ติดอยู่ด้วยเหตุผลหลายประการดังนั้น UDP จึงเป็นเพียงไม้รอบ ๆ

7 iBug Sep 15 2020 at 23:26

มีจุดสำคัญที่UDP ไม่จำเป็นต้องมีการตั้งค่า "การเชื่อมต่อ"

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

ในทำนองเดียวกันการดำเนินการออกอากาศเครือข่ายส่วนใหญ่ไม่ค่อยมีเหตุผลกับ TCP * เนื่องจากคุณไม่สามารถ "เชื่อมต่อ" กับ "เป้าหมายการออกอากาศ" ที่ทุกโฮสต์ยอมรับและตอบสนอง สิ่งต่างๆเช่นหมายเลขลำดับและการตรวจสอบจะไม่รวมกัน

* เราไม่ได้พูดถึงสิ่งต่างๆเช่นMPI_Bcast(). คำถามนี้อยู่นอกขอบเขตจริงๆ

6 PeterGreen Sep 17 2020 at 04:42

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

โดยหลักการแล้วคุณสามารถสร้างโปรโตคอลแอปพลิเคชันของคุณได้โดยตรงที่ด้านบนของ IP และรับหมายเลขโปรโตคอลสำหรับมัน ใช้งานได้ดีหากคุณมีโปรโตคอลแอปพลิเคชันเพียงอินสแตนซ์เดียวในแต่ละโฮสต์อย่างไรก็ตามจะทำงานได้ไม่ดีนักหากคุณต้องการมีโปรโตคอลแอปพลิเคชันเดียวกันหลายอินสแตนซ์

ด้วยการมีหมายเลขพอร์ตต้นทางและปลายทางแยกจากกันและกำหนดรูปแบบที่ลูกค้าใช้พอร์ตชั่วคราวในขณะที่เซิร์ฟเวอร์ใช้พอร์ตที่รู้จักกันดีและการตอบสนองการสลับหมายเลขพอร์ต UDP สนับสนุนหลายอินสแตนซ์ของโปรโตคอลแอปพลิเคชันเดียวกันบนโฮสต์เดียวกัน

3 VictorCasado Sep 17 2020 at 22:16

มีบริการมัลติเพล็กซ์ / เดมัลติเพล็กซ์ไปยังเลเยอร์ด้านบน (App) เพื่อให้สามารถจัดการข้อมูลจากกระบวนการต่างๆ ด้วยการตรวจสอบจะทำให้คุณตรวจพบข้อผิดพลาด

UDP ซึ่งเป็นโปรโตคอลที่เรียบง่ายมีประโยชน์สำหรับโปรโตคอลชั้นบนที่ต้องการการสื่อสารที่รวดเร็วโดยไม่จำเป็นต้องสร้างการเชื่อมต่อหรือการถ่ายโอนข้อมูลที่เชื่อถือได้

นอกจากนั้นโปรโตคอลบางอย่างเช่น DNS ใช้ UDP เพื่อจุดประสงค์ ...

1 cybernard Sep 16 2020 at 01:51

ฉันคิดว่าสิ่งสำคัญคือต้องทราบว่า DHCP อาศัย UDP 100% และมีการใช้กันอย่างแพร่หลายมาก

นอกจากนี้ DNS ยังใช้ UDP ในอดีตและใช้ TCP เฉพาะเมื่อการตอบสนองใหญ่เกินไปสำหรับแพ็กเก็ต UDP