ความแตกต่างระหว่าง TCP และ UDP หรือไม่


144

ความแตกต่างระหว่าง TCP และ UDP คืออะไร

ฉันรู้ว่า TCP ถูกใช้ในกรณีของแอพพลิเคชั่นที่ไม่เกี่ยวกับเวลาและ UDP ใช้สำหรับเกมหรือแอพพลิเคชั่นที่ต้องการการส่งข้อมูลที่รวดเร็ว ฉันรู้ว่า TCP ใช้สำหรับ HTTP, HTTPs, FTP, SMTP และ Telnet ฉันรู้ว่า UDP นั้นใช้สำหรับ DNS และ DHCP

แต่ทำไม คุณลักษณะใดของ TCP และ UDP ที่ทำให้มีประโยชน์สำหรับกรณีการใช้งานตามลำดับ?


13
และนี่ ( skullbox.net/tcpudp.php ) - ซึ่งเป็นครั้งแรกที่ Google ตี - ไม่ชัดเจนเพียงพอหรือไม่ มีอะไรสับสนเกี่ยวกับเรื่องนี้? บางทีนี่อาจจะดีกว่า tcpipguide.com/free/…
S.Lott

1
ฉันสงสัยจริงๆว่าทำไมคำถามนี้มี 3 upvotes (ตอนที่เขียน) ประโยคแรกนั้นไม่เข้าท่าและมีเนื้อหามากมายในหัวข้อนี้หากค้นหาเพียงครั้งเดียว
MattH

21
@MattH: 1) เป็นคำถามที่ดีถ้าค่อนข้างกว้างและซ้ำกันได้รับคำตอบแล้ว 2) คุณมีชื่อเสียงมากพอที่จะแก้ไขการพิมพ์ผิดในประโยคแรก 3) ไม่เกี่ยวข้องว่ามีข้อมูลเกี่ยวกับเรื่องนี้อยู่ที่อื่น กองมากเกินเป้าหมายที่จะเป็นพื้นที่เก็บข้อมูลของความรู้และคำถามคำตอบ canonically ที่นี่
ire_and_curses

2
น่าสนใจที่แทบจะไม่มีใครพูดถึงว่า DHCP ใช้การออกอากาศ แต่ทุกคนคิดว่า 'คำตอบ' นั้นเกี่ยวกับการรับประกันการส่งและการส่งใหม่
Heath Hunnicutt

1
สำหรับคนอื่นที่อ่านข้อความนี้ในอนาคตไซต์ Skullbox ที่กล่าวถึงข้างต้นมีมัลแวร์ตาม Google (มันหยุดฉันเมื่อฉันคลิกที่มัน) ฉันไม่แนะนำให้ไปที่นั่น
Alan006

คำตอบ:


119

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

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

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


5
ตัวอย่างที่ใช้ UDP อยู่ในการส่งสัญญาณภาพและเสียงที่สูญเสียแพ็คเก็ตบางส่วนที่นี่และมักจะไม่สำคัญมาก (สีของเฟรมอาจจะดับหรือเสียงเล็ก ๆ น้อย ๆ นาโนวินาทีอาจถูกตัดหรือดัดแปลง - ไม่สังเกตเห็นได้ชัดสำหรับมนุษย์) แน่นอนหากการเชื่อมต่อของคุณไม่ดีจริง ๆ คุณอาจสูญเสียแพ็กเก็ตจำนวนมากที่วิดีโอปรากฏพร่ามัว / พิกเซลและเสียงจะเลือนหายไปและตัดออกเป็นจำนวนมาก
Niko Bellic

53

จากบทความ Skullbox:

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

UDP (User Datagram Protocol) เป็นโปรโตคอลที่ใช้กันทั่วไปมากบนอินเทอร์เน็ต อย่างไรก็ตาม UDP ไม่เคยถูกใช้เพื่อส่งข้อมูลสำคัญเช่นเว็บเพจข้อมูลฐานข้อมูล ฯลฯ UDP มักใช้สำหรับการสตรีมเสียงและวิดีโอ สื่อแบบสตรีมมิ่งเช่นไฟล์เสียง Windows Media (.WMA), Real Player (.RM) และอื่น ๆ ใช้ UDP เพราะให้ความเร็ว! สาเหตุ UDP เร็วกว่า TCP เนื่องจากไม่มีรูปแบบการควบคุมการไหลหรือการแก้ไขข้อผิดพลาด ข้อมูลที่ส่งผ่านอินเทอร์เน็ตได้รับผลกระทบจากการชนกันและจะมีข้อผิดพลาดเกิดขึ้น โปรดจำไว้ว่า UDP เกี่ยวข้องกับความเร็วเท่านั้น นี่คือเหตุผลหลักว่าทำไมสื่อสตรีมมิงจึงไม่ได้คุณภาพสูง

1) TCP คือการเชื่อมต่อที่มุ่งเน้นและเชื่อถือได้เนื่องจาก UDP นั้นเชื่อมต่อน้อยลงและไม่น่าเชื่อถือ

2) TCP ต้องการการประมวลผลเพิ่มเติมที่ระดับเครือข่ายอินเทอร์เฟซโดยที่ไม่ได้อยู่ใน UDP

3) ใช้ TCP, การจับมือ 3 ทาง, การควบคุมความแออัด, การควบคุมการไหลและกลไกอื่น ๆ เพื่อให้แน่ใจว่าการส่งผ่านที่เชื่อถือได้

4) UDP ส่วนใหญ่จะใช้ในกรณีที่ความล่าช้าของแพ็คเก็ตมีความร้ายแรงมากกว่าการสูญเสียแพ็กเก็ต


1
+1 สรุปที่ดีพอสมควร แม้ว่าis the most commonly used protocol on the Internetคำสั่งเป็นที่ถกเถียงและจริงๆมันขึ้นอยู่กับว่าคุณกำหนดmost commonly used, และprotocol the Internetตัวอย่างเช่นโพรโทคอลอินเทอร์เน็ตเป็นคู่แข่งที่มีแนวโน้มที่จะสวมมงกุฎนั้น
MattH

-1: เหตุผลที่ใช้ UDP สำหรับ DHCP ไม่มีส่วนเกี่ยวข้องกับความล่าช้าหรือการสูญหายของแพ็กเก็ต
Heath Hunnicutt

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

UDP ใช้สำหรับ DHCP เนื่องจาก TCP ไม่รองรับการออกอากาศ DHCP อาศัยการใช้งานการออกอากาศเพื่อรับที่อยู่ IP สำหรับเซิร์ฟเวอร์ DHCP ดูstackoverflow.com/questions/21266008/…
ScottSmudger

41

คิดว่า TCP เป็นแพคเกจรับ / ส่งพัสดุระหว่าง UPS / FedEx ตามกำหนดเวลาโดยเฉพาะระหว่างสองสถานที่ในขณะที่ UDP นั้นเทียบเท่ากับการโยนไปรษณียบัตรในกล่องจดหมาย

UPS / FedEx จะทำสิ่งที่อันตรายที่สุดเพื่อให้แน่ใจว่าพัสดุที่คุณส่งออกไปถึงที่นั่นและไปถึงที่นั่นตรงเวลา ด้วยการ์ดโพสต์คุณโชคดีถ้ามาถึงและอาจมาถึงตามคำสั่งหรือล่าช้า (คุณได้รับไปรษณียบัตรจากใครสักคนกี่ครั้งหลังจากที่พวกเขากลับบ้านจากวันหยุด?)

TCP นั้นใกล้เคียงกับโปรโตคอลการส่งมอบที่ได้รับการรับรองอย่างที่คุณจะได้รับขณะที่ UDP นั้นเป็นเพียง "ความพยายามที่ดีที่สุด"


1
คำตอบที่ดีพอสมควร ฉันจะเพิ่มว่าในกระแส TCP แพ็คเก็ตได้รับการยอมรับจากปลายทางและแพ็คเก็ตที่เสียหาย / แพ็คเก็ตที่หายไปจะถูกส่งอีกครั้งโดยผู้ส่ง ใน UDP แพ็คเก็ตจะถูกส่งและปลายทางได้รับพวกเขาในลำดับใด ๆ และไม่ยอมรับการรับ
Erik Nedwidek

2
บิตของการเปรียบเทียบที่ทำให้เข้าใจผิดอาจเหมาะกว่าสำหรับ QoS
MattH

11
ฉันชอบการเปรียบเทียบมาก แต่สิ่งหนึ่งที่คำตอบนี้ผิดเล็กน้อยคือความเร็ว มันทำให้ดูเหมือนว่า TCP เร็วขึ้นเมื่อในความเป็นจริง UDP เป็นเพราะมีค่าใช้จ่ายน้อย
iliketocode

22

เหตุผลที่ใช้ UDP สำหรับ DNS และ DHCP:

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

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

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


17

หนึ่งในความแตกต่างคือในระยะสั้น

UDP : ส่งข้อความและอย่ามองย้อนกลับไปถึงปลายทางโปรโตคอลการเชื่อมต่อแบบ
TCP : ส่งข้อความและรับประกันการเข้าถึงปลายทางโปรโตคอลการเชื่อมต่อ


9

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

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

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

นอกจากนี้ในปัจจุบันอินเทอร์เน็ต UDP ไม่ได้รับการต้อนรับเหมือน TCP เนื่องจากมีกล่องตรงกลาง แอพพลิเคชั่นบางตัวเช่น skype ตกลงไปที่ TCP เมื่อการเชื่อมต่อ UDP ถูกสันนิษฐานว่าถูกบล็อก



2

ความแตกต่างสั้น ๆ และง่าย ๆ ระหว่างโปรโตคอล Tcp และ Udp:

1) Tcp - โปรโตคอลควบคุมการส่งข้อมูลและ Udp - โปรโตคอลดาต้าแกรมผู้ใช้

2) Tcp เป็นโปรโตคอลที่เชื่อถือได้โดยที่ Udp เป็นโปรโตคอลที่ไม่น่าเชื่อถือ

3) Tcp เป็นแบบ stream stream โดยที่ Udp เป็นโปรโตคอลแบบข้อความ

4) Tcp ช้ากว่า Udp


1

พบกับหัวข้อนี้และให้ฉันลองแสดงด้วยวิธีนี้

TCP

จับมือ 3 ทาง

Bob: เฮ้เอมี่ฉันอยากจะบอกความลับกับคุณ
Amy: โอเคไปเลยฉันพร้อมแล้ว
Bob: โอเค

การสื่อสาร
Bob: 'ฉัน' นี่คือตัวอักษรตัวแรก
Amy: ได้รับจดหมายฉบับแรกโปรดส่งจดหมายฉบับที่สอง
Bob: '' นี่คือจดหมายฉบับที่สอง
Amy: จดหมายฉบับที่ได้รับแล้วโปรดส่งจดหมายฉบับที่สาม
Bob: 'L 'นี่คือจดหมายฉบับที่สาม
หลังจากนั้นไม่นาน
Bob: ' L 'นี่จดหมายฉบับที่สาม
Amy: ได้รับจดหมายฉบับที่สามโปรดส่งจดหมายฉบับที่สี่
Bob: ' O 'จดหมายฉบับนี้ออกมา
Amy: ...
... ...


Bob จับมือ 4 ทิศทาง : ความลับของฉันถูกเปิดเผยตอนนี้คุณรู้ว่าหัวใจของฉัน
เอมี: ตกลง ฉันไม่มีอะไรจะพูด.
Bob: ตกลง

UDP

Bob: I LOVE U
Amy ได้รับ: OVI LE

TCP มีความน่าเชื่อถือมากกว่า UDP และรับประกันการส่งข้อความแม้กระทั่งไม่ต้องสงสัยเลยว่าทำไม UDP นั้นมีน้ำหนักเบาและมีประสิทธิภาพมากกว่า


0

คำอธิบายง่ายๆโดยการเปรียบเทียบ

TCP เป็นเช่นนี้

ลองนึกภาพคุณมีเพื่อนบนดาวอังคาร (เราได้สื่อสารกับจดหมายที่เขียนไว้ในสมัยก่อนอินเทอร์เน็ตก่อน)

คุณต้องส่งเพื่อนทางจดหมายถึงเจ็ดนิสัยของคนที่มีประสิทธิภาพสูง ดังนั้นคุณตัดสินใจที่จะส่งเป็นตัวอักษรเจ็ดตัวแยกกัน:

  1. ตัวอักษรที่ 1 - เป็นเชิงรุก
  2. ตัวอักษร 2 - เริ่มต้นด้วยจุดจบในใจ ...

เป็นต้น

ฯลฯ ตัวอักษร 7 - ลับให้คม

ที่ต้องการ:

คุณต้องการให้แน่ใจว่าเพื่อนทางจดหมายของคุณได้รับทุกตัวอักษรของคุณ - ในการสั่งซื้อและการที่พวกเขามาถึงได้อย่างสมบูรณ์แบบ หากการจ่ายปากกาของคุณได้รับจดหมาย 7 ก่อนตัวอักษร 1 - ไม่ดี ถ้าเพื่อนทางจดหมายของคุณได้รับจดหมายทั้งหมดยกเว้นจดหมาย 3 - นั่นก็ไม่ดีเช่นกัน

นี่คือวิธีที่เรามั่นใจว่าตรงตามข้อกำหนดของเรา:

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

0

TLDR;

  • TCP - สตรีมเชิงต้องใช้การเชื่อมต่อเชื่อถือได้ช้า
  • UDP - เชิงข้อความเชื่อมต่อไม่น่าเชื่อถือรวดเร็ว

ก่อนที่เราจะเริ่มต้นให้จำไว้ว่าข้อเสียของบางสิ่งบางอย่างที่มีความต่อเนื่องของข้อดีของมัน มีเครื่องมือที่เหมาะสมสำหรับงานเท่านั้นไม่มียาครอบจักรวาล การอยู่ร่วมกันของ TCP / UDP มานานหลายทศวรรษและด้วยเหตุผล

TCP

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

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

เมื่อคุณส่งข้อมูลผ่าน TCP คุณเขียนสตรีมไบต์ไปยังซ็อกเก็ตที่ผู้ส่งซึ่งจะถูกแบ่งเป็นแพ็คเก็ตส่งผ่านสแต็กและส่งผ่านสาย ในแพ็คเก็ตด้านผู้รับได้รับประกอบกันอีกครั้งในกระแสไบต์ต่อเนื่อง

การรักษาสิ่งที่เป็นนามธรรมที่ดีนี้มีค่าใช้จ่ายในแง่ของความซับซ้อนและประสิทธิภาพ หากแพ็คเก็ตที่ 1 จากสตรีมไบต์สูญหายผู้รับจะชะลอการประมวลผลของแพ็กเก็ตต่อมาแม้จะมาถึงแล้ว

นอกจากนี้เพื่อให้เชื่อถือได้ TCP จะดำเนินการสิ่งนี้:

  • TCP ต้องการการเชื่อมต่อที่สร้างไว้แล้วซึ่งต้องใช้การปัดเศษ 3 รอบ ("handshake 3-way" "infamous")
  • TCP มีคุณสมบัติที่เรียกว่า "การเริ่มต้นช้า" เมื่อค่อยๆเพิ่มอัตราการส่งข้อมูลหลังจากสร้างการเชื่อมต่อเพื่อให้ผู้รับสามารถรับข้อมูลได้ทัน
  • ทุกแพ็กเก็ตที่ส่งจะต้องได้รับการยอมรับมิฉะนั้นผู้ส่งจะหยุดส่งข้อมูลเพิ่มเติม
  • และในและในและใน ...

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

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

UDP

ในทางกลับกัน UDP นั้นเป็นแบบข้อความดังนั้นผู้รับจะเขียนข้อความ (แพ็คเก็ต) ไปยังซ็อกเก็ตจากนั้นมันจะถูกส่งไปยังผู้รับตามที่เป็นโดยไม่ต้องแยก / ประกอบ

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

บางคนใช้วิธีนี้และได้ผลลัพธ์ที่ดีมากจนถึงจุดที่ HTTP / 3 ใช้ QUIC - โปรโตคอลที่ใช้ UDP อย่างไรก็ตามนี่เป็นข้อยกเว้นเพิ่มเติม แอปพลิเคชันทั่วไปของ UDP คือการสตรีมเสียง / วิดีโอและแอปพลิเคชันการประชุมเช่น Skype, Zoom หรือ Google Hangout ซึ่งแพ็กเก็ตที่สูญเสียนั้นไม่สำคัญเมื่อเทียบกับความล่าช้าที่ TCP แนะนำ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.