Note ก่อนที่ท่านจะอ่านบทความนี้ ผมขอแนะนำให้ท่านลองไปอ่านบทความก่อนหน้าเกี่ยวกับเรื่องของ TCP/UDP port นะครับ ซึ่งจะกล่าวถึง source port ที่ถูก random อยู่บน Windows OS
สรุปกับคำว่า Server ก่อน:
บางท่านอาจจะสับสน (แม้แต่ผมก็เคยสับสน) กับคำว่า "Server" โดย computer ที่จะต้องมาทำหน้าที่เป็น server นั้น จะเป็น computer อะไรก็ได้ แม้แต่ notebook ก็ยังเป็น server ได้เช่นกัน เพราะความเป็น server มันไม่ได้ขึ้นอยู่กับ hardware เป็นหลัก แต่มันจะขึ้นอยู่กับ application เป็นหลักต่างหาก โดยหากเรานำ Web Application ไปติดตั้งบน notebook มันก็จะเปิด TCP port 80 รอ และสามารถทำหน้าที่เป็น Web Server ได้เช่นกัน เพียงแต่เครื่องที่จะทำหน้าที่เป็น Server จะต้องเปิดตลอด 24 ชั่วโมง และต้องรับภาระการ access เข้าใช้งานจากเครื่องลูกข่าย (Client) จำนวนมาก ดังนั้นเครื่องที่จะมาทำหน้าที่เป็น Server ได้ จะต้องเป็นเครื่องที่มี spec ที่ดีมากๆ จึงมีการผลิต computer ที่เหมาะกับการใช้งานในลักษณะเช่นนี้ เราจึงเรียกเครื่อง computer ที่มีความแข็งแรงคงทนเหล่านั้นว่า server (Computer ที่มี hardware spec ระดับ Server)
จากภาพตัวอย่างข้างล่าง ผมขอสรุปดังนี้ก่อนนะครับ
- IP address 1 เบอร์ (IP address ของ Server) สามารถมี หรือเปิด TCP/UDP port ได้หลายๆ port เพราะมันสามารถเป็น Application Server ได้มากกว่า 1 application บนเครื่องเดียวกัน เช่น เครื่อง Server IP address 173.194.126.11 สามารถที่จะ run application server ได้มากกว่า 1 application ซึ่งจากรูป server ดังกล่าวมีการ run application server 2 application คือ web application server (มันจะเปิด TCP port 80 เอาไว้ตาม standard) และ mail application server (มันจะเปิด TCP port 25 เอาไว้ตาม standard)
Note: สำหรับ TCP/UDP port กับ application ที่เป็น standard ท่านสามาถเข้าไปศึกษาเพิ่มเติมได้ตาม link นี้ครับ
- TCP/UDP port 1 port สามารถมีได้หลายๆ session
โดย session กับ TCP/UDP port จะต้องมีความสัมพันธ์กัน
คำถามให้ชวนคิด:
ท่านเคยคิดไหมว่า เวลาที่ท่านเปิด Web Browser อย่างเช่น Internet Explorer (IE), Google Chrome หรือ Firefox แล้วทำการเข้า web page สอง page ไปยัง web site ปลายทางเดียวกันอย่าง เช่น google.com สองหน้า web page ในเวลาเดียวกัน โดยหน้า page หนึ่ง search เรื่องนก แต่อีกหน้า page หนึง search เรื่องแมว แล้วทำไม information ที่เราได้รับกลับมาจึงไม่สลับหน้าจอกัน แต่สามารถกลับมายังหน้าจอที่เราทำการ search ได้อย่างถูกต้อง
คำตอบมันอยู่ที่ความสัมพันธ์ระหว่าง TCP port กับ Session ที่กำลังจะอธิบายดังนี้ครับ
Note: ผมขอละเรื่องการอธิบาย SYNC, SYNC ACK, ACK นะครับ
จากภาพแล้ว
Step 1. ที่ Client - Notebook 100.1.1.1
- ใช้ IE เพื่อ search เรื่องนก โดย client จะเป็นผู้เริ่มเปิดเกมส์การสื่อสารไปยัง Web Server 173.194.126.11 ด้วย source port Random เบอร์ 49,999 และ Destination port 80 ซึ่ง Notebook 100.1.1.1 จะถือว่า source port และ destination port คู่นี้เป็น 1 session สำหรับหน้า page IE
- ใช้ Google Chrome เพื่อ search เรื่องแมว โดย Notebook เริ่มเปิดเกมส์ไปยัง Web Server 173.194.126.11 ด้วย source port Random เบอร์ 50,000 และ Destination port 80 ซึ่ง Notebook 100.1.1.1 จะถือว่า source port และ destination port คู่นี้เป็น 1 session สำหรับหน้า page Google Chrome
Step 2. ที่ Server 173.194.126.11
- Web Server 173.194.126.11 ได้รับการ request ที่มี source port Random เบอร์ 49,999 และ Destination port 80 มาจาก Notebook 100.1.1.1 ซึ่งเกี่ยวข้องกับการ search เรื่องนก จึงทำการตอบกลับข้อมูลเกี่ยวกับเรื่องนก โดยทำการ convert กลับด้วย Source IP คือ 173.194.126.11 (IP server) และ Destination IP คือ 100.1.1.1 และ source port 80 และ destination port 49,999
- Web Server 173.194.126.11 ได้รับการ request ที่มี source port Random เบอร์ 50,000 และ Destination port 80 มาจาก Notebook 100.1.1.1 ซึ่งเกี่ยวข้องกับการ search เรื่องแมว จึงทำการตอบกลับข้อมูลเกี่ยวกับเรื่องแมว โดยทำการ convert กลับด้วย Source IP คือ 173.194.126.11 (IP server) และ Destination IP คือ 100.1.1.1 และ source port 80 และ destination port 50,000
Step 3. ที่ Client - Notebook 100.1.1.1
- เมื่อ Notebook 100.1.1.1 ได้รับการตอบกลับด้วย source port 80 และ destination port 49,999 มันจึงรู้ได้ทันที่ว่าข้อมูลนี้เป็นของ session แรกซึ่งเป็นของ page IE ดังนั้นมันจึงเอาข้อมูลเกี่ยวกับเรื่องนกไปแสดงที่ page ของ IE
- เมื่อ Notebook 100.1.1.1 ได้รับการตอบกลับด้วย source port 80 และ destination port 50,000 มันจึงรู้ได้ทันที่ว่าข้อมูลนี้เป็นของ session ที่สองซึ่งเป็นของ Google Chrome ดังนั้นมันจึงเอาข้อมูลเกี่ยวกับเรื่องแมวไปแสดงที่ page ของ Google Chrome
สรุปคือ คู่ของ Source Port และ Destination Port จะมีความสัมพันธ์กับ Session ของ Application ในการนำเสนอข้อมูลนั่นเอง
สำหรับบน Client อย่างเช่น Notebook IP address 100.1.1.1 แล้ว
- ในหลายๆ session สามารถที่จะระบุ Destination IP address ของ Server ซ้ำกันได้ เพื่อไปขอใช้บริการ application ต่างๆ ที่ server เปิดให้บริการอยู่ (เช่น Web TCP port 80 และ Mail TCP port 25)
- ในหลายๆ session สามารถที่จะระบุ Destination port เดียวกันได้
- สำหรับ Client แล้ว ในแต่ละ session ห้ามใช้ source port ที่ซ้ำกัน
เพิ่มเติม:
จากตัวอย่างของ Notebook IP address 100.1.1.1 ที่ผมใช้ IE และ Google Chrome ในการเปิดใช้งาน Web บน Server 173.194.126.11 ผ่านทาง TCP port 80 เป็นจำนวนสอง session นั้น ผมมีคำถามคือ
คำถาม:
ถ้าผมใช้ Google Chrome เพียงอย่างเดียวในการเปิดใช้งาน Web บน Server 173.194.126.11 ผ่านทาง TCP port 80 โดยการเปิดเป็น Tab สอง Tab บน Windows เดียวกัน คำถามคือ เราจะมีกี่ session บน IP 173.194.126.11 TCP port 80
คำตอบคือ จำนวน session จะไม่ได้ขึ้นอยู่กับจำนวน Application (ไม่ใช่ว่า IE คือ 1 session และ Google Chrome คือ 1 session นะครับ)
การเปิด Google Chrome เพียง Application เดียว แล้วจากนั้นทำการเปิด Tab ของ Windows ขึ้นมาสอง Tab จะหมายถึง การใช้งาน 2 session ครับ นั่นคือ Tab ที่หนึ่งจะใช้ Source Port นึง และ Tab ที่สองจะ Source Port อีก Port นึง ในขณะที่ Destination Port เป็น port 80 เหมือนกัน (เพราะใช้งาน Web Application เหมือนกัน)
มีคนถามมาว่า
"ถ้า client 2 เครือง ใช้ source port เดียว กันแล้ว web server จะให้บริการไหมครับ" ใครพอรู้ไหมเอ่ย ให้บริการได้ หรือไม่ได้ เพราะอะไร
เฉลยเลย ^^
เงื่อนไขคือ ในแต่ละ session ห้ามทั้ง 4 อย่างนี้ซ้ำกัน คือ ห้าม source IP และ source port และ destination IP และ destination port ซ้ำกัน - ใน 4 อย่างนี้ ขอเพียงแค่ 1 ใน 4 ไม่ซ้ำกัน ก็ถือว่าคนละ session แล้วครับ เช่น Session X: - Source IP address: 10.1.1.1 - Source Port: 51111 - Destination IP address: 200.1.1.1 - Destination Port: 80 Session Y: - Source IP address: 10.1.1.1- Source Port: 52222- Destination IP address: 200.1.1.1- Destination Port: 80 จากตัวอย่าง จะได้ว่า Session X จะเป็นคนละ session กับ Session Y ครับ
ดังนั้น แม้ client 2 เครื่องจะใช้ source port ซ้ำกัน แต่เพราะว่า client ทั้งสองเครื่องต่างก็ใช้ IP address คนละ IP address กัน ดังนั้นจึงไม่มีปัญหาที่ Server จากแยกแยะ source และ reply กลับครับ
แต่สำหรับใน client เครื่องเดียวกันแล้ว โดย software ที่เป็น OS (Windows, Linux, Androi และอื่นๆ) แล้ว ม้นจะ random source port โดยไม่ใช้ source port ซ้ำกันแน่นอนครับ
หวังว่าบทความนี้จะช่วยให้ท่านเข้าใจเรื่อง Session มากขึ้นนะครับ
ขอบคุณครับ
โก้-ชัยวัฒน์
ผมนี่รู้สึกชื่มชนในตัว อ. อย่างมากครับ
ขอบคุณครับ