DCN - Transmission Control Protocol
Transmission Control Protocol (TCP) เป็นหนึ่งในโปรโตคอลที่สำคัญที่สุดของชุด Internet Protocols เป็นโปรโตคอลที่ใช้กันอย่างแพร่หลายที่สุดสำหรับการส่งข้อมูลในเครือข่ายการสื่อสารเช่นอินเทอร์เน็ต
คุณสมบัติ
TCP เป็นโปรโตคอลที่เชื่อถือได้ นั่นคือผู้รับจะส่งการตอบรับเชิงบวกหรือเชิงลบเกี่ยวกับแพ็กเก็ตข้อมูลไปยังผู้ส่งเสมอเพื่อให้ผู้ส่งมีเบาะแสที่ชัดเจนว่าแพ็กเก็ตข้อมูลไปถึงปลายทางหรือไม่หรือจำเป็นต้องส่งใหม่
TCP ทำให้แน่ใจว่าข้อมูลไปถึงปลายทางที่ต้องการตามลำดับเดียวกันกับที่ส่ง
TCP มุ่งเน้นการเชื่อมต่อ TCP ต้องการให้มีการเชื่อมต่อระหว่างจุดระยะไกลสองจุดก่อนที่จะส่งข้อมูลจริง
TCP มีกลไกการตรวจสอบข้อผิดพลาดและการกู้คืน
TCP จัดเตรียมการสื่อสารแบบ end-to-end
TCP ให้การควบคุมการไหลและคุณภาพของบริการ
TCP ทำงานในโหมดจุดต่อจุดไคลเอ็นต์ / เซิร์ฟเวอร์
TCP จัดเตรียมเซิร์ฟเวอร์แบบฟูลดูเพล็กซ์กล่าวคือสามารถทำหน้าที่ของทั้งผู้รับและผู้ส่ง
หัวข้อ
ความยาวของส่วนหัว TCP มีความยาวขั้นต่ำ 20 ไบต์และสูงสุด 60 ไบต์
Source Port (16-bits) - ระบุพอร์ตต้นทางของกระบวนการแอปพลิเคชันบนอุปกรณ์ส่ง
Destination Port (16-bits) - ระบุพอร์ตปลายทางของกระบวนการสมัครบนอุปกรณ์รับ
Sequence Number (32-bits) - ลำดับจำนวนไบต์ข้อมูลของเซ็กเมนต์ในเซสชัน
Acknowledgement Number (32-bits) - เมื่อตั้งค่าสถานะ ACK หมายเลขนี้จะมีหมายเลขลำดับถัดไปของไบต์ข้อมูลที่คาดไว้และทำงานเป็นการรับทราบข้อมูลก่อนหน้านี้ที่ได้รับ
Data Offset (4-bits) - ฟิลด์นี้หมายถึงทั้งขนาดของส่วนหัว TCP (คำ 32 บิต) และออฟเซ็ตของข้อมูลในแพ็กเก็ตปัจจุบันในส่วน TCP ทั้งหมด
Reserved (3-bits) - สงวนไว้สำหรับการใช้งานในอนาคตและทั้งหมดจะถูกตั้งค่าเป็นศูนย์ตามค่าเริ่มต้น
Flags (1-bit each)
NS - Nonce Sum bit ถูกใช้โดยกระบวนการส่งสัญญาณ Explicit Congestion Notification
CWR - เมื่อโฮสต์ได้รับแพ็กเก็ตที่มีการตั้งค่าบิต ECE ระบบจะตั้งค่า Congestion Windows Reduced เพื่อรับทราบว่าได้รับ ECE
ECE - มีสองความหมาย:
ถ้า SYN บิตชัดเจนเป็น 0 ดังนั้น ECE หมายความว่าแพ็คเก็ต IP มีชุดบิต CE (ประสบการณ์ความแออัด)
ถ้า SYN bit ถูกตั้งค่าเป็น 1 ECE หมายความว่าอุปกรณ์นั้นสามารถใช้ ECT ได้
URG - ระบุว่าช่องตัวชี้เร่งด่วนมีข้อมูลสำคัญและควรได้รับการประมวลผล
ACK- แสดงว่าช่องรับทราบมีความสำคัญ ถ้า ACK ถูกล้างเป็น 0 แสดงว่าแพ็กเก็ตไม่มีการตอบรับใด ๆ
PSH - เมื่อตั้งค่าแล้วจะเป็นการร้องขอไปยังสถานีรับเพื่อส่งข้อมูล (ทันทีที่มา) ไปยังแอปพลิเคชันรับโดยไม่ต้องบัฟเฟอร์
RST - ตั้งค่าสถานะใหม่มีคุณสมบัติดังต่อไปนี้:
ใช้เพื่อปฏิเสธการเชื่อมต่อที่เข้ามา
ใช้เพื่อปฏิเสธกลุ่ม
ใช้เพื่อเริ่มการเชื่อมต่อใหม่
SYN - แฟล็กนี้ใช้เพื่อตั้งค่าการเชื่อมต่อระหว่างโฮสต์
FIN- แฟล็กนี้ใช้เพื่อปล่อยการเชื่อมต่อและไม่มีการแลกเปลี่ยนข้อมูลอีกหลังจากนั้น เนื่องจากแพ็กเก็ตที่มีแฟล็ก SYN และ FIN มีหมายเลขลำดับจึงประมวลผลตามลำดับที่ถูกต้อง
Windows Size - ฟิลด์นี้ใช้สำหรับการควบคุมการไหลระหว่างสองสถานีและระบุจำนวนบัฟเฟอร์ (เป็นไบต์) ที่ผู้รับจัดสรรสำหรับเซ็กเมนต์นั่นคือจำนวนข้อมูลที่ผู้รับคาดหวัง
Checksum - ฟิลด์นี้ประกอบด้วยการตรวจสอบส่วนหัวข้อมูลและส่วนหัวหลอก
Urgent Pointer - ชี้ไปที่ไบต์ข้อมูลเร่งด่วนหากตั้งค่าสถานะ URG เป็น 1
Options - อำนวยความสะดวกในตัวเลือกเพิ่มเติมที่ส่วนหัวปกติไม่ครอบคลุม ฟิลด์ตัวเลือกจะอธิบายเป็นคำ 32 บิตเสมอ หากฟิลด์นี้มีข้อมูลน้อยกว่า 32 บิตจะมีการใช้ช่องว่างภายในเพื่อปกปิดบิตที่เหลือเพื่อให้ถึงขอบเขต 32 บิต
ที่อยู่
การสื่อสาร TCP ระหว่างโฮสต์ระยะไกลสองโฮสต์ทำได้โดยใช้หมายเลขพอร์ต (TSAPs) หมายเลขพอร์ตมีตั้งแต่ 0 - 65535 ซึ่งแบ่งออกเป็น:
- พอร์ตระบบ (0 - 1023)
- พอร์ตผู้ใช้ (1024 - 49151)
- พอร์ตส่วนตัว / ไดนามิก (49152 - 65535)
การจัดการการเชื่อมต่อ
การสื่อสาร TCP ทำงานในโมเดลเซิร์ฟเวอร์ / ไคลเอ็นต์ ไคลเอ็นต์เริ่มต้นการเชื่อมต่อและเซิร์ฟเวอร์ยอมรับหรือปฏิเสธ การจับมือสามทางใช้สำหรับการจัดการการเชื่อมต่อ
การจัดตั้ง
ไคลเอนต์เริ่มต้นการเชื่อมต่อและส่งเซ็กเมนต์พร้อมหมายเลขลำดับ เซิร์ฟเวอร์ตอบรับกลับมาพร้อมกับหมายเลขลำดับของตัวเองและ ACK ของเซ็กเมนต์ของไคลเอนต์ซึ่งมากกว่าหมายเลขลำดับของไคลเอนต์ ไคลเอนต์หลังจากได้รับ ACK ของเซ็กเมนต์จะส่งการตอบรับของเซิร์ฟเวอร์
ปล่อย
เซิร์ฟเวอร์และไคลเอนต์อย่างใดอย่างหนึ่งสามารถส่งเซ็กเมนต์ TCP โดยตั้งค่าสถานะ FIN เป็น 1 เมื่อปลายทางการรับตอบกลับโดย ACKnowledging FIN ทิศทางของการสื่อสาร TCP นั้นจะถูกปิดและปล่อยการเชื่อมต่อ
การจัดการแบนด์วิดท์
TCP ใช้แนวคิดเรื่องขนาดหน้าต่างเพื่อรองรับความต้องการในการจัดการแบนด์วิดท์ ขนาดหน้าต่างบอกผู้ส่งที่ปลายระยะไกลจำนวนไบต์ข้อมูลที่แบ่งส่วนผู้รับที่ส่วนท้ายนี้สามารถรับได้ TCP ใช้เฟสเริ่มต้นช้าโดยใช้ขนาดหน้าต่าง 1 และเพิ่มขนาดหน้าต่างแบบเอ็กซ์โปเนนเชียลหลังจากการสื่อสารสำเร็จแต่ละครั้ง
ตัวอย่างเช่นไคลเอนต์ใช้ windows ขนาด 2 และส่งข้อมูล 2 ไบต์ เมื่อการตอบรับของเซ็กเมนต์นี้ได้รับขนาด windows จะเพิ่มเป็นสองเท่าเป็น 4 และส่งต่อไปเซ็กเมนต์ที่ส่งจะมีความยาว 4 ไบต์ข้อมูล เมื่อได้รับการตอบรับส่วนข้อมูล 4 ไบต์ไคลเอ็นต์จะตั้งค่าขนาดหน้าต่างเป็น 8 เป็นต้นไป
หากพลาดการรับทราบกล่าวคือข้อมูลสูญหายในเครือข่ายการส่งผ่านหรือได้รับ NACK ขนาดหน้าต่างจะลดลงเหลือครึ่งหนึ่งและระยะเริ่มต้นที่ช้าจะเริ่มขึ้นอีกครั้ง
การควบคุมข้อผิดพลาดและการควบคุมการไหล
TCP ใช้หมายเลขพอร์ตเพื่อให้ทราบว่าต้องใช้กระบวนการแอปพลิเคชันใดในการส่งมอบเซ็กเมนต์ข้อมูล นอกจากนั้นจะใช้หมายเลขลำดับเพื่อซิงโครไนซ์ตัวเองกับโฮสต์ระยะไกล กลุ่มข้อมูลทั้งหมดจะถูกส่งและรับด้วยหมายเลขลำดับ ผู้ส่งรู้ว่าผู้รับได้รับส่วนข้อมูลสุดท้ายใดเมื่อได้รับ ACK ผู้รับทราบเกี่ยวกับส่วนสุดท้ายที่ส่งโดยผู้ส่งโดยอ้างถึงหมายเลขลำดับของแพ็กเก็ตที่เพิ่งได้รับ
หากหมายเลขลำดับของเซ็กเมนต์ที่เพิ่งได้รับไม่ตรงกับหมายเลขลำดับที่ผู้รับคาดหวังไว้มันจะถูกทิ้งและ NACK จะถูกส่งกลับ หากสองเซ็กเมนต์มาพร้อมกับหมายเลขลำดับเดียวกันค่าการประทับเวลา TCP จะถูกเปรียบเทียบเพื่อทำการตัดสินใจ
มัลติเพล็กซ์
เทคนิคในการรวมสตรีมข้อมูลตั้งแต่สองสตรีมขึ้นไปในหนึ่งเซสชันเรียกว่า Multiplexing เมื่อไคลเอ็นต์ TCP เริ่มต้นการเชื่อมต่อกับเซิร์ฟเวอร์มักจะอ้างถึงหมายเลขพอร์ตที่กำหนดไว้อย่างดีซึ่งระบุกระบวนการแอปพลิเคชัน ไคลเอนต์เองใช้หมายเลขพอร์ตที่สร้างขึ้นแบบสุ่มจากพูลหมายเลขพอร์ตส่วนตัว
การใช้ TCP Multiplexing ไคลเอนต์สามารถสื่อสารกับกระบวนการแอปพลิเคชันที่แตกต่างกันจำนวนมากในเซสชันเดียว ตัวอย่างเช่นไคลเอนต์ร้องขอเว็บเพจซึ่งจะมีข้อมูลประเภทต่างๆ (HTTP, SMTP, FTP เป็นต้น) การหมดเวลาของเซสชัน TCP จะเพิ่มขึ้นและเซสชันจะเปิดไว้เป็นเวลานานขึ้นเพื่อให้โอเวอร์เฮดแฮนด์เชคสามทางสามารถ หลีกเลี่ยง
สิ่งนี้ทำให้ระบบไคลเอนต์สามารถรับการเชื่อมต่อหลายครั้งผ่านการเชื่อมต่อเสมือนเดียว การเชื่อมต่อเสมือนเหล่านี้ไม่ดีสำหรับเซิร์ฟเวอร์หากหมดเวลานานเกินไป
การควบคุมความแออัด
เมื่อข้อมูลจำนวนมากถูกป้อนเข้าสู่ระบบซึ่งไม่สามารถจัดการได้จะเกิดความแออัด TCP ควบคุมความแออัดโดยใช้กลไก Window TCP กำหนดขนาดหน้าต่างเพื่อบอกให้อีกฝ่ายทราบว่าจะส่งส่วนข้อมูลไปเท่าใด TCP อาจใช้อัลกอริทึมสามแบบสำหรับการควบคุมความแออัด:
การเพิ่มขึ้นของสารเติมแต่งการลดลงแบบทวีคูณ
เริ่มช้า
หมดเวลาตอบสนอง
การจัดการตัวจับเวลา
TCP ใช้ตัวจับเวลาประเภทต่างๆเพื่อควบคุมและจัดการงานต่างๆ:
ตัวจับเวลาที่มีชีวิตอยู่:
ตัวจับเวลานี้ใช้เพื่อตรวจสอบความสมบูรณ์และความถูกต้องของการเชื่อมต่อ
เมื่อหมดเวลารักษาชีวิตโฮสต์จะส่งโพรบเพื่อตรวจสอบว่ายังมีการเชื่อมต่ออยู่หรือไม่
จับเวลาถอยหลัง:
ตัวจับเวลานี้รักษาเซสชันข้อมูลที่ส่งไปอย่างมีสถานะ
หากไม่ได้รับการตอบรับข้อมูลที่ส่งภายในเวลาส่งซ้ำส่วนข้อมูลจะถูกส่งอีกครั้ง
ยังคงจับเวลา:
เซสชัน TCP สามารถหยุดชั่วคราวโดยโฮสต์ใดก็ได้โดยการส่ง Window Size 0
ในการดำเนินเซสชันต่อโฮสต์จำเป็นต้องส่งขนาดหน้าต่างพร้อมค่าที่มากกว่า
หากส่วนนี้ไปไม่ถึงจุดสิ้นสุดทั้งสองอาจรอกันเป็นเวลาไม่สิ้นสุด
เมื่อตัวจับเวลา Persist หมดลงโฮสต์จะส่งขนาดหน้าต่างอีกครั้งเพื่อแจ้งให้อีกฝ่ายทราบ
Persist Timer ช่วยหลีกเลี่ยงการชะงักงันในการสื่อสาร
หมดเวลารอ:
หลังจากปล่อยการเชื่อมต่อแล้วโฮสต์ใดโฮสต์หนึ่งจะรอเวลารอตามกำหนดเวลาเพื่อยุติการเชื่อมต่ออย่างสมบูรณ์
ทั้งนี้เพื่อให้แน่ใจว่าปลายอีกด้านได้รับการตอบรับคำขอยุติการเชื่อมต่อ
หมดเวลาได้สูงสุด 240 วินาที (4 นาที)
การกู้คืนความผิดพลาด
TCP เป็นโปรโตคอลที่น่าเชื่อถือมาก ให้หมายเลขลำดับสำหรับแต่ละไบต์ที่ส่งในเซ็กเมนต์ มันจัดเตรียมกลไกป้อนกลับเช่นเมื่อโฮสต์ได้รับแพ็กเก็ตจะถูกผูกไว้กับ ACK ที่แพ็กเก็ตมีหมายเลขลำดับถัดไปที่คาดไว้ (ถ้าไม่ใช่เซ็กเมนต์สุดท้าย)
เมื่อเซิร์ฟเวอร์ TCP ขัดข้องในการสื่อสารระหว่างทางและเริ่มกระบวนการใหม่อีกครั้งระบบจะส่งการออกอากาศ TPDU ไปยังโฮสต์ทั้งหมด จากนั้นโฮสต์สามารถส่งส่วนข้อมูลสุดท้ายซึ่งไม่เคยมีใครรู้เห็นและดำเนินการต่อไป