ข้ามไปที่เนื้อหาหลัก

MTU คืออะไร

MTU คืออะไร
           เมื่อไม่กี่วันก่อนผมได้มีโอกาสไปตั้งค่า Router ให้กับลูกค้ารายหนึ่ง โดยลูกค้ารายนี้ได้ทำการเชื่อมต่อ HQ เข้ากับ Dataenter ด้วย Private Link ของ IS​P จากนั้น และทำให้ HQ ออก Internet ผ่าน Private Link นี้ จาก Design ดูเหมือนจะไม่มีอะไร แต่พอตื่นเช้าขึ้นมากลับพบปัญหาว่า การเข้าใช้งาน Internet ของ Users ไม่สามารถเข้าใช้งาน HTTP บาง Web site ได้ ซึ่งปัญหาทั้งหมดทั้งมวลเกิดจากการตั้งค่า MTU ของ Router ฉะนั้นในบทความนี้ผมจึงอยากค้นหาความรู้เกี่ยวกับความสัมพันธ์ระหว่าง MTU เพื่อประกอบความเข้าใจและเก็บไว้ในส่วนลึกของหัวใจให้ยาวนานครับ

    ว่าด้วยเรื่อง MTU คืออะไร   ( Maximum Transmission Unit )
 - ก่อนอื่นต้องทำความเข้าใจก่อนนะครับว่าเรากำลังพูดถึงการส่งข้อมูลผ่านเครือข่าย Internet ขนาดใหญ่ โดยเมื่อเรากำลังจะส่งข้อมูลจาก Application Layer ลงไปจะต้องมีการห่อหุ้มข้อมูล (Encapsulated) ก่อนที่จะส่งไปยัง Layer ที่อยู่ล่างๆถัดไป หากสมมติว่า Application ที่เราใช้งานมีขนาดข้อมูลเล็กๆที่ 500Bytes ไปยังปลายทาง ก็จะทำการส่งไปในแพ็คเก็ตเดียวได้โดยไม่ติดปัญหาอะไร แต่หากว่า Application เรามีการส่งข้อมูลที่มีขนาดใหญ่มากๆ ก็จำเป็นต้องทำการหั่นข้อมูลออกเป็นชิ้นย่อยๆหลายๆแพ็คเก็ต เพื่อทยอยส่งไปตามเส้นทางนั่นเอง โดยค่าของ MTU จะเป็นค่าสูงสุดสำหรับส่งแพ็คเก็ตออกไปได้ โดยปกติแล้ว MTU จะมีค่าอยู่ที่ 1500 Bytes ( แต่อย่างไรก็ตามค่านี้สามารถเปลี่ยนแปลงได้โดยขึ้นอยู่กับเครือข่ายที่เราเชื่อมต่อด้วย )

    ก่อนที่จะลงรายละเอียดของ MTU เราควรเข้าใจกระบวนการห่อหุ้มข้อมูลบน Ethernet Frame และ Packet ของ TCP/IP Protocol ก่อน โดยจากรูปภาพข้างล่างแสดงถึงการส่งข้อมูล TCP/IP Packet ขนาด 1500Bytes ไปยังเครือข่าง Ethernet โดยจะสังเกตได้ว่า ใน Layer 2 จะมีขนาด Frame เพิ่มขึ้นเป็น 1518Bytes

     โดย MSS  (Maximum segment size) คือค่า parameter ระบุขนาดข้อมูลสูงสุดที่ server ทั้งสองฝ่ายรับรู้ เพื่อป้องกันไม่ให้ packet มีขนาดมากเกินว่าค่า MTU ใน Layer 2 ซึ่งถ้าเกินจะทำให้ packet โดน drop หายไปกลางทาง traceroute ก็ไม่เห็นว่า loss (เพราะตอน traceroute ไม่ได้ใช้ packet ขนาดเท่ากับที่ loss)  ขนาดสูงสุดของ IP Packet จะอยู่ที่ 65535 Bytes  

งั้นมาดูถึงปัญหากัน ลองนึกภาพการส่งข้อมูลไปยังปลายทาง หากต้นทางมีการกำหนด MTU เท่ากับ 1500Bytes แต่ระหว่างทางมีขนาด MTU น้อยกว่า 1500Bytes จะเกิดอะไรขึ้น ?

Server <-----MTU9000-----> Router <-----MTU1500-----> Client

คำตอบ :
Packet ที่ถูกส่งไปจะถูกดรอปโดยอัตโนมัติ เนื่องจาก MTU ต้นทางมีขนาดที่เกินกว่าจะสามารถส่งไประหว่างทางได้ และ Router จะทำการ Set DF bit หรือ Don't flagment เป็น 0 เพื่อให้สามารถแบ่ง Packet ได้  จากนั้นจะทำการ Retransmit TCP ลงเหลือครึ่งนึงจนกว่าจะต่ำกว่าค่า MTU ของต้นทาง  แต่เนื่องจากว่า Application บางตัวมีการ Set DF bit = 1 จึงทำให้ Router ไม่สามารถที่จะแบ่ง Segment และเปลี่ยนแปลงค่าของ MTU ได้จึงทำให้ไม่สามารถส่งข้อมูลต่อไปได้นั่นเอง โดยเมื่อ Router ทราบว่า DF bit = 1 จะไม่สามารถส่งข้อมูลไปต่อได้และก็จะส่ง ICMP Type 3 Code 4 ไปให้กับต้นทาง

โดยปกติแล้วจะเจอปัญหานี้กับการใช้งาน IPSec VPN , PPPoE , GRE ซึ่งหากเรามีการตั้งค่า MTU ที่ไม่เหมาะสมอาจทำให้ไม่สามารถส่งข้อมูลต่อไปได้ ยกตัวอย่างเช่น การใช้งาน GRE จะมีการเพิ่ม IP Header เข้าไปทำให้ค่าของ MTU ที่เคยใช้อาจจะไม่พอ จึงจำเป็นต้องมีการปรับค่า MTU ของ IP Packet ให้น้อยลง

Reference : 

ขอขอบคุณบทความดีๆๆจาก :
คุณ  IceSuntisukt;Store my Knowledge
https://icesuntisuk.blogspot.com/2016/07/mtu.html



ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

วิธีใช้ Google Form ส่งข้อความเข้า LINE Notify

วิธีใช้ Google Form ส่งข้อความเข้า LINE Notify           ขั้นตอนต่อไปนี้จะข้ามส่วนของรายละเอียดบางอย่างไป ซึ่งก่อนจะทำตรงนี้ควรจะรู้แล้วว่า LINE Notify ใช้ทำอะไร และ Access Token จะเอามาจากไหน แต่จะพยายามอธิบายให้ครอบคลุมที่สุดก็แล้วกัน Update: 2019/06/10 ในท้ายบทความได้เพิ่มคำอธิบายเรื่องการส่งข้อมูลหลายกล่องข้อมูล (คอลั่ม) พร้อมกับ code ที่วนลูปข้อมูลทุกกล่อง เพื่อความสะดวกในการส่งข้อมูลในรูปแบบเดิม สร้าง Google Form วิธีสร้างก็ง่ายแสนง่าย เข้าไปที่  https://docs.google.com/forms  จากนั้น คลิกตรงเครื่องหมาย + ตามภาพ จะได้ form หน้าตาแบบนี้มา แก้ไขตามสะดวกเลย ตัวอย่างเอาแบบนี้แล้วกัน จะลองส่งข้อความคลิกที่รูป “ตา” พิมพ์ข้อความอะไรก็ได้ แล้ว กด Submit โลด กลับไปหน้า Form ของเราใน tab แรก มันก็จะมี RESPONSES เข้ามา เมื่อคลิกดูก็จะพบข้อความที่เราเพิ่งพิมพ์ไปเมื่อตะกี้ ใส่ code ใน Script Editor คลิกที่ จุด 3 จุด ด้านขวาบน แล้วเลือก  <> Script Editor จะพบหน้าเปล่าๆ ที่ไม่คุ้นเคย ตรงนี้แหละที่เราจะมาใส่ code ใ...

Pentaho

Pentaho คืออะไร ? Pentaho (Link) เป็น software แบบ Businese Intelligence (BI) ที่นำมาช่วยในการวิเคาะห์ข้อมูลหลายๆฐานข้อมูล ออกมาในรูปแบบต่างๆ เช่น กราฟ , ตาราง หรือใบรายงานผล เป็นต้น ซึ่งจะช่วยให้ธุรกิจที่กำลังที่จะดำเนินงานหรือดำเนินงานไปแล้วสามารถมองเห็นถึงข้อมูลที่ต้องการทราบว่าไปในทิศทางไหน เพื่อให้ผู้ใช้งานหรือธุรกิจนั้นๆ สามารถวางแผนการทำการตลาดได้แม่นยำมากขึ้นและมีข้อมูลที่สามารถใช้เป็นข้ออ้างอิงได้ จากที่ได้ศึกษาผมขอแบ่งส่วนต่างๆ เป็น 3 ส่วน คือ 1.       1.  ส่วนของการทำ ETL (Extract, Transform and Load) เป็นส่วนของการเริ่มกระบวนการทั้งหมด คือการนำข้อมูลที่อยู่ในฐานข้อมูลหรือไฟล์ข้อมูลในรูปแบบต่างๆ ไม่ว่าจะเป็น MySQL, Excel, Text File ฯลฯ มาปรับให้เป็นชุดข้อมูลในรูปแบบเดียวกัน 2.      2.   ส่วนของ Data Warehouse เป็นการนำข้อมูลที่ได้จากกระบวนการ ETL มาทำชุดข้อมูลในลักษณะของ Cube ข้อมูล 3.       3.  ส่วนของ Output ซึ่งจะออกมาได้ทั้งในรูปแบบ OLAP, Reporting หรืออื่นๆ เครื่องม...

ทำความเข้าใจ LM, NTLM, NTLMv2

ทำความเข้าใจ LM, NTLM, NTLMv2  วันนี้เราจะมาทำความเข้าใจเกี่ยวกับรูปแบบการเก็บ password ของ Windows โดยแต่ก่อนจนถึงปัจจุบันก็มีพัฒนาการมาเรื่อยๆครับ ซึ่งจะเริ่มจาก LM (Lan Manager) hash โดย LM นั้นเป็นรูปแบบดั้งเดิมในการเก็บ password ของ Windows ตั้งแต่ยุค 1980 ซึ่งในช่วงนั้นยังมีจำนวน charset ที่ยังจำกัดอยู่(16-bits characters) ซึ่งทำให้การ crack password นั้นทำได้ง่ายมากโดยดึงจาก SAM database บน Windows หรือว่า NTDS บน Domain Controller (Active Directory) ได้เลย โดยขั้นตอนการเปลี่ยน password อยู่ในรูปแบบ LM hash คือ เปลี่ยนอักษรทั้งหมดเป็นตัวใหญ่ หากตัวอักษรไม่ครบ 14 ตัวอักษรก็จะเติมตัวอักษรทั้งหมดให้เต็มด้วย NULL characters แบ่งเป็น 2 กลุ่ม กลุ่มละ 7 ตัวอักษร สร้าง DES key จาก character 7 ตัวทั้ง 2 กลุ่ม ก็จะได้ DES key 2 ชุด (ชุดละ 64 bit) นำ DES key ไปเข้ารหัส static string “KGS!@#$%” ด้วย DES (ECB) นำ encrypted strings ทั้ง 2 อันมาต่อกัน ก็จะได้เป็น LM Hash เช่น สมมติ password เป็น password password => password000000 PASSWORD000000 PASSWOR...