บทความตอนที่ 3 OSI Model 7 Layer - Functionality explain – 3
เมื่อบทความที่แล้วเราได้เรียนรู้เกี่ยวกับ TCP Header ไปแล้ว ต่อไปจะมาทำการพิจารณาการสร้าง, การบริหารจัดการและการปิด Connection ผ่านทางกระบวนการ 3 กระบวนการทีได้กล่าวไปข้างต้น เราจะเริ่มจากการสร้าง Connection ของ TCP ผ่านทางกระบวนแรกเสียก่อน คือ TCP 3 Way handshake
TCP 3 Way handshake
กระบวนการดังกล่าวจะใช้สำหรับการสร้าง connection จากผู้ส่งไปยังผู้รับ โดยมีเป้าหมายที่สำคัญของกระบวนการนี้คือ การทำให้ฝั่งตรงข้ามทราบถึงหมายเลข Connection ตนเอง โดยมีรายละเอียดดังต่อไปนี้
1.) Host A ต้องการสร้าง Connection ไปยัง Host B มันจะทำการกำหนด flag SYN ใน TCP Header เพื่อใช้สำหรับสร้าง Connection และทำการสุ่มค่า Sequence Number ซึ่งจะได้เท่ากับ 100 ซึ่งค่า Sequence Number ก็จะถูกกำหนดไว้ใน TCP Header เช่นกัน และทำการส่งข้อมูลชุดนี้ไปยังผู้รับ (Host B)
2.) เมื่อ Host B ทำการรับ SYN จาก Host A แล้ว Host B ก็จะทำการตอบกลับโดยการนำเอา Sequence Number จาก Host A มาทำการบวกค่าเพิ่มเข้าไป โดยปกติจะบวกด้วย 1 เสมอ ซึ่งจะทำให้ค่า Acknowledgement Sequence Number = 101 พร้อมกันนี้ Host B ก็จะทำการสุ่มค่า Sequence Number ที่ใช้ในการแสดงหมายเลข Connection ของตนเองขึ้นมาด้วย ซึ่งในกรณีนี้คือหมายเลข 300 และทำการส่งชุดข้อมูลดังกล่าวกลับไปยังเครื่องต้นทาง เราเรียกชุดข้อมูลนี้ว่า “SYN ACK” นั้นหมายความว่าตอนนี้ Host B ทราบหมายเลข Connect ของ Host A แล้ว (ซึ่งในกรณีนี้คือ 100) ด้วยการยืนยันการรับทราบนี้ด้วยการนำเอาค่า Sequence Number ของ Host A มาบวกหนึ่ง (ซึ่งในกรณีนี้คือ 101) พร้อมกับส่งค่าหมายเลข Connection ของตนเองไปให้แก่ Host A เพื่อให้ Host A รับทราบ และยืนยันกลับมาเช่นกัน
3.) เมื่อ Host A รับชุดข้อมูล SYN ACK มันก็ทำการยืนยันการรับทราบหมายเลข Connect ของ Host B ด้วยการนำเอาค่า Sequence Number ของ Host B มาทำการบวกเพิ่ม (ในกรณีนื้คือ 300+1 = 301) และทำการส่งข้อมูลกลับไป โดยกำหนด Flag เป็น ACK และมีค่า SYN ACK = 301 พร้อมหมายเลข Sequence Number ของตนเองคือ 101 กลับไป
เมื่อมาถึงจุดนี้ จะสังเกตุเห็นว่า Host ทั้งสองเครื่องนั้น ต่างก็ทราบเกี่ยวกับหมายเลข Connection ของทั้งสองฝ่ายเป็นทีเรียบร้อยแล้ว ผ่านทางชุดข้อมุลจำนวน 3 ขุด เราจึงเรียกกระบวนนี้ว่า “3 Way handshake”
Flow control and error recovery
กระบวนทั้งสองนี้จะเกิดขึ้นหลังจากการสร้าง connection เสร็จสิ้นแล้ว โดย flow control จะกระทำผ่านค่า window size กล่าวคือ โดยปกติการรับส่งข้อมูลระหว่างต้นทางและปลายทางจำเป็นต้องมีการตกลง parameter ที่สำคัญในการส่งให้เรียบร้อยเสียก่อน นั่นคือ จำนวนข้อมูลหรือ segment ที่จะส่งต่อครั้งจะเป็นจำนวนเท่าใด ซึ่งค่านี้จะถูกกำหนดอยู่ใน TCP Header ในส่วนของ Window ซึ่งเรียกว่า “Window Size” (ตามภาพ)
จากภาพค่าดังกล่าวจะมีขนาด 16 bit ซึ่งนั่นหมายถึงค่าที่เป็นไปได้ของค่านี้คือ 0 – 65,535 ซี่งทำให้การรับส่งข้อมูลต่อครั้งของ TCP สามารถส่งผ่านข้อมูลได้เป็นจำนวนมาก จึงทำให้ Routing protocol บางประเภทอาศัยคุณสมบัตินี้ของ TCP ในการรับส่งข้อมูลเกี่ยวกับเส้นทาง (Routing information) เช่น Routing protocol ประเภท BGP เป็นต้น
กระบวนการในการตกลงค่า Window Size เพื่อใช้กำหนดข้อมูลในการส่งต่อหนึ่งครั้ง มีกระบวนการดังต่อไปนี้
1.) กรณีที่ค่า Window size = 1
ในการศึกษาการทำงานของค่า Window size นั้น ให้สมมติว่า เรามีข้อมูลจำนวน 10 ชุด และชุดข้อมูลดังกล่าวมีหมายเลขกำกับ (sequence number ในกรอบสีฟ้าภาพด้านบน) อยู่ทุกชุด ไล่เรียงไปตั้ง 1 ถึง 10 ดังภาพ
ในกรณีเริ่มต้นการส่งข้อมูล จากเครื่องต้นทาง (sender) ไปยังเครื่องปลายทาง สมมติค่า window size = 1 (ซึ่งเป็นค่า default ในการทำงานเริ่มต้นในการส่งข้อมูลของ TCP) จะมีลักษณะการทำงานดังต่อไปนี้
เครื่องต้นทางทำการข้อมุลหมายเลข 1 (send 1) ไปยังปลายทาง เมื่อปลายทางได้รับข้อมูลสมบูรณ์ ก็จะทำการยืนยันการรับข้อมูลกลับไปยังต้นทางและร้องขอชุดข้อมูลลำดับต่อไป ด้วยการส่งข้อมูลกลับไปยังเครื่องต้นทาง (Ack 2) โดยนัยของชุดข้อมูล Ack 2 หมายถึง “ได้รับข้อมูลชุดที่ 1 เป็นที่เรียบร้อยแล้ว ต้องการข้อมูลหมายเลข 2 ต่อไป” โดยเมื่อเครื่องปลายทางส่งข้อมูลนี้กลับไปยังเครื่องต้นทาง ก็จะทำให้เครื่องต้นทางรับทราบว่าส่งข้อมูลหมายเลข 1 สมบูรณ์ และจะทำการส่งข้อมูลชุดที่ 2 หรือหมายเลข 2 ให้ต่อไป ดังนั้นเครื่องต้นทางก็จะทำการส่งข้อมูลหมายเลข 2 ไปยังเครื่องปลายทาง เมื่อเครื่องปลายทางได้รับข้อมุลหมายเลข 2 สมบูรณ์ครบถ้วนไม่สูญหาย ก็จะทำการส่งข้อมูล Ack 3 กลับไป เพื่อยืนยันการรับข้อมูลและขอข้อมุลหมายเลขต่อไป ซึ่ง TCP ก็จะทำการส่งและรับข้อมูลไปเรื่อย ๆ จนกระทั่งหมดข้อมูล
2.) กรณีที่ค่า Window size = 3
ในกรณีที่ค่า Window size = 3 การรับส่งข้อมูลก็จะมีลักษณะเดียวกันกับค่า Window size = 1 แต่แตกต่างกันตรงที่ เครื่องต้นทางจะทำการส่งข้อมูลไปครั้งละ 3 ชุด แทนที่จะเป็นครั้งละ 1 ชุด ดังภาพ
การทำงานของภาพด้านบน แสดงการส่งข้อมูลด้วยค่า Window size = 3 โดยมีการทำงานคือ เครื่องต้นทางทำการส่งชุดข้อมุลหมายเลข 1,2 และ 3 ไปยังเครื่องปลายทาง และถ้าหากเครื่องปลายทางได้รับข้อมุลหมายเลข 1,2 และ 3 ครบถ้วน ก็จะทำการยืนยันการรับและตอบกลับไปยังต้นทางด้วย Ack 4 โดยนัยของชุดข้อมูล Ack 4 หมายถึง “ได้รับข้อมูลชุดที่ 1,2 และ 3 เป็นที่เรียบร้อยแล้ว ต้องการข้อมูลหมายเลข 4 ต่อไป” โดยเมื่อเครื่องปลายทางส่งข้อมูลนี้กลับไปยังเครื่องต้นทาง ก็จะทำให้เครื่องต้นทางรับทราบว่าส่งข้อมูลหมายเลข 1,2 และ 3 สมบูรณ์ และจะทำการส่งข้อมูลชุดที่ 4, 5 และ 6 ยังไปเครื่องปลายทางต่อไป และเมื่อเครื่องปลายทางได้รับข้อมุลหมายเลข 4,5 และ 6 ครบถ้วนสมบูรณ์ ก็จะทำการส่ง Ack 7 ยืนยันกลับไปยังเครื่องต้นทาง เมื่อเครื่องต้นทางได้รับชุดข้อมูล Ack 7 แล้ว เครื่องต้นทางก็จะทำการส่งข้อมูลต่อไป จนกระทั่งหมดข้อมูล
แต่ในการส่งข้อมูลระหว่างเครื่องต้นทางและเครื่องปลายทางนี้ TCP ก็สามาถทำการเพิ่มหรือลดจำนวนของค่าWindow size ให้เพิ่มขึ้นหรือลดลงได้ โดยการลดลงหรือเพิ่มขึ้นนี้จะขึ้นอยู่กับเครื่องปลายทาง ไม่ใช่เครื่องต้นทาง เหตุผลเพราะเครื่องปลายทางจะเป็นผู้รับข้อมูลไปประมวลผล ดังนั้นการลดหรือเพิ่มจึงขึ้นอยู่กับความสามารถในการประมวลผลของเครื่องปลายทาง เราเรียกกระบวนการในการเพิ่มขึ้นหรือลดลงของค่า Window size ว่า “Sliding Window”
ตัวอย่างและการทำงานของ Sliding Window
เราจะจำลองเหตุการณ์ในการทำงานของ Sliding Windows โดยเริ่มต้นจากค่า Window size = 1 ตามปกติ
จนกระทั่งเมื่อทั้งสองเครื่องทำงานไปสักระยะ เครื่องปลายทางสามารถประมวลผลข้อมูลได้เพิ่มขึ้น ก็จะทำการแจ้งไปยังเครื่องต้นทางให้ส่งข้อมูลเพิ่มขึ้น ด้วยการปรับค่า window size จาก 1 ไปเป็น 5 เป็นต้น ดังภาพ
จะสังเกตุเห็นว่าในการปรับค่า Window size เพิ่มขึ้นนั้น เครื่องปลายทางจำเป็นต้องส่งค่า Window size แจ้งไปยังเครื่องต้นทางประมาณ 2-3 ครั้ง เพื่อทำให้เครื่องต้นทางแน่ใจว่า เครื่องปลายทางสามารรถรับข้อมูลจำนวนมากขึ้นไปประมวลผล และเมื่อทำการปรับค่า Window size จาก 1 เป็น 5 เป็นที่เรียบร้อยแล้ว การรับส่งข้อมูลก็จะใช้งาน Window size ค่าดังกล่าวไปเรื่อย ๆ นั่นหมายความว่า มีความเป็นไปได้ที่ เครื่องปลายทางจะทำการเพิ่มค่า Window size เพิ่มขึ้นจนกระทั่งเต็มขีดจำกัดของค่า Window size คือ 65,535 ถ้าหากความสามารถในการประมวลผลของเครื่องปลายทางสามารถทำได้
และถ้าหากสมมติว่า เครื่องปลายทางหมดความสามารถในการประมวลผล จากข้อมูลที่ทางเครื่องต้นทางส่งมา (ในกรณีคือ window size = 5 ชุด) แต่สามารถนำข้อมูลมาประมวลผลได้เพียง 3 ชุด (window size = 3) และไม่สามารถนำข้อมูลมาประมวลผลได้จำนวน 2 ขุด การทำงานจะเป็นอย่างไร อธิบายได้ตามภาพด้านล่าง ดังนี้
เช่นเดียวกับการปรับเพิ่มค่า Window size การปรับลดค่า Window size จาก 5 เป็น 3 จะเกิดขึ้นประมาณ 2-3 ครั้ง ซึ่งในการปรับเปลี่ยนนี้อาจจะเกิดจากเครื่องปลายทางไม่สามารถประมวลผลจำนวน 5 ชุดได้ แต่สามารถนำข้อมูลมาประมวลได้เพียง 3 ชุดเท่านั้น จึงทำให้ชุดข้อมูลที่ส่งมาจากเครื่องต้นทางเช่น ชุดข้อมูลหมายเลข 18,19,20,21 และ 22 นั้น สามารถประมวลผลได้เพียง ชุดข้อมูลหมายเลข 18,19,20 เท่านั้น สำหรับชุดข้อมูลหมายเลข 21 และ 22 นั้น ก็จะถูกร้องขอไปยังเครื่องต้นทางใหม่อีกครั้ง โดยกำหนดค่า Window size = 3 เมื่อเครื่องต้นทางได้รับคำร้องขอชุดข้อมูลหมายเลข 21 ก็จะทำการส่งข้อมูลที่เคยส่งไปก่อนหน้านี้ ซ้ำอีกครั้ง แต่ก็เพิ่มจำนวนชุดข้อมูลหมายเลข 23,24,25 เข้าไปด้วย (สืบเนื่องจาก Window size = 5) และทำการส่งชุดช้อมูลทั้งหมดไปยังเครื่องปลายทาง เมื่อเครื่องปลายทางทำการรับชุดข้อมูลหมายเลข 21,22,2,3,24,25 ก็สามารถนำมาประมวลผลได้เพียงชุดข้อมูลหมายเลข 21,22,23 เท่านั้น ชุดข้อมูลหมายเลข 24,25 ก็ไม่สามารถนำมาประมวลผลได้อีกเช่นเดิม เครื่องปลายทางก็จะทำการร้องขอชุดข้อมูลหมายเลข 24 อีกครั้ง พร้อมทั้ง่ส่งค่า Window size = 3 ไปยังเครื่องต้นทาง เมื่อเครื่องต้นทางได้รับชุดข้อมูล ก็จะทราบว่าเครื่องปลายทางไม่สามารถประมวลผลชุดช้อมูลจำนวน 5 ชุดได้ ก็จะทำการลดจำนวนชุดข้อมูลลง
Error Recovery
จะสังเกตุเป็นได้ว่า เมื่อเครื่องปลายทางไม่สามารถประมวลผลข้อมูลจำนวน 5 ชุดได้ ทำให้ข้อมูลสูญหายไป 2 ชุด และเครื่องปลายทางก็จะทำการร้องขอชุดข้อมูลที่ไม่สามารถประมวลผลหรือสูญหายไปใหม่ โดยการอ้างอิงหมายเลขของชุดข้อมูล นั่นคือ หมายเลข Sequence Number โดยหมายเลขดังกล่าวมักจะถูกนำมาใช้ประโยชน์ในการระบุชุดข้อมูล และใช้ในการทำ recovery ในกรณีที่เครื่องต้นทางส่งข้อมูลแล้ว เกิดสูญหายด้วยสาเหตุใด ๆ ลองพิจารณาตัวอย่างในการทำ Error recovery ดังภาพต่อไปนี้
จากภาพจะเห็นว่า เครื่องต้นทางส่งข้อมูลหมายเลข 3 แล้วเกิดสูญหายด้วยสาเหตุใด ๆ ทำให้เครื่องปลายทางไม่ได้รับชุดข้อมูลชุดนี้ ส่งผลให้เครื่องปลายทางทำการร้องขอชุดข้อมูลหมายเลข 3 อีกครั้งด้วยการส่ง Send Ack 3 กลับไปยังเครื่องต้นทางอีกครั้งหนึ่ง เมื่อเครื่องต้นทางรับข้อมูลจากเครื่องปลายทางก็จะทำการส่งข้อมูลชุดที่ 3 ซ้าอีกครั้ง
ลองพิจารณาอีกหนึ่งตัวอย่าง แต่คราวนี้จะมีค่า windows เท่ากับ 3 ดังภาพ
จากภาพ จะสังเกตุเห็นว่าชุดข้อมูลหมายเลข 15 ที่ส่งจากเครื่องต้นทาง ไปยังเครื่องปลายทางนั้นสูญหายด้วยสาเหตุใด ๆ ส่งผลให้เครื่องปลายทางได้รับชุดข้อมูลหมายเลข 13 และ 14 เท่านั้น เครื่องปลายทางจึงร้องขอชุดข้อมูลหมายเลข 15 ซ้ำอีกครั้ง เมื่อเครื่องต้นทางได้รับคำร้องขอให้ส่งชุดข้อมูลหมายเลข 15 เครื่องต้นทางก็จะทำการส่งชุดข้อมูลหมายเลข 15 กลับไปยังเครื่องปลายทาง เมื่อเครื่องปลายทางได้รับชุดข้อมูลหมายเลข 15 แล้ว ก็จะกลับเข้าสู่การทำงานตามปกติต่อไป
จากคำอธิบาย อาจจะสรุปได้ว่า TCP Flow control และ Error Recovery นั้น จะมีการใช้งาน parameter อยู่ 2 ชนิดที่อยู่ใน TCP Header คือ Window Size สำหรับทำ flow control และ sequence number สำหรับ error recovery
4 way handshake
เป็นกระบวนการสุดท้าย ที่ใช้ในการปิด Connection หลังจากที่ส่งข้อมูลเป็นทีเรียบร้อยแล้ว ลักษณะการทำงานของ 4 way handshake จะมีลักษณะคล้ายคลึงกับ 3 way handshake แต่แตกต่างกันบ้างเล็กน้อย ดังต่อไปนี้ (ดังภาพ)
จากภาพเป็นกระบวนการในการขอปิด connection โดยสมมติให้มีเครื่องคอมพิวเตอร์ ที่มีลักษณะการทำงานเป็น Server-Client โดย Client อาจจะมีการใช้งาน application บางอย่างบน server เราจำลองสถานะการณ์ว่าเครื่อง Client มีการใช้งาน Application ดังกล่าวเป็นที่เรียบร้อยแล้ว ดังนั้นเครื่อง Client จะทำการปิด Connect เพราะได้รับ Signal จาก Application โดยการส่งชุดข้อมูลที่มี Flag ใน TCP Header เป็น Finish หรือ Fin ไปยังเครื่องปลายทาง (ข้อมูลหมายเลข #1)
เมื่อเครื่องปลายทางหรือเครื่อง server ได้รับ TCP flag FIN แล้ว มันจะทำการตอบกลับด้วย ACK (ข้อมูลหมายเลข #2) และทำการส่ง Signal ขึ้นไปบน Application เพื่อแจ้งกับ Application ให้ทำการปิด connection โดยจังหวะนี้จะเรียกว่า “Half-Close” และเครื่องปลายทางก็จะทำการรอให้ Application เปิด session การทำงานเสร็จสิ้น
และเมื่อ Application ที่อยู่บนเครื่องปลายทางพร้อมในการปิด Connection แล้วมันจะแจ้งกลับลงไปยัง TCP เมื่อ TCP ได้รับ signal ว่าพร้อมทำการปิด Connection แล้ว TCP ก็จะทำการส่งข้อมูลชุดที่ 3 ซึ่งก็คือ Flag FIN (ข้อมูลหมายเลข #1 หลัง Half-Close) กลับไปยังเครืองต้นทาง เวลาที่ใช้งานในจังหวะนี้อาจจะช้าหรือเร็วก็จะขึ้นอยู่กับ Application ที่อยู่บนเครื่องปลายทางพร้อมที่จะทำการปิด Connection ได้เร็วหรือช้าแค่ไหน
ย้อนกลับที่จังหวะที่เครื่องปลายทางมีการส่ง Flag FIN กลับมายังเครื่องต้นทางที่ขอปิด Connection เมื่อได้รับ Flag FIN แล้ว มันก็จะเข้าใจว่าเครื่องปลายทางพร้อมในการปิด Connection มันก็จะทำการส่ง Flag ACK (ข้อมูลหมายเลข #1 หลัง Half-Close) ยืนยันกลับไปบอกเครื่องปลายทางว่ามันรับทราบเรื่องของการปิด Connection แล้ว และทำการปิด Connection เป็นอันเสร็จสิ้นกระบวนการ
ถ้าสังเกตุให้ดีจะเห็นว่า จำนวนชุดข้อมูลที่ใช้ในการปิด Connection นี้จะมีจำนวนทั้งสิ้น 4 ชุด เราจึงเรียกกระบวนการดังกล่าวว่า “4 way handshake”
บทความตอนหน้า จะมาอธิบายถึง การทำงานของ layer ที่เหลือ คือ layer 3,2 และ 1 ใน OSI Model 7 Layer อย่างละเอียดกันต่อ โปรดจำไว้ว่า ในการเรียน CCNA ให้ได้ผลอย่างเต็มประสิทธิภาพนั้น ทฤษฏีในทุก ๆ เรื่องล้วนแล้วแต่สำคัญทั้งสิ้น ไม่แพ้กระบวนการในการคอนฟิกอุปกรณ์ เพราะทฤษฏีที่ถูกต้องจะช่วยให้ท่านสามารถ Design, Troubleshooting สอบ CCNA Certificated ได้
++ Real Skills, Real Solutions @ Netlogic Training Center ++
บริษัท Netlogic Training Center จำกัด (C.Kiatjindaratana)
** รายละเอียดข้างต้นเหมาะสำหรับผุ้ที่ต้องการอบรม, สอบ CCNA หรือผุ้ทีต้องการข้อมุลทั่วไป **