ขอแสดง state ทั้งหมดของ TCP Connection ก่อนดีกว่า (ตาม rfc 793) มันมี LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSING, LAST-ACK, TIME-WAIT และสุดท้าย state ที่คุณไม่มีวันเห็นก็คือ CLOSED
ก่อนจะบอกว่าแต่ละ state ทำอะไรขอพูดเรื่อง Control bit ใน TCP Header นิดนึงกับ 3-Way Handshake ก่อนละกัน
ตัว TCP Header จะมี Control bit อยู่ทั้งหมด 6 bits คือ URG, ACK, PSH, RST, SYN, FIN โดยบิท ACK, RST, SYN, FIN เป็นตัวหลักในการกำหนดการเปลี่ยนแปลงของ connection state
ในการเชื่อมต่อจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง ด้วย TCP ฝั่ง server จะต้องเปิด port ทิ้งไว้ โดยฝั่ง server จะเรียก state ที่เปิด port ว่า LISTEN และก่อนที่จะเริ่มส่งข้อมูลกันได้ ก็จะมีการทำที่เรียกว่า 3-Way Handshake ดังนี้
Client Server
0. CLOSED LISTEN
1. SYN-SENT --> SYN --> SYN-RECEIVED
2. ESTABLISHED <-- SYN,ACK <-- SYN-RECEIVED
3. ESTABLISHED --> ACK --> ESTABLISHED
1. Client จะส่ง packet โดยจะ set SYN bit ใน TCP header ไปยัง client เมื่อจบขั้นตอนนี้ state ที่ฝั่ง client จะเป็น SYN-SENT และ state ของ server จะเป็น SYN-RECEIVED
2. Server จะตอบ client โดยการ set SYN และ ACK bit ใน TCP header เมื่อจบขั้นตอนนี้ state ที่ฝั่ง client จะเป็น ESTABLISHED และ state ของ server ยังคงเป็น SYN-RECEIVED
3. Client ตอบ server ด้วยการ set ACK bit ใน TCP header เมื่อจบขั้นตอนนี้ state ของทั้ง client และ server จะเป็น ESTABLISHED
หลังจาก 3-Way handshake ก็จะทำการเริ่มส่งข้อมูล
เหนื่อยแหละ พอก่อน ถ้าไม่นับ CLOSED ก็อธิบายไปแล้วนะ 4 state คือ LISTEN, SYN-SENT, SYN-RECEIVED และ ESTABLISHED ที่เหลือจะอยู่ในช่วงที่จะปิด connection ต่อคราวหน้า
4 August 2007
Reference:
[1] RFC 793 - Transmission Control Protocol, http://www.rfc.net/rfc793.html
No comments:
Post a Comment