TCP/IP
>  Home   HTML   CSS   JavaScript   PHP   Perl   Photoshop   TCP/IP 

บทที่ 2 IP : Internet Protocol (rfc 791)

ด้วยเหตุที่ IP เป็นโปรโตคอลหลักในการสื่อสารข้อมูล และถือได้ว่าเป็นหัวใจสำคัญของโปรโตคอล TCP/IP ผมจะขอยกมาอธิบายก่อน เพื่อให้ง่ายต่อการอธิบายโปรตคอลตัวอื่นๆ ต่อไป ในบทนี้ท่านจะได้เรียนรู้เกี่ยวกับหน้าที่และลักษณะของโปรโตคอล IP , Internet Address , รูปร่างของ IP Header , การ Routing และ การจัดสรร IP ด้วย Subnet

IP เป็นโปรโตคอลที่ทำหน้าที่รับภาระในการนำข้อมูลไปส่งยังผู้รับ ที่เชื่อมต่ออยู่ในระบบ network ซึ่งทั้งสองฝั่งอาจอยู่คนละเน็ตเวิร์คกันก็ได้ โปรโตคอลอื่นๆ ในระดับ network Layer ขึ้นไปทั้งTCP , UDP ,ICMP ต่างก็ต้องอาศัยโปรโตคอล IP ในการรับส่งข้อมูลทั้งสิ้น

โปรโตคอล IP มีความสามารถในการค้นหาเส้นทางจากผู้รับไปยังผู้ส่ง มีกลไกที่ชาญฉลาดในการค้นหาเส้นทาง สามารถค้นหาเส้นทางได้ไปถึงผู้รับได้เอง หากมีเส้นทางที่สามารถไปได้ แต่ไม่ได้ติดต่อระหว่างผู้รับกับผู้ส่งโดยตรง และไม่มีการยืนยันว่า ข้อมูลถึงผู้รับจริงหรือไม่ ทั้งนี้อาจเกิดจากหลายสาเหตุ เช่น ที่อยู่ของผู้รับไม่มีการเชื่อมต่ออยู่ในระบบ Internet กล่าวได้ว่า โปรโตคอล IP มีหน้าที่ในการค้นหาเส้นทางเท่านั้น ไม่มีการยืนยันผลสำเร็จในการส่งข้อมูล หากเกิดข้อผิดพลาดในการส่งข้อมูล แม้ว่าจะมีการส่ง icmp massage กลับมารายงานข้อผิดพลาด แต่ก็รับประกันไม่ได้อยู่ดีว่า icmp message จะกลับมาถึงเรียบร้อยหรือไม่ ด้วยเหตุนี้ จึงถือว่า IP เป็นโปรโตคอลที่ไม่มีความน่าเชื่อถือ (reliable)

IP Addressing

ทุกอินเตอร์เฟซที่ต่ออยู่บนอินเตอร์เน็ตจะต้องมีหมายเลขประจำตัวเพื่อใช้ในการสื่อสารข้อมูล เรียกว่า Internet Address หรือเรียกย่อๆว่า IP Address โดยค่า IP Address นี้จะเป็นหมายเลขจำนวน 32 บิต แต่แทนที่จะกำหนดให้เลขทั้ง 32 บิตนั้นถูกนับต่อเนื่องกันไป ก็จะใช้วิธีการแบ่งหมายเลขดังกล่าวออกเป็นกลุ่มของเลขขนาด 8 บิตจำนวน 4 ชุด และคั่นแต่ละชุดด้วยจุด ตัวอย่างเช่น 172.17.3.12 นอกจากนี้ใน IP Address นั้นยังถูกแบ่งออกเป็น 2 ส่วนคือ ส่วนที่ เป็นแอดเดรสของเน็ตเวิร์ก (Network ID) และส่วนที่เป็นแอดเดรสของโฮสต์ (Host ID) ซึ่งข้อมูลในส่วนนี้จะถูกใช้สำหรับ ค้นหาเส้นทางของ IP ในการที่จะขนส่งข้อมูลจากต้นทางให้ถึงปลายทางอย่างถูกต้อง เพื่อเป็นการกำหนดขนาดของเน็ตเวิร์ก สำหรับ IP Address ต่างๆดังนั้นจึงมีการจัด IP Address ในแต่ละช่วงออกเป็นคลาส (class) ต่างๆกันจาก A ถึง E เพื่อจะได้ทำการจัดสรร IP Address ได้อย่างเหมาะสมกับขนาดของเน็ตเวิร์ก


รูปที่ 2.1 การกำหนด IP Address ในคลาสต่างๆ

จากข้อกำหนดในการแบ่งคลาสของ IP Address หากลองนำบิตที่อยู่ในตอนต้นของ ip address ในแต่ละคลาสมาแปลงเป็น ip address ในเลขฐานสิบ จะเห็นว่าแต่ละคลาสครอบคลุม ip address ช่วงต่างๆ ดังตารางที่ 2.2
Class
IP Range
A 0.0.0.0 - 127.255.255.255
B 128.0.0.0 - 191.255.255.255
C 192.0.0.0 - 223.255.255.255
D 224.0.0.0 - 239.255.255.255
E 240.0.0.0 - 255.255.255.255

ตารางที่ 2.2 แสดงช่วงของ IP Adress ในแต่ละคลาส

IP Header

เมื่อข้อมูลถูกส่งลงมาจากชั้น Transport Layer สู่ชั้นNetwork Layer กระบวนการ Encapsulate ของ IP Protocol จะทำหารเพิ่มส่วน Header ลงไป Header ของ IP datagram มีขนาด 20-32 ไบต์ มีส่วนประกอบต่างๆ ดังแสดงในรูปที่ 2.3


รูปที่ 2.3 IP Header
ตำแหน่งชื่ออธิบาย
0-3Versionมีขนาด 4 บิตเป็นเวอร์ชั่นของ IP ปัจจุบันค่านี้ถูกกำหนดให้เป็น 4
4-7Lenghtมีขนาด 4 บิตเป็นค่าความยาวของ Header นี้ โดยปกติจะเป็น 5 หมายความว่า 5*32 บิต = 20 ไบต์
8-15Type of Serviceเป็นข้อมูลขนาด 8 บิต ปัจจุบันไม่ได้ใช้งานแล้ว
16-31Total lengthเป็นฟิลด์ที่บอกจำนวนไบต์ทั้งหมดของ IP Datagram ด้วยขนาด 16 บิตทำให้ Datagram มีขนาดสูงสุดไม่เกิน 65535 ไบต์ และมีขนาดเล็กสุดไม่ต่ำกว่า 512 ไบต์
32-47Identificationใช้ในกรณีที่มีการแบ่งดาต้าแกรมออกเป็นแฟรกเมนต์ เมื่อนำกลับมารวมกันใหม่จะได้รู้ว่ามาจากดาต้าแกรมเดียวกัน
48-50Flagใช้ในกรณีที่มีการแบ่งข้อมูลออกเป็นแฟรกเมนต์ มีความหมายดังนี้
บิต 0 : reservedเป็น 0 เสมอ
บิต 1 (DF)0 = May Fragment, 1 = Don't Fragment
บิต 2 (MF)0 = Last Fragment, 1 = More Fragments.
51-63fragment offsetเป็นส่วนระบุข้อมูลที่ใช้แยกรวมข้อมูล เพื่อให้ขู้มูลที่ถูกแยกออกเป็นแฟรกเมนต์กลับมารวมกันได้อย่างถูกต้องตามลำดับ
64-71Time to Live (TTL)เป็นจำนวนครั้งสูงสุดที่ดาต้าแกรมนี้จะถูกส่งผ่านครือข่ายไปยังปลายทางได้ เพื่อ ป้องกันไม่ให้ดาต้าแกรมถูกเราต์ไปเรื่อยๆอย่างไม่สิ้นสุด ปกติค่านี้จะเริ่มต้นที่ 32 และจะถูกลดค่าลงทีละ 1 เมื่อมีการเราต์ จนค่านี้มีค่าเป็น 0 ก็จะไม่ถูกเราต์อีกต่อไป
72-79Protocolเป็นข้อมูลที่ระบุโปรโตคอลที่ส่งดาต้าแกรมนี้มา ตัวอย่างโปรโตคอลที่ใช้บ่อยๆ ได้แก่
โปรโตคอลค่าในฟิลด์ Protocolอธิบาย
ICMP1Internet Comtrol Message Protocol
TCP6Transmission Control Protocol
UDP17User Datagram Protocol
80-95Header Checksumเป็นส่วนตรวจสอบความถูกต้องของข้อมลใน Header โดยไม่เกี่ยวกับส่วนข้อมูลที่อยู่ภายใน payload ค่านี้จะถูกคำนวนใหม่ทุกครั้งที่มีการเปลี่ยนแปลงข้อมูลใน Header (เช่น TTL ที่มีการเปลี่ยนแปลงทุกครั้งที่ IP datagram ถูกส่งผ่านเราเตอร์)
86-127Source IP Addressคือ IP Address ของผู้ส่งดาต้าแกรม
128-163Destination IP Addressคือ IP Address ของผู้รับดาต้าแกรม
ไม่แน่นอนOptionมีขนาดข้อมูลไม่แน่นอน ใช้สำหรับกำหนดค่าพารามิเตอร์ปลีกย่อย ซึ่งส่วนใหญ่ไม่มีการนำไปใช้งาน
ขึ้นอยู่กับ OptionPaddingมีข้อมูลว่างเปล่า ใช้เป็นส่วนเติมเต็มของฟิลด์ Option ให้ครบ 32 ไบต์

IP Routing

IP Routing เป็นกระบวนการค้นหาเส้นทางในการส่งผ่านข้อมูลจากต้นทางไปยังปลายทางโดยผ่านการส่งต่อข้อมูลไปจนกว่าจะถึงปลายทาง นับเป็นกลไกสำคัญที่ทำให้ IP เป็นโปรโตคอลที่สามารถส่งข้อมูลจากโฮสต์หนึ่งไปอีกโฮสต์หนึ่งได้แม้ว่าจะอยู่ไกลแสนไกล ผมขอเริ่มต้นทฤษฎีของ IP Routing ด้วยการทำความรู้จักกับส่วนประกอบต่างๆ ของเน็ตเวิร์ค ในแง่ของ IP Routing กันก่อน

Host โฮสต์เป็นอุปกรณ์ที่ทำหน้าที่ให้กำเนิดข้อมูลในกรณีเป็นผู้ส่ง หรือทำหน้าที่รับข้อมูลไปใช้งานในกรณีเป็นผู้รับ การสื่อสาร ข้อมูลใดๆจะต้องเป็นการสื่อสารจากโฮสต์ไปยังโฮสต์เสมอ สำหรับ IP Packet แล้วข้อมูลในเฮดเดอร์ที่ปรากฏอยู่ในฟีลด์ Source Address และ Destination Address ซึ่งเรียกว่า IP Address จะเป็นหมายเลขระบุตำแหน่งของโฮสต์ต้นทางและโฮสต์ ปลายทางเท่านั้น

Network เน็ตเวิร์คเป็นเครือข่ายที่มีการเชื่อมต่อกันของโฮส 2 ตัวขึ้นไป โฮสต์แต่ละตัวในเน็ตเวิร์คเดียวกันสามารถเชื่อมต่อถึงกันได้โดยตรง

Router เราเตอร์ทำหน้าที่ในการ ส่งผ่านข้อมูลจากเน็ตเวิร์กหนึ่งไปยังอีกเน็ตเวิร์กหนึ่ง ตำแหน่งของเราเตอร์จะอยู่ในจุดที่เชื่อมต่อระหว่างสองเน็ตเวิร์กเข้าด้วยกัน ด้วยข้อกำหนดของ IP ข้อมูลจะส่งไปถึงกันโดยตรงข้ามเน็ตเวิร์กไม่ได้ จะต้องอาศัยเราเตอร์เป็นผู้ทำหน้าที่ส่งผ่านข้อมูลไปให้ ใน Router จะมี Routing Table สำหรับเก็บข้อมูล เพื่อใช้ในการพิจารณาเลือกเส้นทางในการส่งดาต้าแกรม ซึ่งจะอธิบายกลไกการทำงานในหัวข้อถัดไป

ในการอธิบายกระบวนการ Routing ให้เป็นที่เข้าใจในเบื้องต้น ผมจะขออธิบายจากเน็ตเวิร์คตัวอย่างที่แสดงในรูปที่ 2.4


รูปที่ 2.4 network ตัวอย่าง

การ Routing จะเป็นไปตามขั้นตอนดังนี้

1. ถ้าโฮสต์ต้นทางและปลายทางต่อเชื่อมร่วมอยู่ในเน็ตเวิร์กเดียวกัน มีการเชื่อมต่อถึงกันโดยตรง เช่น อีเธอร์เน็ตหรือโทเค็นริง ดังแสดงในภาพที่ 2.3 เป็นการติดต่อระหว่าง 172.17.2.2 และ 172.17.2.3 (เครื่องสีแดง) IP ดาต้าแกรมก็จะถูกส่งไปยังโฮสต์ปลายทางโดยตรง

2. หากโฮสต์ต้นทางและปลายทางไม่ได้อยู่ในเน็ตเวิร์กเดียวกัน IP ดาต้าแกรมจะถูกส่งไปยังดีฟอลต์เราเตอร์ 3. เมื่อเราเตอร์ได้รับ IP ดาต้าแกรมจากข้อ 2 แล้วตรวจสอบดู หากพบว่าโฮสต์ปลายทางต่อร่วมอยู่บนเน็ตเวิร์กเดียวกันกับเราเตอร์ ให้ทำการส่งดาต้าแกรมไปที่โฮสต์นั้น เช่น หาก 172.17.3.2 ต้องการส่งดาต้าแกรมไปยัง 172.17.4.2 (เครื่องสีเหลือง) จะต้องส่งดาต้าแกรมไปที่ Router B Router B จะส่งดาต้าแกรมต่อไปยังโฮสปลายทาง 4. หากไม่ได้ต่อร่วมกันก็ส่งดาต้าแกรมไปที่เราเตอร์ตัวต่อไป โดย Router จะเป็นผู้เลือกเส้นทาง ซึ่งมีอยู่ 2 กรณีคือ

  1. ถ้ามีข้อมูลของโฮสปลายทางอยู่ใน Routing Table Router จะส่งดาต้าแกรมไปยัง router ตัวที่ระบุไว้ใน routing table
  2. ถ้าไม่มีข้อมูลของโฮสปลายทางอยู่ใน Routing Table Router จะส่งดาต้าแกรมไปยัง default router
และกลับไปที่ขั้นตอนในข้อ 3 ใหม่ จนกว่า IP ดาต้าแกรมจะเดินทางถึงปลายทางหรือหมดเวลาในการส่ง (TTL=0)

สมมติว่าเครื่อง 172.17.1.3 ต้องการติดต่อกับ 172.17.4.3 จะต้องส่ง ip datagram ไปยัง Router A หาก Router A มีข้อมูลเกี่ยวกับ 172.17.4.3 อยู่ ก็จะรู้ว่าต้องส่งดาต้าแกรมไปยัง Router B คือ 172.17.2.4 และ Router B ก็จะส่ง ip datagram ไปยังโฮสปลายทางได้สำเร็จ

Subnet Adressing / Subnet Mask

ในการใช้งาน โปรโตคอล TCP/IP ใน internet นั้นการแบ่ง IP Address ออกเป็นแอดเดรสของเน็ตเวิร์ก (netid) และแอดเดรสของ โฮสต์ ตามที่ระบุของแต่ละคลาสค่อนข้างจะขาดประสิทธิภาพ คือในเน็ตเวิร์กคลาส A และ B แต่ละเน็ตเวิร์กนั้น สามารถมีจำนวนโฮสต์ได้มาก ซึ่งการที่จะนำ IP Address มาใช้อย่างทั่วถึงนั้นมีโอกาสเป็นไปได้ยากมากทั้งคลาส A และคลาส B เพราะมีโอกาสน้อยมากที่จะมีเน็ตเวิร์ก ใดในโลกมีจำนวนโฮสต์มากมายขนาดนั้นอยู่ภายในเน็ตเวิร์กเดียว ดังนั้น IP Address ที่จัดสรรให้ไปในแต่ละเน็ตเวิร์กของ คลาสเหล่านี้จึงถูกใช้ไม่หมดและไม่สามารถนำไปใช้ประโยชน์ที่อื่นได้เลย ดังนั้นเพื่อให้การจัดสรร ip เป็นไปอย่างมีประสิทธิภาพ จึงมีการนำส่วนของ hostid มาแบ่งย่อยเป็นสองส่วนคือ subnet id และ host id ทำให้ได้เน็ตเวิร์คย่อยหลายๆเน็ตเวิร์ค โดยในแต่ละเน็ตเวิร์ค มีจำนวนโฮสไม่มากเกินไปและเพียงพอต่อการใช้งาน

การแบ่ง Subnet ใช้เทคนิคที่เรียกว่า Subnet Mask ซึ่งเป็นตัวเลขมีความยาว 32 บิต แบ่งออกเป็นสี่ชุดเช่นเดียวกับ ip แต่ค่าของ subnet mask จะขึ้นอยู่กับความต้องการในการแบ่ง subnet ว่าต้องการจำนวน subnet เท่าใดและมีจำนวนโฮสเท่าใด หากนำ subnet mask มาเขียนเป็นเลขฐานสอง จะมีลักษณะพิเศษคือ ขึ้นต้นด้วยเลข 1 มีจำนวนกี่ตัวก็ได้ ตามแต่ความต้องการในการแบ่ง suubnet และตำแหน่งที่เหลือจะมีค่าเป็น 0 ความสัมพันธ์ระหว่าง ip address , subnet mask , host id , net id , จำนวน subnet และ จำนวน host จะเป็นดังนี้
  • host id = (ip address) AND ~(subnet mask)
  • net id = (ip address) AND (subnet mask)
  • จำนวน host = ((2^จำนวนบิตที่เป็น 0 ของ subnet mask)-2) เนื่องจาก ip แรกของ subnet ถูกใช้เป็น net ip และ ip สุดท้ายของ subnet ถูกใช้เป็น broadcast id
  • จำนวน subnet = (2^(จำนวนบิตที่เป็น 1 ของ subnet mask ในตำแหน่งที่เป็น host id ของ ip address))
ท่านสามารถทดลองการจัด subnet mask ได้ที่ Network Calculator

Back to top | Next Charpter >>





© copyright 2001 Sorrawut Korsuwansiri