หาอะไรไม่เจอกดเลย

วันเสาร์ที่ 26 มีนาคม พ.ศ. 2554

คำอธิบายเกี่ยวกับเรื่อง Port


หิวมากตอนกำลังนั้่งเขียนบทความนี้ เห้อ แบบนี้แหละครับชีวิตที่ต้องอยู่คนเดียว น่าสงสาร คิดถึงลูกเมีย กร๊ากๆ มาเข้าเรื่องกันดีกว่า เราก็ได้เรียนรู้เรื้องเกียวกับการ hacking ไปบ้างแล้ววันนี้ก่อนที่เราจะ hack เราก็ต้องหา port เราคงได้ยินกันมาบ้างแต่บางคนอาจสงสัยว่ามันคืออะไร วันนี้นายมุมขยันอีกแล้วไปหาคำตอบมาให้จนได้ เอาละไม่เสียเวลา ไปดูกันเลยว่ามันคืออะไรกันแน่ไอ้เจ้า port เนีย

ความรู้ทั่วไปเกี่ยวกับ Port
สำหรับพวก Application ในชั้น layer สูงๆ ที่ใช้ TCP (Transmission Control Protocol) หรือ UDP (User Datagram Protocol) จะมีหมายเลข Port หมายเลขของ Port จะเป็นเลข 16 bit เริ่มตั้งแต่ 0 ถึง 65535 หมายเลข Port ใช้สำหรับตัดสินว่า service ใดที่ต้องการเรียกใช้ ในทางทฤษฎี หมายเลข Port แต่ละหมายเลขถูกเลือกสำหรับ service ใดๆ ขึ้นอยู่กับ OS (operating system) ที่ใช้ ไม่จำเป็นต้องเหมือนกัน แต่ได้มีกำหนดขึ้นให้ใช้ค่อนข้างเป็นมาตรฐานเพื่อให้มีการติดต่อการส่งข้อมูลที่ดีขึ้น ทาง Internet Assigned Numbers Authority (IANA) เป็นหน่วยงานกลางในการประสานการเลือกใช้ Port ว่า Port หมายเลขใดควรเหมาะสำหรับ Service ใด และได้กำหนดใน Request For Comments (RFC') 1700 ตัวอย่างเช่น เลือกใช้ TCP Port หมายเลข 23 กับ Service Telnet และเลือกใช้ UDP Port หมายเลข 69 สำหรับ Service Trivial File transfer Protocol (TFTP) ตัวอย่างต่อไปนี้เป็นบางส่วนของ File/etc/services แสดงให้เห็นว่า หมายเลข Port แต่ละหมายเลขได้ถูกจับคู่กับ Transport Protocol หนึ่งหรือสอง Protocol ซึ่งหมายความว่า UPP หรือ TCP อาจจะใช้ หมายเลข Port เดียวกันก็ได้ เนื่องจากเป็น Protocol ที่ต่างกัน



หมายเลข Port ถูกจัดแบ่งเป็น 2 ประเภท ตามที่ได้กำหนดใน RFC' 1700 (รายละเอียด Download และศึกษาได้ที่ ftp://ftp.isi.edn/in-notes/rfc'1700.txt) คือ well known Ports และ Registered Ports
  • Well Known Ports คือจะเป็น Port ที่ระบบส่วนใหญ่ กำหนดให้ใช้โดย Privileged User (ผู้ใช้ที่มีสิทธิพิเศษ) โดย port เหล่านี้ ใช้สำหรับการติดต่อระหว่างเครื่องที่มีระบบเวลาที่ยาวนาน วัตถุประสงค์เพื่อให้ service แก่ผู้ใช้ (ที่ไม่รู้จักหรือคุ้นเคย) แปลกหน้า จึงจำเป็นต้องกำหนด Port ติดต่อสำหรับ Service นั้นๆ
  • Registered Ports จะเป็น Port หมายเลข 1024 ขึ้นไป ซึ่ง IANA ไม่ได้กำหนดไว้  
ตัวอย่างการใช้ Port
แต่ละ Transport layer segment จะมีส่วนย่อยที่ประกอบไปด้วยหมายเลข Port ของเครื่องปลายทาง โดยที่เครื่องปลายทาง (Destination hostt) จะใช้ Port นี้ในการส่งข้อมูลให้ไหลกับ Application ได้ถูกต้อง หน้าที่ในการส่งหรือแจกจ่าย Segment ของข้อมูลให้ตรงกับ Application เรียกว่าการ "Demultiplexing" ในทางกลับกันเครื่องต้นทาง (Source host) หน้าที่ในการรวบรวมข้อมูลจาก Application และเพิ่ม header เพื่อสร้าง segment เรียกว่า "Multiplexing" หรือถ้ายกตัวอย่างเป็นภาษาทั่วๆ ไป คือ ในแต่ละบ้านจะมีคน 1 คนรับผิดชอบเก็บจดหมายจากกล่องจดหมาย ถ้าเป็นการ Demultiplexing คนๆ นั้นจะแจกจ่ายจดหมายที่จ่าหน้าซองให้
สอดคล้องกับบุคคลนั้นๆ ในบ้าน ในทางตรงกันข้าม ถ้าเป็นการ Multiplexing คนๆ นั้นก็จะรวบรวมจดหมายจากสมาชิกในบ้านและทำหน้าที่ส่งออกไป Demultiplexing ตามรูปที่ 1  






รูปที่ 1
หมายเลข Port จะอยู่ใน 32 bit แรกของ TCP และ UDP header โดยที่ 16 bit แรกเป็นหมายเลข Port ของเครื่องต้นทาง ขณะที่ 16 bit ต่อมาเป็นหมายเลข Port ของ เครื่องปลายทาง ดังแสดงในรูปที่สอง







                 รูปที่ 2
TCP หรือ UDP จะดูที่ข้อมูลหมายเลข Port ใน header เพื่อพิจารณาว่า Application ใดที่ต้องการข้อมูลนั้นๆ หมายเลข Port ทั้งต้นทางและปลายทางจำเป็นต้องมีเพื่อให้ เครื่องปลายทางมีความสามารถที่จะรัน process มากกว่า 1 process ในเวลาเดียวกัน
 
ตามที่ได้กล่าวในข้างต้น "Well know Ports" เป็น Port ที่ค่อนข้างมาตรฐาน ทำให้เครื่องที่อยู่ไกลออกไป (Remote Computer) สามารถรู้ได้ว่าจะติดต่อกับทาง Port หมายเลขอะไรสำหรับ Service เฉพาะนั้นๆ อย่างไรก็ตามยังมี Port อีกประเภทที่เรียกว่า Dynamically Allocated Port ซึ่ง Port ประเภทนี้ไม่ได้ถูก assign ไว้แต่เดิม แต่จะถูก assign เมื่อจำเป็น Port ประเภทนี้ให้ความสะดวกและความคล่องตัวสำหรับระบบที่มีผู้ใช้หลายๆคนพร้อมๆคน ระบบจะต้องให้ความมั่นใจว่าจะไม่ assign หมายเลข Port ซ้ำกัน

ยกตัวอย่าง สมมติว่ามีผู้ใช้ต้องการใช้ Service Telnet ทางเครื่องต้นทางจะทำการ assign ให้ หมายเลข Dynamic Port (เช่น 3044) โดยที่หมายเลข Port ปลายทางคือ 23 เครื่องจะ assign หมายเลข Port ปลายทางเป็น 23 เพราะว่า เป็น Well Known Port สำหรับ Service Telnet จากนั้นเครื่องปลายทางจะทำการตอบรับกลับโดยใช้ Port หมายเลข 23 เป็นหมายเลขต้นทาง และ หมายเลข Port 3044 เป็นหมายเลข ปลายทาง


กลุ่มของหมายเลข Port และ หมายเลข IP เราเรียกว่า Socket ซึ่งจะเป็นตัวบ่งชี้ที่เฉพาะเจาะจงสำหรับ Network process หนึ่งเดียวที่มีอยู่ในทั้งระบบ Internet คู่ของ Socket ที่ประกอบด้วย Socket หนึ่งตัว สำหรับต้นทาง และอีกตัว สำหรับปลายทาง สามารถใช้บรรยายถึงคุณลักษณะของ Connection oriented protocols เช่น 






                  รูปที่ 3
ถ้าผู้ใช้คนที่ 2 ต้องการใช้ Service Telnet จากเครื่องปลายทางเครื่องเดียวกัน ผู้ใช้นั้นก็จะได้รับการ assign หมายเลข Port ต้นทางที่แตกต่างกันออกไป โดยมีหมายเลข Port ปลายทางเหมือนกันกับผู้ใช้คนแรกดังรูปที่ 4 จะเห็นได้ว่าการจับคู่ของหมายเลข Port และหมายเลข IP ทั้งต้นทางและปลายทางสามารถทำให้แยกความแตกต่างของ Internet connection ระหว่างเครื่องต้นทางและเครื่องปลายทางได้


Active และ Passive Ports
สิ่งสุดท้ายที่จะต้องกล่าวถึงเกี่ยวกับ Port ก็คือ ความแตกต่างระหว่าง Active และ Passive Port
ในการใช้การติดต่อด้วย TCP สามารถกระทำได้ 2 วิธีคือ Passive และ Active Connection Passive connection คือ การติดต่อที่ Application process สั่งให้ TCP รอหมายเลข Port สำหรับการร้องขอการติดต่อจาก Source Host เมื่อ TCP ได้รับการร้องขอแล้วจึงทำการเลือกหมายเลข Port ให้ แต่ถ้าเป็นแบบ Active TCP ก็จะให้ Application process เป็นฝ่ายเลือกหมายเลข Port ให้เลย












 

ไม่มีความคิดเห็น:

แสดงความคิดเห็น