UDP Protocol คือมาตรฐานของอะไรในระบบ Computer Network เรามาเรียนรู้ไปด้วยกันครับ

Ake_.Net JPK
5 min readFeb 16, 2024

--

UDP Protocol คือมาตรฐานของอะไรในระบบ Computer Network เรามาเรียนรู้ไปด้วยกันครับ

จากบทความที่แล้ว เราได้เรียนรู้ด้วยกันในเรื่อง TCP Protocol กันแล้ว ท่านใดสนใจอยากศึกษาเกี่ยวกับการทำงานของ TCP Protocol ตามแนวทางที่ผมได้เขียนบทความไป สามารถคลิกอ่านได้เลยครับ

รูปแสดง TCP/IP Model เทียบเคียง OSI Model 7Layers cr. รูปจาก https://i.stack.imgur.com/YcIpR.gif

จากรูป OSI 7Layer Model & TCP/IP Model ด้านบน จะเห็นว่าใน Transport layer ( Layer4) จะมีอีก Protocol ที่เอาไว้ใส่ขนข้อมูล ระหว่างชั้น Network กับ Application ก็คือ UDP Protocol ซึ่งได้ถูกออกแบบใช้งานเมื่อปี 1980 รายละเอียดตาม เอกสาร RFC 768 (ส่วน TCP Protocol เกิดขึ้นในปี 1981)

cr. รูปจาก https://www.cpe.ku.ac.th/~plw/dccn/presentation/ch23.pdf

การติดต่อกันของชั้น Transport Layer นี้จะเป็นการติดต่อกันแบบ Process-to-Process ซึ่ง Process ที่ว่านี้ก็คือ พวกโปรแกรมต่างๆนั่นเอง เช่นโปรแกรมที่เอาไว้ใช้งานระบบ DNS , DHCP หรือ HTTP ซึ่ง Process ที่ว่าก็คือโปรแกรมที่รันอยู่บน Host นั่นเอง

รูปแสดงขั้นตอนการ Encapsulation ของข้อมูลในส่วนของ UDP Protocol

เมื่อมีการส่งข้อมูลออกจาก Host ใดๆ จะมีการผ่านกระบวน Encapsulation ทุกครั้ง ไม่ว่าจะเป็น TCP หรือ UDP ก็ตาม ไล่ลำดับตั้งแต่ Layer บนสุด ส่งลงมาจนถึง Layer2 ที่เรียกว่า Frame และส่งออก Network Interface เมื่อ Host อีกฝั่งได้รับ Frame ก็จะทำการ De Encapsulation เพื่อถอด Frame (Layer2) แล้วอ่านข้อมูล ก็จะเจอสิ่งที่เรียกว่า Packet (Layer3) แล้วถอด Packet ก็จะเจอสิ่งที่เรียกว่า Segment (Layer4) เพื่อส่งต่อไปยัง Application บน Host ใช้งานข้อมูลได้ต่อไป

รูปแสดง Host รับข้อมูลอ่าน Destination IP ว่าเป็น IP ตนเองก็รับไว้ จากนั้น Transport Layer ก็ส่งขึ้น Process ที่รอรับ Port number =13 ที่ต้องการ Process นั้นก็นำข้อมูลไปประมวลต่อไป cr. รูปจาก https://www.cpe.ku.ac.th/~plw/dccn/presentation/ch23.pdf

แล้วข้อมูลจะส่งไปยัง Process ที่ถูกต้องได้อย่างไรหละ?

รูปแสดง ตัวอย่าง ของ Application พื้นฐาน และพอร์ทมาตรฐานของ App นั้นๆ เราจะเรียกมันว่า Well-Known Port ถูกกำหนดไว้โดยองค์กร IANA มีตั้งแต่พอร์ท 0–1023 จะเอาไว้ใช้สำหรับฝั่ง Server ส่วนฝั่ง Clients จะเริ่มตั้งแต่พอร์ท 1024–49151 ส่วนพอร์ท 49152–65535 นั้นเป็น Private port ที่นำไปใช้ได้ตามต้องการตามแต่ละ Application หรือระบบนั้นๆที่เราต้องการได้เลย ส่วน Protocol number นั้นเอาไว้ระบุให้ Layer3 รู้ว่า Data ที่ถูกขนส่งมานี้ใช้ Protocol ในการขนส่ง number 6 คือ TCP , number 17 คือ UDP

เมื่อ Host ได้รับข้อมูลข้อมูลที่รับเข้ามาก็คือ Frame (Ethernet Frame) ใน Layer 2 จากนั้นก็ทำการ De Encapsulation ในแต่ละ Layer จนเมื่อถึง Segment ใน Layer 4 ก็จะเห็น Port number เพื่อเอาไว้ระบุว่าจะไปยัง Process ใดได้ถูกต้อง ซึ่งข้อมูลที่ส่งระหว่าง Host จะใช้ IP address อยู่ใน Layer3 แต่เมื่อมาถึง Host แล้ว จะนำไปประมวลต่อ ก็ต้องใช้ Port number อยู่ใน Layer4 เพื่อส่งไป Process ที่ถูกต้องของข้อมูลนั้นๆ

UDP Protocol ในปัจจุบันก็ยังเป็นที่นิยมใช้งานกันมากมาย โดยเฉพาะการส่งข้อมูลที่เน้นความรวดเร็ว ส่วนเรื่องของความครบถ้วนของข้อมูล ก็จะเป็นหน้าที่ของ Upper Layer ต่อไป คือ Application Layer จะเป็นคนคอยจัดการเรื่องความครบถ้วนของข้อมูลต่อไป ส่วนความถูกต้องของข้อมูลเมื่อได้รับมาแล้ว UPD Protocol ก็มีฟังก์ชั่นในเรื่องของ Data Checksum มาตรวจสอบความถูกต้องของข้อมูลที่ได้รับมา คือถ้าข้อมูลเสียหายระหว่างทาง แต่ยังส่งถึงผู้รับ ผู้รับก็จะทำการ Drop ทิ้ง ก็คือข้อมูลไม่ครบถ้วนนั่นเอง
คือจะแตกต่างกับ TCP Protocol ใน TCP Protocol จะจัดการเรื่องความครบถ้วนขอมูลๆทุกๆ Bits (ใช้ Sequence number ) และตรวจสอบความถูกต้องของข้อมูลด้วย (Data Chekcsum)

รูปแสดงการเปรียบเทียบ Segment Header cr. รูปจาก https://digilent.com/blog/wp-content/uploads/2015/10/header-600x336.jpg

ในส่วนของ Overhead หรือที่เรียกกันว่า Segment Header ของ TCP จะมีขนาด Default ที่ 20–60 Bytes ส่วน UDP จะมีขนาดเพียง 8 Bytes เท่านั้น

ทำไม UDP ถึงส่งข้อมูลได้ไวกว่า ?

เหตุผลที่ 1
จากรูป Header ด้านบน ลองนึกภาพตามนะครับ เช่นผู้รับ รับข้อมูล TCP Segment เข้ามา ก็ต้องอ่าน Header ไปก่อน จนถึง Bit ที่ 160 ถึงจะเริ่มอ่าน Data ที่ Application ต้องการได้ แต่ เมื่อส่งมาด้วย UDP จะเห็นว่า ผู้รับเปิดอ่าน Header ไปเพียง 64bit (bit0–63)เท่านั้น พอถึงตำแหน่ง Bit ที่ 64 ก็เริ่มอ่าน Data ที่ Application ต้องการได้เลย

รูปแสดง กระบวนการของ HandShake ของ TCP Protcol cr.รูปจาก https://www.netburner.com/wp-content/uploads/2020/06/TCP-1024x919.png

เหตุผลที่ 2
ใน TCP Protocol ก่อนที่ได้รับ TCP Segment ที่มี Data ส่งมาด้วย ก็ต้องทำการ Handshake เพื่อขอเปิด Connection Established โดยจะส่ง TCP Segment กันไปมารวม 3 Segment เพื่อยืนว่าต่างฝ่ายพร้อมรับส่งข้อมูลกันหรือไม่ ซึ่งจุดนี้ ก็จะใช้เวลาก่อนจะได้รับ TCP Segment ที่ 4 ที่จะเริ่มมี Data ส่งเข้ามา ซึ่งการส่ง Data ก็จะมีเลข Sequence number กำกับไปเรื่อยๆ และฝั่งรับ ก็ต้องยืนยันกลับมาด้วยว่าได้รับ ถ้าไม่ยืนยันกลับมาในเวลาที่กำหนด ฝั่งส่งก็ต้องทำการ Restransmission ไปใหม่ คือส่งไปใหม่นั่นเอง

https://s3.ap-south-1.amazonaws.com/s3.studytonight.com/curious/uploads/pictures/1616758817-79873.png

ส่วน UDP Protocol นั้น ถ้า Application ต้องการข้อมูล ก็จะทำการส่ง Request ไปร้องขอตรงๆได้เลย ไม่ต้องสอบถามกันและกันก่อนว่าพร้อมรับส่งข้อมูลหรือไม่ ส่วนฝั่งที่ได้รับ Request ก็จะส่งข้อมูลกลับไปเลย จนครบที่ฝั่งรอรับได้ Request มา โดยไม่ต้องรอฝั่งรับตอบกลับว่าได้รับ Data ครบหรือไม่ ส่วนฝั่งรับถ้า Application ได้รับข้อมูลไม่ครบ เดี๋ยวก็จะทำส่ง Request ไปใหม่เอง

รูปแสดง UDP Datagram cr. รูปจาก https://pingfu.net/img/cheat-sheets/udp-header.png

Segment ของ UDP ที่ส่งออกไปหรือรับเข้ามา เราจะเรียกมันว่า UDP Datagram
จากที่บอกไปตอนต้น UDP Header จะมีขนาด 8 Bytes ส่วนที่ถัดมาจะเป็น Data หรือ Payload ที่จะขนข้อมูลออกไป ซึ่งจะขน Data ขนาดกี่ Bytes ไปนั้น ก็ขึ้นอยู่กับค่าที่ระบุไว้ใน field : Length ที่มีขนาด 16Bit เพื่อเอาไว้บอกว่า UDP Datagram นี้ รวมทั้งหมดจะมีขนาดกี่ Bytes ถ้า field : Length นี้ระบุว่า 42 นั่นก็คือ จะเป็น Header ไปแล้ว 8 Bytes ส่วนที่เหลือ 34 Bytes ก็จะเป็น Data(Payload) ที่ขนไปให้ Process นั่นเอง ก็คือยังไม่เกิน 1500 Bytes (MTU) และมีพื้นที่เหลือให้สำหรับ IP Header ใน Layer3 ต่อไป

เมื่อถึงขั้นตอนของ Layer 3 จะได้สิ่งที่เรียกว่า Packet ขนาดของ Packet ก็จะรวม Header ของ IP ไปด้วย จะต้องมีขนาดไม่เกินขนาดของ 1MTU default คือ 1500 Bytes

รูปแสดงขนาด Size Default ของแต่ละ Layer cr. รูปจาก https://media.geeksforgeeks.org/wp-content/uploads/20220217165120/MaximumSegmentSize.png

แต่ถ้าเกิน ก็ต้องมีการทำ Fragmentation ซึ่งการทำ Fragmentation ของ UDP จะทำด้วยตัวเองไม่ได้ จะต้องทำในขั้นตอนของ Layer 3

รูปแสดง การส่ง Packet ที่มีขนาดเกิน 1500Bytes ใน Layer 3 ถ้าการส่งไปยังอีกฝั่ง ถูกต้องค่า MTU 1500Bytes โดย Default เมื่อ Router ได้รับ Packet ดังกล่าวมา ก็ต้องทำ IP Fragmentation ก่อนส่ง Packet ออกไป

เรียกกระบวนการนี้ว่า IP Fragmentation เพื่อจะได้ส่งข้อมูลออกไปโดยไม่เกินค่าใน 1MTU (1500 Bytes) แต่ถ้าใน TCP Protocol การทำ Fragmentation จะทำในกระบวนการของ TCP Protocol ได้เลยเพราะมี Field ให้ระบุเกี่ยวกับ Fragmentation แล้ว

รูปแสดงกระบวนการ Checksums ของ UDP cr.รูปจาก https://cheapsslsecurity.com/blog/wp-content/uploads/2022/06/udp-checksum-computation-process.png

ในกรณีที่ฝั่งรับ ได้รับข้อมูลมาแล้ว ก็จะทำการ Checksums ว่าข้อมูลที่ได้รับมาถูกต้องหรือไม่ ถ้าไม่ถูกต้อง ก็จะทำการ Drop ข้อมูลนั้นทิ้งไป Application ก็ไม่มีข้อมูลนำไปใช้ ก็จะส่ง Request กลับไปใหม่นั่นเอง

UDP มันส่งข้อมูลออกไปในลักษณะไหน?

https://www.computernetworkingnotes.org/images/intro/ccna-study-guide/segmentation-explained-with-tcp-and-udp-header.png

จากรูป TCP Protocol โปรแกรมที่ใช้ TCP ในการส่งข้อมูล จะส่งข้อมูลแบบต่อเนื่องกันติดๆกัน เรียกว่า Stream จากนั้น TCP protocol จะทำการแบ่ง Data ที่ Stream เข้ามานั้น ออกเป็นชิ้นๆ ไม่ให้เกินค่า MTU แล้วระบุ Sequence number แล้วส่งต่อไปยัง Layer 3 ต่อไป
สำหรับโปรแกรที่ใช้ UDP ในการส่งข้อมูลนั้น ตัวโปรแกรมจะทำการแบ่งข้อมูลออกเป็นชิ้นๆก่อน จากนั้น UDP Protocol ก็จะทำการส่งข้อมูลชิ้นๆนั้นออกไป โดยไม่มีการระบุ Sequence number แต่ถ้าชิ้นข้อมูล (Data Payload) มาถึง Layer3 แล้วมีขนาดใหญ่เกินค่า 1MTU : 1500 Bytes แล้วนั้น ใน Layer 3 จะมีกระบวนการทำ Fragmentation คือแบ่งข้อมูลเป็นชิ้นๆ ไม่ให้เกิน 1500 Bytes แล้วส่งต่อไปยัง Layer 2 และส่งไปยังปลายทางได้ต่อไป

เราลองมาใช้ WireShark Capture packet มาดูของจริงกันครับ

รูปแสดง Network Diagram เพื่อใช้อธิบายการทำงาน UDP Protocol

ผมได้ทำการทดสอบทำ Lab โดยต่ออุปกรณ์ตาม Network Diagram เพื่อที่จะดูข้อมูลใน Packet โดยใช้โปรแกรม WireShark

รูปแสดงการ Query เพื่อร้องขอ ข้อมูลจาก DNS Server

เมื่อเครื่อง Clients ต้องการเข้าเว็บไซต์ หรือต้องการไปยัง Domain : go.microsoft.com ก็ต้องไปสอบถามว่าโดเมนดังกล่าวมี IP เป็นอะไร ดังนั้น ก็ต้องทำการสอบถาม (Query) หรือส่งคำร้อง (Request) ไปยัง DNS Server ที่เราได้ตั้งค่าไว้ ในที่นี้ผมตั้งค่า DNS Server ใน Client เป็น IP: 8.8.8.8 ดังนั้นเครื่อง Client ก็ไปด้วย Source IP: 192.168.1.7 + Source Port : 61322 ติดต่อไปยัง Destination IP: 8.8.8.8 + Destination Port : 53 (เป็นพอร์ทมาตรฐานของระบบ DNS )

จะเห็นว่าใน Layer4 ไปจะใช้ Transport ด้วย UDP Protocol เพราะเราต้องการความรวดเร็วในการถาม เพื่อจะได้เข้าถึงเว็บไซต์ได้ไวขึ้น เป็นที่มาว่า DNS จะใช้ UDP Protocol (แต่ปัจจุบัน ก็เริ่มมีการใช้ TCP Protocol ในการทำ DNS Server กันในบาง Application)

โดย UDP Datagram นี้ หรือจะเรียกว่า UDP Segment ก็ได้ครับ แล้วแต่ชอบครับ เพราะหน่วยของข้อมูลใน Layer 4 เราจะใช้คำว่า Segment

รูปแสดง UDP Datagram cr. รูปจาก https://pingfu.net/img/cheat-sheets/udp-header.png

จะเห็นว่าข้อมูลใน field : Length = 42 Bytes คือเป็นการบอกว่า Datagram นี้มีขนาดรวมทั้งหมด 42 Bytes ซึ่งก็คือ เป็นขนาดของ Header ไปแล้ว 8 Bytes ส่วน UDP Payload = 32 Bytes คือเป็นการบอกว่า Datagram นี้ขน Data สำหรับให้ Application ไปจำนวน 32 Bytes นะ ก็เป็นข้อมูลที่ใช้สอบถามเพื่อขอข้อมูลจากปลายทางนั่นเอง (Request) จากรูปคือ ต้องการทราบ IP address (dns Type A) ของโดเมน go.microsoft.com

เมื่อ DNS Server IP : 8.8.8.8 ได้รับ UDP Datagram นี้ก็เอามาดูว่า ก็รู้ว่าต้นทาง ต้องการ IP address ของโดเมน go.microsoft.com ก็ทำการ ค้นหาข้อมูลใน RR (Resource Record) ที่ตนเองมี (อ่านเรื่องการทำงานของระบบ DNS ได้ในบทความของผมได้ที่ลิงค์นี้ได้ครับ -> https://medium.com/@akenetjpk/ba095fb15c55 ) ซึ่ง DNS Server นี้ ก็พบคำตอบทั้งหมด 3 คำตอบที่สัมพันธ์กัน ก็ส่ง (Response) คำตอบกลับทั้ง 3 คำตอบ ด้วยขนาด Length = 137 Bytes (จะเห็นว่าไม่เกิน MTU default 1500Bytes) คือเหมือนเดิมครับ เป็น Header = 8 Bytes ที่เหลือ 129 Bytes เป็น Data Payload คือเป็น Data คำตอบคือ IP Address ของโดเมนดังกล่าว ก็ทำการส่ง(Response)กลับไป

จะเห็นว่าจบกระบวนการครับ สั้นๆ รวดเร็ว ไม่ต้องรอการยืนยันกลับแบบ TCP มันเลยเร็วครับ ผู้ส่ง ส่ง Request ไปให้ผู้รับ ซึ่งได้รับหรือป่าวก็ไม่รู้ แต่เมื่อได้รับ Request ก็จะ Response กลับทันที

สรุปแล้ว TCP Protocol กับ UDP Protocol แตกต่างกันอย่างไร และเหมาะกับการใช้งานกับ Service Protocol ใดบ้าง?
ดูข้อมูลโดยสรุปได้ในรูปด้านล่างนี้ได้เลยครับ

--

--

Ake_.Net JPK

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