Transmission Control Protocol เป็นโปรโตคอลที่สำคัญมากในเลเยอร์การขนส่งสำหรับโมเดล OSI หรือ TCP/IP มีข้อดีมากมายใน TCP เช่น:
- TCP จะทำการส่งซ้ำหากข้อมูลที่ส่งใด ๆ ไม่ได้รับการยอมรับจากผู้รับภายในระยะเวลาหนึ่ง
- TCP สร้างการเชื่อมต่อก่อนที่จะส่งข้อมูล เราเรียกการเชื่อมต่อนั้นว่าการจับมือกัน 3 ทาง
- TCP มีกลไกการควบคุมความแออัด
- TCP สามารถตรวจพบข้อผิดพลาดโดยใช้วิธีการบางอย่าง
ให้เราเรียนรู้เกี่ยวกับ TCP 3-way handshake เป็นหลัก มาเรียนรู้เกี่ยวกับฟิลด์สำคัญใน Wireshark สำหรับการจับมือกัน 3 ทาง
จับมือ 3 ทิศทาง
มีการแลกเปลี่ยนเฟรมสามครั้งที่เกิดขึ้นในการจับมือแบบ 3 ทาง:
เฟรมแรกจะถูกส่งโดยไคลเอ็นต์ไปยังเซิร์ฟเวอร์เสมอ ให้เราเข้าใจสิ่งนี้จากแผนภาพง่ายๆ:
“ลูกค้า” “เซิร์ฟเวอร์”
Frame1: Client ส่ง SYN frame ไปยังเซิร์ฟเวอร์ ---------------------------------------<------------------------------------------------------ เซิร์ฟเวอร์ส่งเฟรม SYN+ACK ถึงลูกค้า: Frame2
Frame3: ลูกค้าส่ง ACK frame ไปยังเซิร์ฟเวอร์ ---------------------------------------
เราสามารถเห็นเฟรมทั้งสามนี้ใน Wireshark สามารถใช้ตัวกรอง 'tcp' ใน Wireshark เพื่อดูเฟรม TCP ทั้งหมด นี่คือภาพหน้าจอสำหรับสามเฟรม:
ให้เราเข้าใจรายละเอียดทั้งสามเฟรม:
ซิน
เฟรมนี้ประกอบด้วยข้อมูลมากมายเกี่ยวกับความสามารถของไคลเอ็นต์ในการแจ้งให้เซิร์ฟเวอร์ทราบ ภาพหน้าจอต่อไปนี้แสดงฟิลด์สำคัญทั้งหมดของเฟรม SYN:
นี่คือฟิลด์ที่สำคัญสำหรับเฟรม SYN:
พอร์ตต้นทาง: 50602ท่าเรือปลายทาง: 80
หมายเลขลำดับ: 0
หมายเลขตอบรับ: 0
ความยาวส่วนหัว: 32 ไบต์
ค่าสถานะ: 0x002 (SYN):
รับทราบ: ไม่ได้ตั้งค่า
กด: ไม่ได้ตั้งค่า
รีเซ็ต: ไม่ได้ตั้งค่า
Syn: Set -----> ชุดบิตนี้เนื่องจากเป็นเฟรม SYN
ครีบ: ไม่ได้ตั้งค่า
หน้าต่าง: 65535
ตัวชี้ด่วน: 0
ตัวเลือก TCP - ขนาดเซ็กเมนต์สูงสุด: 1460 ไบต์
ตัวเลือก TCP - ขนาดหน้าต่าง: 3 (คูณด้วย 8)
ตัวเลือก TCP - SACK อนุญาต
ดู + แจ็ค
เฟรมนี้มีข้อมูลมากมายเกี่ยวกับความสามารถของเซิร์ฟเวอร์ในการแจ้งลูกค้า ภาพหน้าจอต่อไปนี้แสดงฟิลด์สำคัญทั้งหมดของเฟรม SYN+ACK:
เฟรมนี้ยังยอมรับเฟรม SYN ที่ส่งโดยไคลเอนต์
นี่คือฟิลด์สำคัญสำหรับเฟรม SYN+ACK:
พอร์ตต้นทาง: 80ท่าเรือปลายทาง: 50602
หมายเลขลำดับ: 0
หมายเลขตอบรับ: 1
ความยาวส่วนหัว: 32 ไบต์ (8)
ค่าสถานะ: 0x012 (SYN, ACK)
รับทราบ: ชุด
กด: ไม่ได้ตั้งค่า
รีเซ็ต: ไม่ได้ตั้งค่า
เขา: ชุด
ครีบ: ไม่ได้ตั้งค่า
หน้าต่าง: 29200
ตัวชี้ด่วน: 0
ตัวเลือก TCP - ขนาดเซ็กเมนต์สูงสุด: 1412 ไบต์
ตัวเลือก TCP - SACK อนุญาต
ตัวเลือก TCP - ขนาดหน้าต่าง: 7 (คูณด้วย 128)
เราจะเห็นว่ามีการตั้งค่าบิต 'รับทราบ' และ 'SYN' ในเฟรมนี้ เนื่องจากเฟรมนี้เป็น SYN+ACK
อค
เฟรมนี้เป็นเฟรมสุดท้ายของการจับมือแบบ 3 ทิศทาง และเป็นการตอบรับ SYN+ACK จากลูกค้าด้วย ภาพหน้าจอต่อไปนี้แสดงฟิลด์สำคัญทั้งหมดของเฟรม ACK:
นี่คือฟิลด์ที่สำคัญสำหรับเฟรม ACK:
พอร์ตต้นทาง: 50602ท่าเรือปลายทาง: 80
หมายเลขลำดับ: 1
หมายเลขตอบรับ: 1
ความยาวส่วนหัว: 20 ไบต์ (5)
ค่าสถานะ: 0x010 (ACK)
ด่วน: ไม่ได้ตั้งค่า
รับทราบ: ชุด
กด: ไม่ได้ตั้งค่า
รีเซ็ต: ไม่ได้ตั้งค่า
Syn: ไม่ได้ตั้งค่า
ครีบ: ไม่ได้ตั้งค่า
หน้าต่าง: 32768
ที่นี่ ตั้งค่าเฉพาะบิต 'รับทราบ' เนื่องจากเป็นเฟรม ACK
คำอธิบายสำหรับฟิลด์ทั่วไปที่สำคัญบางฟิลด์
พอร์ต 80 : เราสังเกตเห็นหนึ่งพอร์ต 80 ที่คงที่ในบทช่วยสอนนี้ เป็นเพราะนี่คือการจับภาพ HTTP และพอร์ต 80 ได้รับการแก้ไข (ฝั่งเซิร์ฟเวอร์) สำหรับการสื่อสาร HTTP
ลำดับหมายเลข : หมายเลขลำดับของเฟรมนั้น การซิงโครไนซ์เป็นเฟรมแรก ดังนั้นเราจึงมี 0 เป็นหมายเลขลำดับ
ธง TCP:
การรับทราบ – บิตนี้ถูกตั้งค่าหากเฟรมเป็น ACK ตัวอย่าง: SYN+ACK, ACK กรอบ
ซิน – บิตนี้ถูกตั้งค่าหากเฟรมเป็น SYN ตัวอย่าง: SYN
หน้าต่าง : ฟิลด์นี้แชร์ขนาดหน้าต่างสูงสุดของผู้ส่งในโหมดรับ ตัวอย่าง: เรามีหน้าต่างขนาด 65535 ไบต์ในเฟรม SYN ซึ่งหมายความว่าเครื่องรับสามารถรับข้อมูล TCP ได้สูงสุด 65535 ไบต์ ณ เวลาใดก็ได้
กระสอบได้รับอนุญาต : บิตนี้ถูกตั้งค่าหาก send รองรับ SACK [การรับทราบแบบเลือก]
ขนาดเซ็กเมนต์สูงสุด : เราสามารถเรียกมันว่า MSS สิ่งนี้กำหนดเฟรมข้อมูลสูงสุดที่ผู้ส่งสามารถรับได้ ตัวอย่าง: เราได้รับ MSS เป็น 1460 ไบต์ในเฟรม SYN
บทสรุป
เราได้เรียนรู้เกี่ยวกับ TCP 3-way handshake และฟิลด์ที่มีประโยชน์ทั้งหมดสำหรับเฟรม SYN, SYN+ACK และ ACK หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ TCP คุณสามารถไปที่ลิงก์ RFC นี้ https://tools.ietf.org/html/rfc793 .