Tags:
Node Thumbnail

ในขณะที่ 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" มา

ที่มา

Get latest news from Blognone

Comments

By: Perl
ContributoriPhoneUbuntu
on 8 February 2011 - 23:44 #257342
Perl's picture

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

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

By: chantra1919 on 8 February 2011 - 23:56 #257349 Reply to:257342

ภาคต่อจาก 127.0.0.1 รึเปล่าครับ ฮ่าๆๆ

By: supree
Android
on 9 February 2011 - 09:50 #257457 Reply to:257349

เป็นภาคต่อของ ipv4 เป็น ipv6 555

By: thedesp
WriterAndroidWindows
on 9 February 2011 - 00:22 #257358
thedesp's picture

บทความดีมากครับ น่าจะตอบคำถามในใจตอนนี้ของคนอ่านได้เยอะทีเดียว

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

By: kittipat
ContributorAndroidUbuntu
on 9 February 2011 - 00:48 #257369

ขอถามหน่อยครับ /8 /16 /32 ... นี่มันแปลว่าอะไรครับ

By: Perl
ContributoriPhoneUbuntu
on 9 February 2011 - 01:12 #257377 Reply to:257369
Perl's picture

จำนวน 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 ครับผม

By: dmitry
iPhoneWindows
on 9 February 2011 - 08:07 #257421 Reply to:257377

ขอโทษนะครับ แต่ 256 มันไม่น่าจะได้อยู่แล้วนิครับ
8 bit : 2^8 = 256 ซึ่งเป็น 0 ถึง 255
256เกินไม่ใช่หรอครับ หรือผมเข้าใจอะไรผิด

By: icez
ContributoriPhoneAndroidRed Hat
on 9 February 2011 - 08:25 #257426 Reply to:257421

0-255 มี 256 ตัวครับ

By: Aphorist
AndroidUbuntuWindows
on 9 February 2011 - 10:01 #257463 Reply to:257426
Aphorist's picture

นั่นคือ ไม่มีการใช้ .256 นะแหล่ะ

By: Perl
ContributoriPhoneUbuntu
on 9 February 2011 - 14:34 #257562 Reply to:257421
Perl's picture

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

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

By: kswisit
ContributoriPhoneAndroidIn Love
on 9 February 2011 - 08:04 #257420 Reply to:257369

เลข CIDR ครับ อ่านเองได้ที่ https://secure.wikimedia.org/wikipedia/en/wiki/Classless_Inter-Domain_Routing


^
^
that's just my two cents.

By: kittipat
ContributorAndroidUbuntu
on 9 February 2011 - 15:23 #257575 Reply to:257369

ขอบคุณทุกคำตอบครับ ไม่เคยเห็นการเขียนแบบนี้ สรุปว่าเป็นจำนวน bit ของ subnet mask นี่เอง

By: wiennat
Writer
on 9 February 2011 - 21:25 #257656 Reply to:257575

network ไม่มีสอนเหรอครับ


onedd.net

By: kittipat
ContributorAndroidUbuntu
on 11 February 2011 - 15:40 #258366 Reply to:257656

เรื่อง subnet mask น่ะจำได้ แต่จำไม่ได้ว่ามีวิธีบอกแบบนี้ด้วย

By: eol
Android
on 9 February 2011 - 01:56 #257389
eol's picture

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

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

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

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

By: e.p.
ContributorAndroid
on 9 February 2011 - 07:40 #257419 Reply to:257389
e.p.'s picture

interface index ครับ
(link-local address ต้องระบุว่าใช้ interface ไหน)

By: platalay
iPhoneWindows PhoneAndroidWindows
on 9 February 2011 - 02:56 #257401

ไม่ได้เรียนและทำงานด้านนี้โดยตรง อ่านแล้วมึน เหอๆๆ

ยังไงๆก็คงต้องเรียนรู้เบื้องต้นไว้มั่ง

By: KillerNay
iPhoneAndroidBlackberry
on 9 February 2011 - 04:53 #257412
KillerNay's picture

คิดถึงตอนเวลา config ip ใส่ server ทีละ 200 ip ปวดตับน่าดู

By: FieryTemper
ContributorAndroidSUSEWindows
on 9 February 2011 - 06:24 #257414
FieryTemper's picture

ขอบคุณสำหรับบทความครับ มีประโยชน์มากๆ

By: superballsj2
iPhoneWindowsIn Love
on 9 February 2011 - 08:32 #257429
superballsj2's picture

ไม่เข้าใจที่ว่า

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

หมายความว่ายังไงหรอครับ งง -*-

By: noppakun_dkb
iPhoneWindows
on 9 February 2011 - 09:00 #257436 Reply to:257429

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

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

By: e.p.
ContributorAndroid
on 9 February 2011 - 09:26 #257443 Reply to:257436
e.p.'s picture

เกินครับ ขอบคุณครับ

By: PiKO
ContributorAndroid
on 9 February 2011 - 17:57 #257608 Reply to:257436

แนะนำว่าให้ไปหาอ่านนะครับ เพราะมัน ฮามากกกกกกก
(เคยอ่านเวอร์ชั่นภาษาไทยด้วย ลองหาดูไม่น่ายาก ^^)


:: DigiKin8 ::

By: superballsj2
iPhoneWindowsIn Love
on 10 February 2011 - 08:40 #257754 Reply to:257608
superballsj2's picture

ไปหาอ่านมาแล้ว ฮามาก 5555

By: figgaro
ContributorAndroidWindows
on 9 February 2011 - 09:05 #257437 Reply to:257429
figgaro's picture

มันคือเครื่องของคุณเองไงครับ จาไปแฮคเครื่องตัวเองทำไย ^ ^


Texion Business Solutions

By: joomla
iPhoneUbuntu
on 9 February 2011 - 11:14 #257510 Reply to:257437
joomla's picture

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

By: icez
ContributoriPhoneAndroidRed Hat
on 9 February 2011 - 12:39 #257536 Reply to:257510

อันนี้เค้า(คนแถวนี้แหละ)แซวกันเล่นนะครับ ข่าวจริงๆ ไม่ใช่อย่างนี้

By: lancaster
Contributor
on 10 February 2011 - 02:00 #257730 Reply to:257536

+1

By: joomla
iPhoneUbuntu
on 10 February 2011 - 11:53 #257840 Reply to:257536
joomla's picture

ผมก็นึกว่าจริงซะอีก แต่ที่ผมอ่านมาไม่ใช่แถวนี้นะ รู้สึกจะพันทิพมั๊ง

By: Pinery
ContributoriPhoneAndroidIn Love
on 9 February 2011 - 09:48 #257456

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

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

โอ้ววว

By: thedesp
WriterAndroidWindows
on 9 February 2011 - 12:59 #257542 Reply to:257456
thedesp's picture

เอาง่ายๆว่า ในทุกๆพื้นที่ 1 ตารางเมตรของโลก มีอุปกรณ์ที่ต้องใช้ IP ได้ 2000 ชิ้น

By: Pinery
ContributoriPhoneAndroidIn Love
on 9 February 2011 - 13:42 #257553 Reply to:257542

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

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

By: khajochi
WriteriPhoneIn Love
on 9 February 2011 - 10:01 #257462
khajochi's picture

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


แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com

By: joomla
iPhoneUbuntu
on 9 February 2011 - 11:09 #257506
joomla's picture

ขอบคุณสำหรับข่าวนี้ แม้จะยังไม่เข้าใจลึกซึ้งแต่จะเก็บเอาไว้ศึกษาอีกทีหนึ่ง

By: wichate
Android
on 9 February 2011 - 11:11 #257508

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

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

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

By: Noppon
iPhoneWindows
on 9 February 2011 - 11:37 #257519

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

By: sanjarx
iPhone
on 9 February 2011 - 12:14 #257528

อ่านไปซักพักเริ่มงงเพราะพื้นฐานไม่ค่อยแน่น จนกระทั่งบรรทัดท้ายๆถึงเข้าใจหัวข้อเรื่อง -0-

By: HMage
AndroidWindows
on 9 February 2011 - 17:20 #257604

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

By: kowito
Android
on 9 February 2011 - 20:05 #257621

สงสัยมากๆ ไม่เข้าใจว่าทำไม ipv6 ต้องเขียนเป็นเลขฐาน 16 ทำไมไม่เขียนเป็นเลขฐาน 10 เหมือน ipv4

By: Thaina
Windows
on 9 February 2011 - 20:50 #257637 Reply to:257621

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

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

By: HMage
AndroidWindows
on 10 February 2011 - 01:41 #257726 Reply to:257637

กลัวว่าบางครั้งย่อแล้วอาจจะเหลือแค่เลข 0-9 4 ชุด มันจะไปคล้ายกับ IPv4 มั้งครับ

By: icez
ContributoriPhoneAndroidRed Hat
on 10 February 2011 - 08:43 #257756 Reply to:257621

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

1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16

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

By: vecente
iPhoneAndroid
on 10 February 2011 - 12:16 #257853 Reply to:257756

น่าจะเป็น 0-15 รึป่าวครับ
แล้วก็ย่อตัวเลข 0 ที่ติดกันได้เหมือนกัน แต่ก็คงจะยาวกว่าใช้เลขฐาน 16 อยู่ดี

By: icez
ContributoriPhoneAndroidRed Hat
on 10 February 2011 - 13:28 #257884 Reply to:257853

ที่ผมแทนเป็นตัวเลขเป็นเลขหลักครับ
จะให้เขียนแบบ

x.x.x.x.x.x.x.x.x.x.x. เกรง(ตัวเอง)จะงงว่ากดไปกี่ชุดแล้ว

By: tomyum
ContributorAndroidWindows
on 12 February 2011 - 00:39 #258600
tomyum's picture

ได้แต่หวังว่าคงจะไม่ต้องเกิดเหตุจำเป็นต้องมากรอก URL ด้วย IPv6 ...นรกนะก๊าบ

By: AdmOd
iPhoneWindows
on 12 February 2011 - 08:22 #258670

อ่านกี่ครั้งก็เห็นเป็น "ฉันเฉาะ" (-____-