อธิบายหลักการทำงานของ NAT: Network Address Translation
- ไม่มีสินค้าในตะกร้าของคุณแล้ว
- จัดส่ง
- รวมทั้งสิ้น ฿0.00
อธิบายหลักการทำงานของ NAT
อธิบายหลักการทำงานของ NAT
เรื่อง NAT นี้ ตอนผมสอบ CCNA เลยต้องพยายามทำความเข้าใจอย่างละเอียดหน่อย สอบเสร็จ พอเลย. ทีนี้จะมาเขียนบทความเลยต้องขุดขึ้นมาซักหน่อย ผมจะพยายามยกตัวอย่างให้อ่านเข้าใจง่ายๆ ผิดพลาดตรงไหน รบกวนช่วยแจ้งให้ผมทราบด้วยนะครับ
NAT คืออะไร
มันย่อมาจาก Network Address Traslation ครับ จบ..
ยังๆๆ
ถ้าท่านใดอายุอานามค่อนข้างมาก แบบแก่อ่ะ เหมือนแอดมิน 555 เอาแบบยังไม่มีอุปกรณ์ที่เรียกว่า Router เพราะเวลานั้นการจะซื้อมาใช้คือพี่ต้องรวยพอสมควร
เวลาเราจะใช้ Internet ต้องมีตัว Modem ต่อเข้ากับตัว PC ทำการสร้าง Dial-Up ขึ้นมา พอ Connect ได้ เครื่องเราก็เข้า Internet ได้
ลักษณะแบบนี้ เครื่องเราออก Internet แบบ 1:1 จะมีเรา (Client 1 เครื่อง) กับ ISP โดยจะมี IP-Address ที่ Client เราเป็น Public-IP อาจจะเล่น mirc, pirch32 หรือเข้า Website เชื่อมต่อกับ IP ต่างๆ (Web Server ก็ต้องมี IP-Address ครับ แต่จะมี DNS คอยทำการ Map ว่าชื่อ Website นี้คือ IP-Address อะไร เพราะถ้ามาจำ Web เป็น IP-Address ใครจะไปจำได้)
** การสื่อสารแบบ TCP/IP จะต้องมี IP-Address เปรียบเหมือนเลขที่บ้าน ที่มีการจดทะเบียนกับกรมการปกครอง ไม่มีเลขที่บ้าน เหมือนส่งพัสดุไม่มีปลายทาง เลข IP-Address ก็เช่นกัน ไม่ได้จดมั่วๆ ต้องมีการจัดสรรจาก IANA โดยเลขจะไม่ซ้ำกันทั้งโลก **
เมื่อเราขูดคูปอง KSC Internet (Internet Service Provider: ISP) สร้าง Dial-Up Connection ใส่ User/Password แล้วทำการ Dial-Up ทาง ISP จะจัดสรร Public-IP มาให้ชุดนึง สมมุติเป็น 20.20.20.20
เข้า Web-Server sysnetcenter.com (สมมุติ IP: 30.30.30.30)
Packet ที่จะส่งจาก Client เราไปหา Server ก็จะมี Packet ประมาณนี้
Source-IP: 20.20.20.20, Destination-IP: 30.30.30.30 และ Data
Web-Server ได้รับข้อมูล ก็จะรู้ว่าใครมาขอ จะได้ส่งกลับไปได้ถูก ตอนจะส่ง ก็กลับข้างจาก Source --> Destination และ Destination --> Source เพื่อให้ฝั่ง Client รู้ว่าใครเป็นคนส่งมา
Source-IP: 30.30.30.30, Destination-IP: 20.20.20.20 และ Data
แค่นี้ละครับ การสื่อสารแบบ 1:1
พอเวลาผ่านไป มีระบบ Internet ADSL เราสมัครรายเดือน ก็จะได้อุปกรณ์ที่เรียกว่า Router นี้มา เพราะราคามันไม่แพงแล้ว
อุปกรณ์ Router เราสามารถนำ Client มาต่อหลัง Router ได้หลายๆเครื่อง เป็นสิบเป็นร้อยเป็นพันเครื่อง แต่ IP-Address ที่เราได้มาจาก ISP จะมีชุดเดียว (มันก็หลายชุดได้แหล่ะ) สมมุติเป็น 20.20.20.20 และ Client ก็จะต้องมี IP-Address เป็นของตัวเองเช่นกัน เพื่อที่จะสื่อสารบน Protocol TCP/IP ได้
IP-Address ที่เราจัดสรรให้เครื่อง Client ที่ต่อหลัง Router นี้จะเรียกว่า Private-IP การกำหนดหมายเลข Private-IP นี้ ทำได้ตามใจชอบเลย แต่.. มันจะมีกติกาในการตั้งหมายเลขไว้อยู่ แนะนำให้ทำตามกติกาครับ ถ้าไม่อยากมีปัญหากับระบบภายหลัง เขาจะมีแนะนำว่า IP ที่จะกำหนดเป็น Private-IP มีชุดอะไรบ้าง
Private-IP นี้เปรียบเหมือนเลขที่ห้องในหอพัก ห้อง 101 666 707 แล้วแต่จะตั้ง แต่จะไปติดต่อกับ Public-IP ตรงๆไม่ได้ เพราะ Private-IP เราสามารถกำหนดได้เองที่ตัว Router และ Cleint
ตัว Router กับ Client ในโลกมีเป็นล้าน การตั้ง Private-IP มันก็จะซ้ำๆกันเป็นล้านเช่นกัน
สมมุติ ตั้ง IP-Address ให้กับ Client แต่ละเครื่อง
Router = 192.168.1.1
PC#1 = 192.168.1.2
PC#2 = 192.168.1.3
PC#3 = 192.168.1.4
พอเราตั้ง IP-Address หลัง Router เป็นชุด 192.168.1.xx ข้างบ้านก็ตั้ง IP แบบนี้แหล่ะ เหมือนเป๊ะๆเลย
ปัญหา
1. PC#2 ส่งขอข้อมูลไปที่ Router, ตัว Router หาเส้นทางส่งต่อไปที่ Web-Server ถ้าจะใช้ Private IP ของ PC#2 (192.168.1.3) เป็นชุดผู้ส่ง, Web-Server มันเห็นว่าข้อมูลชุดนี้ถูกขอมาจาก IP: 192.168.1.3 เวลามันตอบกลับ มันไม่รู้หรอกว่าเป็นบ้านเราหรือข้างบ้านที่เป็นคนขอ
2. เอาใหม่ ใช้ Public IP ที่ Router เป็นชุดผู้ส่ง ไปหา Web-Server, Web-Server มันรู้ละ ว่าบ้านนี้เป็นผู้ส่ง คือ 20.20.20.20 พอส่งข้อมูลมาที่ Router บ้านเรา ตัว Router มันจะรู้ได้ไงว่า Client ไหนเป็นคนขออีก จะส่งไปทุกๆ Client ที่มีก็ไม่ใช่
โอเค.. ตัว Router มันต้องทำอะไรซักอย่างก่อนที่จะส่ง Packet ออกจาก Router ไปยัง Web-Server เพื่อให้ Web-Server รู้ว่าบ้านนี้แหล่ะที่ขอข้อมูล และพอ Web-Server ตอบกลับ ส่งข้อมูลมาถึง Router ที่บ้านเรา ตัว Router มันก็ต้องรู้อีกว่า ข้อมูลที่ได้มานี้ต้องส่งไปที่ Client เครื่องไหน
ลักษณะที่ Router ทำแบบนี้ละครับ เรียกว่าการทำ NAT
จากรูป เป็นการทำ NAT ภายในของ Router ครับ
การทำ NAT เราจะใช้หมายเลข Port แบบสุ่มมาช่วยระบุว่า ใครเป็นผู้ขอ ร่วมกับ IP Address เพราะถ้าไม่ใช่หมายเลข Port มาร่วมด้วย ตอน Web-Server ส่งกลับมาหา Router แล้วตัว Router จะส่งต่อไปยัง Client มันจะไม่รู้ว่า Client ไหนเป็นผู้ขอข้อมูลจาก Web-Server นี้
เมื่อมีการใช้ [Port Number] + [Private-IP ของเครื่อง Client] + [Public-IP ของ Router] + [Public-IP ของ Web-Server] เพื่อระบุ ใครขออะไรจากที่ไหน มันต้องมีตารางเก็บ โดยจะเก็บลง RAM ของ Router เรียกว่า NAT Table
ใครเข้า Web อะไร ใช้งาน Service ไหน มี Connection อะไร เก็บหมด จะหายก็ต่อเมื่อ Timeout หรือไม่ก็ Connection ปิดแล้ว หรือ ปิด/เปิด Router
ทีนี้ RAM ของ Router มันมีจำนวนจำกัด ถ้ามี Client เยอะๆ ใช้ Service ที่กิน NAT Table มากๆไม่ว่าจะ P2P/Bittorrent เพราะต้องเชื่อมต่อหลาย Peer หรือต้องคงค้าง NAT ให้อยู่ใน NAT Table นานๆ เช่นพวก VoIP , Video Call พวก Zoom, MS-Team อะไรพวกนี้ ต้องไม่ให้ NAT หายโดยการตั้งค่า Timeout มากๆ (ไม่ได้ตั้งเองครับ ระบบมันตั้งให้)
แล้วพอ RAM มันเต็ม NAT ใหม่ๆก็จะเข้ามาไม่ได้ครับ ดีดทิ้ง เกิดอาการ LAG ขึ้น หรือเล่นแล้วค้างนั้นแหล่ะ ต้องไปปิด/เปิด Router เพื่อเคลียร์ NAT Table ใหม่
เพราะฉะนั้น ถ้ามีจำนวน Client มากๆ จึงจำเป็นที่จะต้องเลือกใช้งาน Router ที่เหมาะสม ส่วนหนึ่งที่ทำให้ราคา Router ถูกหรือแพง ก็เพราะจำนวนการเก็บ NAT Table ได้มากขึ้นด้วยครับ
ต่อๆ จากรูปด้านบน
Client --> Router --> Web-Server
Client IP: 192.168.1.3 จะเข้า website พิมพ์ URL ที่ Browser เคาะ Enter ก็จะส่งข้อมูลไปที่ Router ตัว Router ได้รับข้อมูล ก็จะรู้ว่า Client นี้ขอข้อมูลจาก Web-Server IP: 30.30.30.30 ช่วยจัดการหาเส้นทางและส่งต่อให้หน่อย
ตัว Router จะทำการสุ่ม Port แปะเข้าไปใน Packet สมมุติเป็น 51000 จะได้
Source IP: 192.168.1.3:51000 Destination IP: 30.30.30.30
Router จัดการ NAT เปลี่ยนข้อมูลใหม่ โดยเอา Public-IP ของตัวเองมาเป็น Source IP และแปะ Port 51000 ส่งไปที่ Web-Server
จะได้
Source IP: 20.20.20.20:51000 Destination IP: 30.30.30.30
Web-Server --> Router --> Client
พอ Web-Server ได้รับ ก็จะรู้แล่ะ ว่าใครส่งมา เพราะ Source เป็น Public-IP ก็ทำการประมวลผลตามที่ร้องขอข้อมูล ทำการส่งกลับไปที่ IP 20.20.20.20 Port 51000
Router ได้รับ ก็ไปค้นหาใน NAT Table (NAT lookup) ใครขอข้อมูล Web-Server นี้โดยใช้ IP+Port+Protocol เป็น Unique key เพราะฉะนั้นยิ่ง CPU เร็วๆ เวลาเราเข้า Internet ก็จะเร็วไปด้วยครับ
พอรู้ละว่า Client เป็นใคร ก็จะทำการ NAT เปลี่ยน Destination IP เป็น IP ของเครื่อง Client ที่ขอข้อมูล Web-Server และแปะหมายเลข Port ไปด้วย
จะได้
Source IP: 30.30.30.30 Destination IP: 192.168.1.3:51000
อาจจะส่งต่อผ่าน Network Switch หรืออะไรก็ว่ากันไป
แค่นี้ละครับ NAT จริงๆมันก็มีเยอะกว่านี้ มีประเภทของ NAT พวก Full-cone, Restricted-cone อะไรนี้แหล่ะ หรือ Public-IP เดี๋ยวนี้ทาง ISP ก็ไม่ค่อยจะให้ละ เรียกว่า CGNAT (Carrier-Grade NAT) แต่ Router ที่บ้านเราก็ต้องทำ NAT อยู่ดี เพียงแต่ว่ามันมีการ NAT กันมาเรื่อยๆครับ เลยจะมีปัญหาเรื่อง Forward Port อะไรพวกนี้
Facebook comment