วันนี้ เราจะเริ่มต้นด้วยการเน้นที่ TCP ก่อน ในบทเรื่องการแบ่งชั้น เราได้กล่าวถึงประเด็นสำคัญประเด็นหนึ่ง ในชั้นเครือข่ายและชั้นที่ต่ำกว่านั้น การสื่อสารจะเน้นไปที่การเชื่อมต่อระหว่างโฮสต์ ซึ่งหมายความว่าคอมพิวเตอร์ของคุณจำเป็นต้องรู้ว่าคอมพิวเตอร์อีกเครื่องอยู่ที่ไหนเพื่อที่จะเชื่อมต่อได้ อย่างไรก็ตาม การสื่อสารในเครือข่ายมักเป็นการสื่อสารระหว่างกระบวนการมากกว่าการสื่อสารระหว่างเครื่อง ดังนั้น โปรโตคอล TCP จึงนำเสนอแนวคิดของพอร์ต พอร์ตหนึ่งสามารถถูกใช้งานได้โดยกระบวนการเพียงหนึ่งเดียวเท่านั้น ซึ่งช่วยให้สามารถสื่อสารโดยตรงระหว่างกระบวนการแอปพลิเคชันที่ทำงานอยู่บนโฮสต์ที่แตกต่างกันได้
หน้าที่ของเลเยอร์การขนส่งคือการจัดหาวิธีการสื่อสารโดยตรงระหว่างกระบวนการแอปพลิเคชันที่ทำงานอยู่บนโฮสต์ที่แตกต่างกัน ดังนั้นจึงเรียกอีกอย่างว่าโปรโตคอลแบบเอนด์ทูเอนด์ เลเยอร์การขนส่งจะซ่อนรายละเอียดหลักของเครือข่าย ทำให้กระบวนการแอปพลิเคชันมองเห็นราวกับว่ามีช่องทางการสื่อสารแบบเอนด์ทูเอนด์เชิงตรรกะระหว่างเอนทิตีทั้งสองของเลเยอร์การขนส่ง
TCP ย่อมาจาก Transmission Control Protocol และเป็นที่รู้จักในฐานะโปรโตคอลแบบเชื่อมต่อ (connection-oriented protocol) ซึ่งหมายความว่าก่อนที่แอปพลิเคชันหนึ่งจะเริ่มส่งข้อมูลไปยังอีกแอปพลิเคชันหนึ่งได้ กระบวนการทั้งสองจะต้องทำการจับมือ (handshake) ก่อน การจับมือเป็นกระบวนการเชื่อมต่อเชิงตรรกะที่ช่วยให้มั่นใจได้ว่าการส่งข้อมูลมีความน่าเชื่อถือและการรับข้อมูลเป็นไปอย่างเป็นระเบียบ ในระหว่างการจับมือ จะมีการสร้างการเชื่อมต่อระหว่างโฮสต์ต้นทางและปลายทางโดยการแลกเปลี่ยนแพ็กเก็ตควบคุมหลายชุด และตกลงกันในพารามิเตอร์และกฎบางอย่างเพื่อให้มั่นใจได้ว่าการส่งข้อมูลจะประสบความสำเร็จ
TCP คืออะไร? (มายลิงก์กิ้งเน็ตเวิร์ก แทปและตัวกลางส่งแพ็กเก็ตเครือข่ายสามารถประมวลผลแพ็กเก็ต TCP หรือ UDP ก็ได้)
TCP (Transmission Control Protocol) เป็นโปรโตคอลการสื่อสารระดับชั้นการขนส่งแบบเชื่อมต่อที่มีความน่าเชื่อถือและใช้สตรีมไบต์เป็นพื้นฐาน
มุ่งเน้นการเชื่อมต่อการสื่อสารแบบเชื่อมต่อโดยตรง (Connection-oriented) หมายความว่า การสื่อสาร TCP เป็นแบบหนึ่งต่อหนึ่ง กล่าวคือ การสื่อสารแบบจุดต่อจุดจากต้นทางถึงปลายทาง ซึ่งแตกต่างจาก UDP ที่สามารถส่งข้อความไปยังโฮสต์หลายเครื่องพร้อมกันได้ ดังนั้นจึงไม่สามารถสื่อสารแบบหนึ่งต่อหลายได้
เชื่อถือได้ความน่าเชื่อถือของ TCP ช่วยให้มั่นใจได้ว่าแพ็กเก็ตจะถูกส่งไปยังผู้รับอย่างน่าเชื่อถือโดยไม่คำนึงถึงการเปลี่ยนแปลงของลิงก์เครือข่าย ซึ่งทำให้รูปแบบแพ็กเก็ตโปรโตคอลของ TCP ซับซ้อนกว่าของ UDP
อิงตามสตรีมไบต์ลักษณะการทำงานแบบสตรีมไบต์ของ TCP ช่วยให้สามารถส่งข้อความขนาดใดก็ได้และรับประกันลำดับของข้อความ: แม้ว่าข้อความก่อนหน้าจะยังไม่ได้รับการรับอย่างสมบูรณ์ และแม้ว่าไบต์ถัดไปจะได้รับการรับแล้ว TCP ก็จะไม่ส่งต่อไปยังเลเยอร์แอปพลิเคชันเพื่อประมวลผล และจะทิ้งแพ็กเก็ตที่ซ้ำกันโดยอัตโนมัติ
เมื่อโฮสต์ A และโฮสต์ B สร้างการเชื่อมต่อกันแล้ว แอปพลิเคชันก็เพียงแค่ใช้สายสื่อสารเสมือนเพื่อส่งและรับข้อมูล ซึ่งจะช่วยให้การส่งข้อมูลเป็นไปอย่างราบรื่น โปรโตคอล TCP มีหน้าที่ควบคุมงานต่างๆ เช่น การสร้างการเชื่อมต่อ การตัดการเชื่อมต่อ และการคงสถานะการเชื่อมต่อ ควรสังเกตว่าในที่นี้เรากล่าวว่าสายเสมือนหมายถึงการสร้างการเชื่อมต่อเท่านั้น การเชื่อมต่อตามโปรโตคอล TCP เพียงแค่บ่งชี้ว่าทั้งสองฝ่ายสามารถเริ่มต้นการส่งข้อมูลได้ และเพื่อรับประกันความน่าเชื่อถือของข้อมูล การกำหนดเส้นทางและโหนดการขนส่งจะถูกจัดการโดยอุปกรณ์เครือข่าย โปรโตคอล TCP เองไม่ได้เกี่ยวข้องกับรายละเอียดเหล่านี้
การเชื่อมต่อ TCP เป็นบริการแบบฟูลดูเพล็กซ์ ซึ่งหมายความว่าโฮสต์ A และโฮสต์ B สามารถส่งข้อมูลได้ทั้งสองทิศทางในการเชื่อมต่อ TCP กล่าวคือ ข้อมูลสามารถถ่ายโอนระหว่างโฮสต์ A และโฮสต์ B ได้ในทิศทางการไหลแบบสองทาง
TCP จะจัดเก็บข้อมูลชั่วคราวไว้ในบัฟเฟอร์ส่งข้อมูล (send buffer) ของการเชื่อมต่อ บัฟเฟอร์ส่งข้อมูลนี้เป็นหนึ่งในแคชที่ตั้งค่าไว้ระหว่างการจับมือสามขั้นตอน (three-way handshake) จากนั้น TCP จะส่งข้อมูลในแคชส่งข้อมูลไปยังแคชรับข้อมูล (receive cache) ของโฮสต์ปลายทางในเวลาที่เหมาะสม ในทางปฏิบัติ แต่ละฝ่ายจะมีแคชส่งข้อมูลและแคชรับข้อมูล ดังแสดงในภาพนี้:
บัฟเฟอร์ส่งข้อมูล (Send Buffer) คือพื้นที่หน่วยความจำที่ดูแลโดยการใช้งาน TCP ทางฝั่งผู้ส่ง ซึ่งใช้สำหรับจัดเก็บข้อมูลที่จะส่งชั่วคราว เมื่อทำการจับมือสามขั้นตอน (Three-way handshake) เพื่อสร้างการเชื่อมต่อ แคชส่งข้อมูล (Send Cache) จะถูกตั้งค่าและใช้เพื่อจัดเก็บข้อมูล บัฟเฟอร์ส่งข้อมูลจะถูกปรับเปลี่ยนแบบไดนามิกตามความหนาแน่นของเครือข่ายและข้อมูลป้อนกลับจากผู้รับ
บัฟเฟอร์รับข้อมูลคือพื้นที่หน่วยความจำที่ดูแลโดยการใช้งาน TCP ทางฝั่งผู้รับ ซึ่งใช้สำหรับจัดเก็บข้อมูลที่ได้รับชั่วคราว TCP จะจัดเก็บข้อมูลที่ได้รับไว้ในแคชรับข้อมูลและรอให้แอปพลิเคชันฝั่งต้นทางอ่านข้อมูลนั้น
โปรดทราบว่าขนาดของแคชสำหรับการส่งและรับมีจำกัด เมื่อแคชเต็ม TCP อาจใช้กลยุทธ์บางอย่าง เช่น การควบคุมความแออัด การควบคุมการไหลของข้อมูล ฯลฯ เพื่อให้มั่นใจได้ว่าการส่งข้อมูลมีความน่าเชื่อถือและเครือข่ายมีความเสถียร
ในเครือข่ายคอมพิวเตอร์ การส่งข้อมูลระหว่างโฮสต์จะดำเนินการโดยใช้เซ็กเมนต์ ดังนั้น เซ็กเมนต์แพ็กเก็ตคืออะไร?
TCP สร้างเซ็กเมนต์ TCP หรือเซ็กเมนต์แพ็กเก็ต โดยการแบ่งกระแสข้อมูลที่เข้ามาออกเป็นส่วนย่อยๆ และเพิ่มส่วนหัว TCP ให้กับแต่ละส่วนย่อย เซ็กเมนต์แต่ละอันสามารถส่งได้ในระยะเวลาจำกัดเท่านั้น และต้องไม่เกินขนาดเซ็กเมนต์สูงสุด (MSS) ระหว่างการส่งข้อมูล เซ็กเมนต์แพ็กเก็ตจะผ่านเลเยอร์ลิงก์ เลเยอร์ลิงก์มีหน่วยส่งข้อมูลสูงสุด (MTU) ซึ่งเป็นขนาดแพ็กเก็ตสูงสุดที่สามารถส่งผ่านเลเยอร์ลิงก์ข้อมูลได้ โดยปกติแล้วหน่วยส่งข้อมูลสูงสุดจะเกี่ยวข้องกับอินเทอร์เฟซการสื่อสาร
แล้ว MSS กับ MTU ต่างกันอย่างไร?
ในเครือข่ายคอมพิวเตอร์ สถาปัตยกรรมแบบลำดับชั้นมีความสำคัญมาก เพราะคำนึงถึงความแตกต่างระหว่างระดับต่างๆ แต่ละชั้นมีชื่อเรียกต่างกัน ในชั้นการขนส่ง ข้อมูลเรียกว่า เซ็กเมนต์ (segment) และในชั้นเครือข่าย ข้อมูลเรียกว่า แพ็กเก็ต IP ดังนั้น หน่วยการส่งข้อมูลสูงสุด (MTU) จึงอาจคิดได้ว่าเป็นขนาดแพ็กเก็ต IP สูงสุดที่สามารถส่งได้โดยชั้นเครือข่าย ในขณะที่ขนาดเซ็กเมนต์สูงสุด (MSS) เป็นแนวคิดของชั้นการขนส่งที่หมายถึงปริมาณข้อมูลสูงสุดที่สามารถส่งได้โดยแพ็กเก็ต TCP ในแต่ละครั้ง
โปรดทราบว่าเมื่อขนาดเซ็กเมนต์สูงสุด (MSS) มีขนาดใหญ่กว่าหน่วยการส่งข้อมูลสูงสุด (MTU) การแบ่งส่วนข้อมูล IP จะเกิดขึ้นที่เลเยอร์เครือข่าย และ TCP จะไม่แบ่งข้อมูลขนาดใหญ่เหล่านั้นออกเป็นส่วนๆ ที่เหมาะสมกับขนาด MTU จะมีส่วนที่อธิบายเกี่ยวกับเลเยอร์ IP โดยเฉพาะในเลเยอร์เครือข่าย
โครงสร้างเซ็กเมนต์แพ็กเก็ต TCP
เรามาสำรวจรูปแบบและเนื้อหาของส่วนหัว TCP กันเถอะ
หมายเลขลำดับ: หมายเลขสุ่มที่คอมพิวเตอร์สร้างขึ้นเมื่อมีการเชื่อมต่อ โดยหมายเลขลำดับนี้จะถูกใช้ใช้เป็นค่าเริ่มต้นเมื่อการเชื่อมต่อ TCP ถูกสร้างขึ้น และหมายเลขลำดับนี้จะถูกส่งไปยังผู้รับผ่านแพ็กเก็ต SYN ในระหว่างการส่งข้อมูล ผู้ส่งจะเพิ่มหมายเลขลำดับตามปริมาณข้อมูลที่ส่ง ผู้รับจะตรวจสอบลำดับของข้อมูลตามหมายเลขลำดับที่ได้รับ หากพบว่าข้อมูลไม่เรียงลำดับ ผู้รับจะจัดเรียงข้อมูลใหม่เพื่อให้แน่ใจว่าข้อมูลเรียงลำดับถูกต้อง
หมายเลขการรับทราบ: นี่คือหมายเลขลำดับที่ใช้ใน TCP เพื่อยืนยันการรับข้อมูล โดยจะระบุหมายเลขลำดับของข้อมูลถัดไปที่ผู้ส่งคาดว่าจะได้รับ ในการเชื่อมต่อ TCP ผู้รับจะตรวจสอบว่าข้อมูลใดได้รับสำเร็จแล้วโดยพิจารณาจากหมายเลขลำดับของส่วนข้อมูลในแพ็กเก็ตที่ได้รับ เมื่อผู้รับได้รับข้อมูลสำเร็จแล้ว จะส่งแพ็กเก็ต ACK ไปยังผู้ส่ง ซึ่งประกอบด้วยหมายเลขยืนยันการรับข้อมูล หลังจากได้รับแพ็กเก็ต ACK แล้ว ผู้ส่งสามารถยืนยันได้ว่าข้อมูลก่อนที่จะตอบกลับด้วยหมายเลขยืนยันนั้นได้รับสำเร็จแล้ว
บิตควบคุมของเซ็กเมนต์ TCP ประกอบด้วยสิ่งต่อไปนี้:
บิต ACK: เมื่อบิตนี้เป็น 1 หมายความว่าฟิลด์การตอบกลับยืนยัน (acknowledgement reply) นั้นถูกต้อง TCP กำหนดว่าบิตนี้ต้องตั้งค่าเป็น 1 ยกเว้นสำหรับแพ็กเก็ต SYN เมื่อการเชื่อมต่อถูกสร้างขึ้นครั้งแรก
บิต RSTเมื่อบิตนี้เป็น 1 แสดงว่ามีข้อผิดพลาดเกิดขึ้นในการเชื่อมต่อ TCP และจำเป็นต้องตัดการเชื่อมต่อโดยบังคับ
บิต SYNเมื่อบิตนี้ถูกตั้งค่าเป็น 1 หมายความว่าการเชื่อมต่อจะถูกสร้างขึ้น และค่าเริ่มต้นของหมายเลขลำดับจะถูกตั้งค่าในช่องหมายเลขลำดับ
บิต FINเมื่อบิตนี้เป็น 1 หมายความว่า จะไม่มีการส่งข้อมูลเพิ่มเติมในอนาคต และการเชื่อมต่อก็สิ้นสุดลง
หน้าที่และคุณลักษณะต่างๆ ของ TCP นั้นถูกแสดงออกมาผ่านโครงสร้างของส่วนย่อยของแพ็กเก็ต TCP
UDP คืออะไร? (จาก Mylinking)เน็ตเวิร์ก แทปและตัวกลางส่งแพ็กเก็ตเครือข่ายสามารถประมวลผลแพ็กเก็ต TCP หรือ UDP ได้ทั้งคู่)
โปรโตคอล User Datagram Protocol (UDP) เป็นโปรโตคอลการสื่อสารแบบไร้การเชื่อมต่อ เมื่อเปรียบเทียบกับ TCP แล้ว UDP ไม่มีกลไกควบคุมที่ซับซ้อน โปรโตคอล UDP อนุญาตให้แอปพลิเคชันส่งแพ็กเก็ต IP ที่ห่อหุ้มไว้โดยตรงโดยไม่ต้องสร้างการเชื่อมต่อ เมื่อนักพัฒนาเลือกใช้ UDP แทน TCP แอปพลิเคชันจะสื่อสารโดยตรงกับ IP
ชื่อเต็มของโปรโตคอล UDP คือ User Datagram Protocol และส่วนหัวของมันมีขนาดเพียงแปดไบต์ (64 บิต) ซึ่งกระชับมาก รูปแบบของส่วนหัว UDP มีดังนี้:
ท่าเรือปลายทางและท่าเรือต้นทางวัตถุประสงค์หลักของมันคือการระบุว่า UDP ควรส่งแพ็กเก็ตไปยังกระบวนการใด
ขนาดบรรจุภัณฑ์ฟิลด์ขนาดแพ็กเก็ตจะเก็บขนาดของส่วนหัว UDP บวกกับขนาดของข้อมูล
ผลรวมตรวจสอบ: ออกแบบมาเพื่อรับประกันการส่งส่วนหัวและข้อมูล UDP อย่างน่าเชื่อถือ บทบาทของเช็คซัมคือการตรวจจับว่าเกิดข้อผิดพลาดหรือความเสียหายขึ้นระหว่างการส่งแพ็กเก็ต UDP หรือไม่ เพื่อให้มั่นใจในความสมบูรณ์ของข้อมูล
ความแตกต่างระหว่าง TCP และ UDP ใน Mylinkingเน็ตเวิร์ก แทปและตัวกลางส่งแพ็กเก็ตเครือข่ายสามารถประมวลผลแพ็กเก็ต TCP หรือ UDP ก็ได้
TCP และ UDP มีความแตกต่างกันในประเด็นต่อไปนี้:
การเชื่อมต่อTCP เป็นโปรโตคอลการขนส่งแบบมีการเชื่อมต่อ ซึ่งจำเป็นต้องสร้างการเชื่อมต่อก่อนจึงจะสามารถถ่ายโอนข้อมูลได้ ในทางกลับกัน UDP ไม่จำเป็นต้องมีการเชื่อมต่อและสามารถถ่ายโอนข้อมูลได้ทันที
วัตถุบริการTCP เป็นบริการแบบหนึ่งต่อหนึ่ง คือการเชื่อมต่อจะมีเพียงสองจุดปลายในการสื่อสารกันเท่านั้น อย่างไรก็ตาม UDP รองรับการสื่อสารแบบโต้ตอบได้ทั้งแบบหนึ่งต่อหนึ่ง หนึ่งต่อหลาย และหลายต่อหลาย ซึ่งสามารถสื่อสารกับโฮสต์หลายตัวพร้อมกันได้
ความน่าเชื่อถือTCP ให้บริการส่งข้อมูลอย่างน่าเชื่อถือ ทำให้มั่นใจได้ว่าข้อมูลนั้นปราศจากข้อผิดพลาด ไม่สูญหาย ไม่ซ้ำซ้อน และมาถึงตรงเวลา ในขณะที่ UDP พยายามอย่างเต็มที่แต่ไม่รับประกันการส่งข้อมูลที่เชื่อถือได้ UDP อาจประสบปัญหาข้อมูลสูญหายและสถานการณ์อื่นๆ ระหว่างการส่ง
การควบคุมการจราจรติดขัด การควบคุมการไหลTCP มีกลไกควบคุมความแออัดและควบคุมการไหลของข้อมูล ซึ่งสามารถปรับอัตราการส่งข้อมูลตามสภาพเครือข่ายเพื่อให้มั่นใจในความปลอดภัยและความเสถียรของการส่งข้อมูล ในขณะที่ UDP ไม่มีกลไกควบคุมความแออัดและควบคุมการไหลของข้อมูล แม้ว่าเครือข่ายจะแออัดมาก ก็จะไม่ปรับอัตราการส่งข้อมูลของ UDP
ส่วนหัวด้านบนTCP มีส่วนหัวที่ยาวมาก โดยทั่วไปประมาณ 20 ไบต์ ซึ่งจะเพิ่มขึ้นเมื่อมีการใช้ฟิลด์ตัวเลือก ในทางกลับกัน UDP มีส่วนหัวคงที่เพียง 8 ไบต์ ดังนั้น UDP จึงมีค่าใช้จ่ายด้านส่วนหัวที่ต่ำกว่า

สถานการณ์การใช้งานแอปพลิเคชัน TCP และ UDP:
TCP และ UDP เป็นโปรโตคอลระดับชั้นการขนส่งที่แตกต่างกันสองแบบ และมีความแตกต่างกันในสถานการณ์การใช้งานบางประการ
เนื่องจาก TCP เป็นโปรโตคอลที่เน้นการเชื่อมต่อ จึงใช้เป็นหลักในสถานการณ์ที่ต้องการการส่งข้อมูลที่เชื่อถือได้ ตัวอย่างการใช้งานทั่วไป ได้แก่:
การถ่ายโอนไฟล์ FTPโปรโตคอล TCP ช่วยให้มั่นใจได้ว่าไฟล์จะไม่สูญหายหรือเสียหายระหว่างการถ่ายโอน
HTTP/HTTPSTCP ช่วยให้มั่นใจได้ถึงความสมบูรณ์และความถูกต้องของเนื้อหาบนเว็บไซต์
เนื่องจาก UDP เป็นโปรโตคอลแบบไร้การเชื่อมต่อ จึงไม่รับประกันความน่าเชื่อถือ แต่มีคุณลักษณะด้านประสิทธิภาพและการทำงานแบบเรียลไทม์ UDP เหมาะสำหรับสถานการณ์ต่อไปนี้:
การรับส่งข้อมูลปริมาณน้อย เช่น DNS (ระบบชื่อโดเมน)การส่งคำขอ DNS มักเป็นแพ็กเก็ตขนาดสั้น และ UDP สามารถดำเนินการได้เร็วกว่า
การสื่อสารมัลติมีเดีย เช่น วิดีโอและเสียงสำหรับการส่งข้อมูลมัลติมีเดียที่มีความต้องการความรวดเร็วสูง UDP สามารถให้ความหน่วงต่ำกว่า เพื่อให้มั่นใจได้ว่าข้อมูลจะถูกส่งได้อย่างทันท่วงที
การสื่อสารกระจายเสียงโปรโตคอล UDP รองรับการสื่อสารแบบหนึ่งต่อหลายและหลายต่อหลาย และสามารถใช้สำหรับการส่งข้อความแบบกระจายเสียงได้
สรุป
วันนี้เราได้เรียนรู้เกี่ยวกับ TCP TCP เป็นโปรโตคอลการสื่อสารระดับชั้นการขนส่งแบบเชื่อมต่อที่เชื่อถือได้และใช้สตรีมไบต์ มันรับประกันการส่งและรับข้อมูลอย่างน่าเชื่อถือโดยการสร้างการเชื่อมต่อ การจับมือ และการยืนยัน โปรโตคอล TCP ใช้พอร์ตเพื่อทำให้เกิดการสื่อสารระหว่างกระบวนการ และให้บริการการสื่อสารโดยตรงสำหรับกระบวนการแอปพลิเคชันที่ทำงานบนโฮสต์ที่แตกต่างกัน การเชื่อมต่อ TCP เป็นแบบฟูลดูเพล็กซ์ ทำให้สามารถถ่ายโอนข้อมูลแบบสองทิศทางพร้อมกันได้ ในทางตรงกันข้าม UDP เป็นโปรโตคอลการสื่อสารแบบไม่เชื่อมต่อ ซึ่งไม่รับประกันความน่าเชื่อถือและเหมาะสำหรับสถานการณ์บางอย่างที่มีความต้องการแบบเรียลไทม์สูง TCP และ UDP แตกต่างกันในโหมดการเชื่อมต่อ วัตถุประสงค์ของบริการ ความน่าเชื่อถือ การควบคุมความแออัด การควบคุมการไหล และด้านอื่นๆ และสถานการณ์การใช้งานของทั้งสองก็แตกต่างกันด้วย
วันที่โพสต์: 3 ธันวาคม 2024



