Internet

ในขณะที่ IPv6 กำลังเข้ามาเราน่าจะเรียนรู้เรื่องเล็กๆ น้อยๆ ของ IPv6 กันเสียหน่อย ไม่อย่างนั้นอาจจะมีคนทำเสื้อมาล้อเลียนเราได้ว่า "I hacked ::1"

เริ่มต้นด้วยการเขียนแอดเดรส IPv6 แบบเต็มๆ นั้นเราแบ่งเลข IPv6 ซึ่งมี 128 บิตออกเป็น 8 ชุด ชุดละ 16 บิต แล้วเขียนแต่ละชุดในรูปของเลขฐาน 16 คั่นแต่ละชุดจากกันด้วยเครื่องหมายโคลอน เช่น

0010000000000001 0000110110111000 0000000000000010 0000000000000011 0000000000000100 0000000000000101 0000000000000110 0000000000000111

เราจะเขียนได้เป็น
2001:db8:2:3:4:5:6:7

แต่ถ้าเลขฐาน 16 ที่มีค่าเป็น 0 อยู่ติดกันหลายชุดเราจะสามารถเขียนย่อด้วยโคลอนคู่ติดกันได้ เช่น

0010000000000001 0000110110111000 0000000000000010 0000000000000000 0000000000000000 0000000000000000 0000000000000110 0000000000000111

จะเขียนเป็น
2001:db8:2::6:7

เนื่องจากการเขียนนั้นทำได้หลายรูปแบบทำให้สับสนยุ่งยาก จึงได้มี RFC5952: A Recommendation for IPv6 Address Text Representation ที่เป็นการแนะนำการเขียนแอดเดรสของ IPv6 เอาไว้ดังนี้ (RFC ที่ยกมาแต่ละตัวตอนนี้มีสถานะต่างๆ กัน ไม่มีตัวไหนเป็น "มาตรฐาน" นะครับ ยังเปลี่ยนไปเปลี่ยนมาตลอด มองว่าเป็นคำแนะนำสำหรับเวลานี้ก็แล้วกัน)

  • ตัดเลข 0 ที่นำหน้าเลขฐาน 16 แต่ละชุดทิ้งทั้งหมด เช่น เราจะไม่เขียน "0db8" แต่จะต้องเขียน "db8" และเราจะไม่เขียน "0000" แต่จะต้องเขียน "0"
  • การใช้ "::"
    • ใช้ "::" ได้เพียงตำแหน่งเดียวเท่านั้น
    • ต้องเลือกตำแหน่งที่ทำให้ย่อได้มากที่สุด (นั่นหมายถึงเลือกตำแหน่งที่เลขฐาน 16 แต่ละชุดเป็น 0 ติดกันมากที่สุดเท่าที่จะทำได้) ถ้ามีหลายตำแหน่งที่สามารถย่อได้ยาวเท่ากัน ให้เลือกตำแหน่งทางซ้ายเสมอ เช่น 2001:db8:0:0:1:0:0:1 จะต้องย่อเป็น 2001:db8::1:0:0:1 เท่านั้น
    • ห้ามใช้ "::" เพื่อย่อเลข 0 เพียงตัวเดียว เช่นห้ามเขียน 2001:db8::1:1:1:1:1 เพราะ :: นั้นแทน :0: ซึ่งเป็น 0 เพียงตัวเดียว
  • ในส่วนเลขฐาน 16 ตัวอักษร 'a' 'b' 'c' 'd' 'e' 'f' ต้องใช้ตัวเล็ก (lowercase) เท่านั้น

ที่ผ่านมานั้นเป็นการเขียนแอดเดรส IPv6 ธรรมดา ในกรณีของแอดเดรส IPv6 พิเศษเช่น

  • IPv4-Mapped IPv6 address เลข IPv4 ที่เขียนในรูป IPv6 ซึ่งหลายคนคงเคยเห็นกันแล้วเวลาสั่ง netstat -n -a ในเครื่อง Linux ที่เปิด IPv6 ไว้แล้ว
  • ISATAP การทำท่อระหว่างเครื่องที่เป็น dual-stack ด้วยกันวิ่งผ่านบนเครือข่าย IPv4 แบบอัตโนมัติ
  • IPv4-translatable address ใช้ในการแปลง IPv6/IPv4 เพื่อทำท่อเชื่อม

ไอพีเหล่านี้มีความพิเศษตรงที่ได้ฝังเอาหมายเลข IPv4 เอาไว้ในส่วนนัยสำคัญต่ำ (ขวามือสุด) ของ IPv6 ซึ่งสามารถที่จะเขียนในรูปแบบพิเศษที่ผสมกันระหว่างเลขฐาน 16 ที่คั่นด้วยโคลอนกับเลขฐานสิบที่คั่นด้วยจุด โดยมีข้อกำหนดว่าแนะนำให้เขียนในรูปแบบพิเศษนี้เมื่อสามารถแบ่งแยกชี้ชัดได้ว่าไอพีนี้มี IPv4 แอดเดรสฝังอยู่โดยดูจาก "พรีฟิก (prefix: ส่วนต้นทางซ้ายมือของแอดเดรส)" ที่รู้กันดีเท่านั้น เช่นพรีฟิกที่กำหนดใน RFC4291 และ RFC2765 แต่ถ้ามีวิธีการอื่นที่ทำให้รู้ได้ว่าพรีฟิกนั้นมี IPv4 ฝังอยู่ก็อาจจะเขียนแบบผสมด้วยก็ได้

ตัวอย่าง IPv6 ที่เขียนในรูปแบบนี้เช่น ::ffff:10.0.0.1 (เป็น IPv4-Mapped IPv6 address)

ส่วนในการเขียน IPv6 ร่วมกับหมายเลขพอร์ทนั้นสามารถทำได้หลายวิธีเช่นเดียวกับ IPv4 เช่น

  • [2001:db8::1]:80 ควรใช้ อย่างที่เขียนใน RFC3986
  • 2001:db8::1:80 _ไม่แนะนำ_เพราะมีความกำกวม
  • 2001:db8::1.80
  • 2001:db8::1 port 80
  • 2001:db8::1p80
  • 2001:db8::1#80

ตอนนี้เราพอจะรู้แล้วว่ารูปแบบการเขียน IPv6 นั้นเป็นอย่างไร แล้วมี "แอดเดรส/พรีฟิก" อะไรที่เราควรรู้ไว้บ้าง?

  • 2000::/3 Global Unicast ก็คือ IPv6 ที่มองเห็นทั้งโลก
    • 2001::/32 เอาไว้ใช้กับอุโมงแบบ Teredo
    • 2001:db8::/32 เอาไว้ใช้ในการทำเอกสาร เช่นใช้ในการยกตัวอย่าง (RFC3849)
    • 2002::/16 ใช้กับอุโมงแบบ 6to4
  • 3ffe:831f::/32 อุโมงแบบ Teredo เก่าเช่นที่ Windows เคยใช้ (ยังมีหลงเหลือให้เห็นอยู่)
  • fe80::/10 Link Local Unicast ไว้สำหรับติดต่อกันภายใน link เดียวกัน (เทียบแล้วจะใกล้เคียงกับภายใน subnet เดียวกัน)
  • ff00::/8 Multicast ส่งไปที่ผู้รับหลายๆ เครื่อง
    • ff02::1 All Node Address ทุกเครื่องใน subnet
    • ff02::2 All Routers Address ทุก router ใน subnet
  • ::/128 (ศูนย์หมด) Unspecified แทนไอพีที่ยังไม่ระบุ ตัวอย่างคือถ้าสั่ง netstat -a ดูพอร์ทที่เปิดรับ IPv6 จากเครื่องไหนก็ได้เอาไว้จะเจอไอพีนี้

และอันสุดท้าย

  • ::1/128 Loopback

รู้แบบนี้แล้วก็อย่าไปบอกใครเขาล่ะว่าได้ "hacked ::1" มา

ที่มา

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

อารมณ์เดียวกับเรื่องเล่าบน e-mail ที่เขาท้าให้แฮกแล้วบอก ip ให้เขาเป็น 127.0.0.1 สินะ..

ปล.จนถึงทุกวันนี้ก็ยังจำหมายเลขหน้าของ Unicast,Multicast,Anycast อะไรยังไม่ได้
จำได้แต่ ::1 เนี่ยหล่ะ.. = ="
(ไม่ได้ใช้งานมันก็ไม่จำซักที..)

บทความดีมากครับ น่าจะตอบคำถามในใจตอนนี้ของคนอ่านได้เยอะทีเดียว
สาธุ...ขอให้ RFC5952 มันผ่าน ได้เป็นมาตรฐานทีเถอะ
เพราะปวดกบาลกับไอ 0 หลายๆชุดติดกันเหลือเกิน

จำนวน bit ของ Subnet Mask ครับ

ยกตัวอย่าง ipv4

x.x.x.x = 32 bit
(ช่องละ 8 bit = 256 host)

ดังนั้น /8 จะเท่ากับ subnet mask = 255.0.0.0
(0 กับ 256 จะไม่นับเพราะเป็น zubnet zero)

/16 = 255.255.0.0
และ /32 = 255.255.255.255 นั่นเอง

ปล.ส่วน ipv6 มี 128 bit ครับผม

Perl Wed, 09/02/2011 - 14:34

In reply to by dmitry

อ่อ ขออภัยครับพอดีเขียนผิด

subnet zero เป็น 0-255 ซึ่งเราไม่ได้ใช่ครับผม
แต่จำนวน host รวมทั้งหมด ยังคงเป็น 256 ครับ รวม 0 ด้วย ^^

eol Wed, 09/02/2011 - 01:56

netstat -an ใน win7 มันขึ้นแบบนี้

UDP [fe80::595e:10f3:5614:3299%12]:1900 ดอกจัน:ดอกจัน

UDP [fe80::595e:10f3:5614:3299%12]:59583 ดอกจัน:ดอกจัน

%12 นี่คืออะไรอะครับ ?

"I Hack 127.0.0.1" ลองหาใน google ดูครับ ::1 ใน IPv6 เหมื่อนกับ 127.0.0.1 ใน IPv4 ครับ คือ Loopback IP หรือ IP ของเครื่องตัวเองนั้นล่ะครับความหมายก็ลองตีความดูครับอธิบายไม่ถูกเหมือนกัน

อันนี้ฝากเจ้าของกระทู้หน่อยครับ "fe80::/10 Link Local Unicast ไว้สำหรับติดต่อกันภายใน link เดียวกัน (เทียบแล้วจะใกล้เคียงกับภายใน subnet เดียวกันใน)" คำว่า "ใน" คำสุดท้ายเกินมารึเปล่าครับ

จำข่าวไอซีทีโดนแฮคได้ไหมครับ "ICT ระบุ รู้หมายเลข IP คนแฮกเวปไซต์แล้ว ประสานงานให้ ISP นำข้อมูลผู้ใช้ IP หมายเลข 127.0.0.1 มาเพื่อเป็นข้อมูลประกาศจับต่อไป"

Pinery Wed, 09/02/2011 - 09:48

IPv6 แจกได้ถึง..

340,282,366,920,938,463,463,374,607,431,768,211,456 หมายเลข (หามาจาก Internet)

โอ้ววว

Search หา Google ว่าจะอยู่บน IPv6 ได้อีกกี่ปีนี่ยังไม่เจอเลยครับ คง predict ยาก

(ส่วนตัว) คงต้องเป็นยุคที่เราครอบครองระบบสุริยะจักรวาลนี้ได้แน่ๆเลย อิอิ

โอ้ว ตำรา Network ตอนเรียนมหาลัยต้องอัพเดตใหม่หมดเลยสินี่ ยากเหมือนกันแฮะ

wichate Wed, 09/02/2011 - 11:11

จดๆๆ ขอบคุณสำหรับความรู้ครับ

คนที่จบมาแล้ว สมัยตอนเรียนไม่มีอย่างนี้แน่นอน

ปล. it ต้องเรียนกันตลอดชีวิต เทคโนโลยีมันเปลี่ยนแปลงกันตลอด

แค่อ่านคร่าว ๆ ก็มึนแล้วครับ
ขอผ่านไปก่อน รอไว้ได้ใช้จริงจัง ค่อยมานั่งทำความเข้าใจอีกที

สงสัยอยู่ว่า การย่อ 0 ยาวๆ เป็น :: มันจะมีประโยชน์จริงรึเปล่า
ถ้าเป็น IP global มันก็ยากที่จะได้ 0 ติดกันยาวๆ
แต่นึกออกแค่กรณีเดียวคือ ตอนทำ NAT ถึงจะมี IP เป็น 0 ติดกันเยอะๆ

ผมคิดว่า
เพราะมันชุดละ 16 บิท เขียนเปน FFFF ง่ายกว่า 65535

แต่ผมสงสัยมากกว่า ว่าทำไมมันถึงใช้ : แทน .
ใช้ .. ก็ได้ถ้าต้องย่อ
แล้วมันก็ไปตีกับเลข port ที่ IPv4 ใช้ :

มีวิธีเขียนแบบเลขฐานสิบ คือ

1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16

ตัดทีละ 8 bit 16 ตัว ได้ 128bit เหมือนเดิมครับ แต่มัน... ยาวบัดซบ และย่อไม่ได้