Monday, October 5, 2015

เครือข่ายคอมพิวเตอร์ (ตอนที่ 2 TCP/IP)

อินเทอร์เน็ต (the Internet) คือเครือข่ายของคอมพิวเตอร์ที่ใหญ่ที่สุดในโลก มีไว้ให้บริการต่างๆ เช่น ระบบ www, ระบบ email เป็นต้น
the Internet ได้รับการพัฒนาต่อจากงานวิจัยจากกระทรวงกลาโหมสหรัฐ ที่ต้องการระบบส่งข้อมูลที่เลือกเส้นทางที่ข้อมูลจะเดินทางได้เอง (เช่น จุดที่เป็น hub จุดใดถูกทำลาย ระบบจะสามารถดำเนินการต่อไปได้) ตามคำจำกัดความของ packet switching circuit
บริการที่ดังๆบน the Internet บนระบบปฎิบัติการยูนิกซ์ เป็นตัวจุดประกายให้เกิดการขยายตัวของ the Internet อย่างรวดเร็ว 3 บริการที่ดังๆได้แก่ telnet สามารถให้ผู้ใช้ login ไปยังเครื่องที่อยู่ที่ใดก็ได้บน the Internet (ตามสิทธิ์), ftp (File Transfer Protocol) สามารถให้ผู้ใช้ upload/download ไฟล์ข้ามเครื่องได้ (ตามสิทธิ์) และ ที่สำคัญที่สุด email ทำให้ผู้ใช้สามารถส่งข่าวสาร/เอกสาร ได้อย่างสะดวกและรวดเร็ว โดยเฉพาะ email นั้นทำให้หลายองค์กรเข้ามาเป็นส่วนหนึ่งของ the Internet
ต่อจากนี้เราจะกล่าวถึง the Internet ด้วยองค์ประกอบต่างๆของ

Internet Protocol Suite
เรากล่าวถึง Protocol ไปแล้ว ในกรณีของ the Internet นั้นมีการแบ่งงานกันตามหน้าที่ตามแบบ OSI โมเดล และ protocol ต่างๆมาประกอบกันจึงเรียกว่า suite (จากรูป) ในชั้นที่ 1 และ 2 นั้น คือส่วนที่เป็นฮาร์ดแวร์ เช่นเราเชื่อมต่อด้วย wifi  หรือเราเชื่อมต่อด้วย ADSL Modem หรือ Ethernet ทำหน้าที่จัดการรับส่งข้อมูลให้มีประสิทธิภาพเชิงกายภาพ เช่นการร้องขอใช้สื่อดังที่ได้กล่าวไปแล้ว
ส่วนสำคัญของ the Internet อยูในชั้นที่ 3 และ 4 โดยชั้น network นั้นมีหน้าที่สำหรับการจัดการด้านที่อยู่ของผู้ส่ง/ผู้รับ เราเรียก protocol ในชั้นนี้ว่า Internet Protocol (IP) ส่วนชั้น Transport นั้นมีหน้าที่สำหรับการแบ่งข้อมูลออกเป็นชิ้นย่อยๆ เพื่อให้การรับส่งมีประสิทธิภาพ และเพื่อให้เกิดสภาพเหมาะแก่การแบ่งกันใช้งานร่วมกัน เราเรียก protocol ในชั้นนี้ว่า Transmission Control Protocol (TCP)
ในชั้นที่ 5-7 นั้น บริการต่างๆนั้นได้รับการพัฒนาขึ้นมาตามแต่ผู้พัฒนา และเรียกรวมๆว่าชั้น Application (โดยหลักการก็มีการแบ่งบริการนั้นเป็นส่วนๆตามหน้าที่) เช่นบริการรับส่ง email จะอยู่บน TCP/IP อีกทีหนึ่ง

http://www.tcpipguide.com/free/diagrams/tcpiplayers.png
เปรียบเทียบ OSI Model กับ TCP/IP

http://web.cs.dal.ca/~grundke/1600/networks/netSlidesFiles/stack.gif
ในการรับส่งข้อมูลนั้นเครื่องที่เป็นทางผ่านของข้อมูลจะพิจารณาว่าหากตนไม่ใช่ผู้รับก็จะ
ไม่ส่งไปยังชั้น Transport แต่ส่งออกไปต่อทันที

Port และ Transmission Control Protocol (TCP)
หน้าที่แรกที่เราเรียนรู้จาก TCP คือการออกแบบลักษณะการทำงานให้แบ่งข้อมูลออกเป็นส่วนๆ ก็เพื่อให้เครื่องหลายเครื่องใช้สายส่งสัญญาณร่วมกัน กล่าวคือทุกเครื่องต่างพลัดกันส่งจนผู้ใช้รู้สืกไปว่าเครื่องของตนนั้นทำงานอยู่ตลอด นอกจากนั้นการแบ่งข้อมูลนั้นทำให้การสื่อสารมีต้นทุนการแก้ไขความผิดพลาดที่ถูกลง เพราะในกรณีที่เกิดความผิดพลาด (แม้แต่บิตเดียว) ก็จะส่งซ้ำเฉพาะส่วนที่เสียหาย (ซึ่งสามารถโยงไปถึงอัตราการใช้ช่องสัญญาณที่มีประสิทธิภาพมากขึ้น เพราะสามารถนำช่องสัญญาณไปส่งข้อมูลจริงได้มากขึ้น)
(จากภาพ) จากโครงสร้างของข้อมูล (ที่จะถูกแปะไปกับข้อมูลจริง) จะเห็นคำว่าพอร์ต (port) ซึ่งเป็นตัวเลขระบุถึงช่องทางการสื่อสารซึ่งมีความยาว 16 บิต (หากนึกภาพการเชื่อมต่อจากคอมพิวเตอร์ของเราไปยังเครื่องที่สื่อสารด้วยเป็นท่อ ก็เท่ากับเครื่องนั้นสามารถมีท่อได้ 65535 ท่อในเวลาเดียวกัน (มีการห้ามใช้ 1 เบอร์) และหากนึกภาพว่าหาก IP เราคือเลขที่บ้าน port คือหมายเลขห้อง) เราเรียกการเชื่อมต่อด้วย TCP/IP ว่า socket programming ซึ่งเราต้องระบุเลขพอร์ตที่เราต้องการติดต่อด้วย บริการมาตรฐานบน the Internet นั้นจะมีเบอร์พอร์ตมาตรฐานอยู่ เช่น email server ใช้พอร์ตหมายเลข 25 (หากจะส่ง email แต่ไปคุย SMTP ซึ่งเป็นโพรโตคอลสำหรับการส่ง email กับห้องอื่นทีให้บริการอื่น(port เลขอื่น) ก็จะคุยกันไม่รู้เรื่อง รูปด้านล่างแสดงถึงการติดต่อด้วย TCP นั้นต้องกำหนด port

https://kl2217.files.wordpress.com/2009/06/port.gif


(ศึกษาความหมายของหมายเลขพอร์ต ที่เป็นที่รู้จักได้ที่ https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers)
อนึ่ง TCP มีคู่แฝดคือ User Datagram Protocol (UDP) โดยข้อแตกต่างระหว่าง TCP กับ UDP คือ UDP นั้นผู้ส่งไม่สนใจว่าข้อมูล (packet) ที่ส่งไปถึงที่หมายเรียบร้อยหรือไม่ ส่วน TCP นั้นได้รับข้อมูลจากข้อมูล Acknowledgement Number ซึ่งไม่จำเป็นต้องเกิดจากข้อมูลมีความเสียหายอย่างเดียว กล่าวคือเนื่องจาก packet switching circuit ไม่จำกัด path ในการส่งข้อมูล ดังนั้นลำดับของข้อมูลที่ถึงปลายทางอาจไม่เป็นไปตามลำดับที่ส่ง

https://systemstechblog.files.wordpress.com/2011/02/tcpheader.jpg

จริงๆแล้ว TCP มีกลไกให้น่าศึกษามากมาย TCP นั้นได้รับการออกแบบมาให้ ยกตัวอย่างเช่นการปรับอัตราการส่งตามสภาวะของปริมาณข้อมูลบนสื่อ (อ่านเพิ่มเติมได้ที่ https://www.rfc-editor.org/info/rfc5681 RFC คือชื่อออกเอกสารทางเทคนิคประเภทหนึ่ง) (จากภาพ) พฤติกรรมของ TCP จะพยายามเร่งอัตราการส่งเพื่อใช้สมรรถนะของช่องสัญญาณอย่างเต็มที่จนกระทั่งส่งเร็วเกินไป (เจอ loss)  จากนั้นจึงปรับลงมาเพื่อเปลี่ยนโหมดเป็นค่อยๆขึ้นอย่างมีระเบียบ (พยายามส่งให้เร็วขึ้นอยู่ดี สังเกตุเส้นตรง)


http://www.cisco.com/c/dam/en/us/td/i/100001-200000/180001-190000/187001-188000/187575.eps/_jcr_content/renditions/187575.jpg
กล่าวโดยรวม TCP มีหน้าที่หลัก 4 ประการคือ  connection-oriented data stream support, reliability, flow control, และ multiplexing ซึ่งเรากล่าวถึง 3 ประการหลังไปแล้ว ความหมายของ connection oriented คือเป็น layer ที่รับรู้ถึงความเป็น end-to-end  communication ซึิ่งอธิบายย่อที่สุดด้วยการใช้การปฏิเสธว่า 3 ชั้นล่าง คือชั้น network, link, physical นั้นไม่รับทราบว่าเป็นข้อมูลของเครื่องไหนโปรแกรมไหน มองอีกแง่ว่ามันคือตัวเรียงข้อมูลกลับ ดังนั้นมันต้องเข้าใจภาพรวมของการสื่อสารที่มันทำให้อยู่

Internet Protocol (IP)
หากเปรียบกับระบบโทรศัพท์ IP ก็คือหมายเลขโทรศัพท์ของเครื่องเรา นั่นหมายถึงว่าเราสามารถเปลี่ยนเบอร์โทรได้ และสามารถเปลี่ยนตัวโทรศัพท์ก็ได้ ในทางปฏิบัตินั้นโทรศัพท์แต่ละเครื่องก็มีหมายเลขในซิม เพื่อให้ระบบสามารถระบุได้ว่าหมายเลขนี้อยู่ที่เครื่องไหน (IP นี้อยู่กับ NIC หมายเลขอะไร)
หากเปรียบ the Internet คือระบบโครงข่ายสำหรับการคมนาคม เครื่องแต่ละเครื่องก็คือบ้านแต่ละหลัง IP ก็คือบ้านเลขที่ (สาเหตุที่ข้อมูลสามารถเดินทาง(จากต้นทาง)ไปยังปลายทางได้
(จากภาพ) IPv4 นั้นมีขนาด 32 bit ดังนั้นมีค่าไม่ซ้ำได้ประมาณ 4 พันล้านค่า (มีบ้านที่มีเลขที่ได้ 4 พันล้านหลัง) ซึ่งไม่เพียงพอต่อจำนวนคอมพิวเตอร์ปัจจุบัน(ต่อให้ไม่รวมมือถือ)ที่อยู่ในระบบ สัญลักษณ์ /24 ที่ prefix notation จะกล่าวถึงในภายหลัง
ค่า 192.149.252.76 ก็คือการเขียนทีละ byte ของค่าของ IP ดังนั้นค่าแต่ละค่าจะมีค่าไม่เกิน 255

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw58Ii5q1bg9TC1oDIklMTZ4kKXt8S-qquTMKFbkxtcZOR_fRvwnqQTDVjT1-Iska6MGLedprMIZxjo1d4bepYnUjQDI9OyemLVCHxCyxva8cepgH_jM5n7kWiUo1hipQkzhbxxJQA8pI/s1600/IPv4-vs-IPv6-graphic.png

IPv6 นั้นได้รับการศึกษาและประกาศใช้ตั้งแต่ปี 1999 วัตถุประสงค์หลักก็เพื่อแก้ปัญหาไอพีขาดแคลนและเน้นไปที่การรักษาความปลอดภัย (เนื่องจาก IPv4 ไม่ได้ถูกออกแบบให้มีกลไกใดๆด้านนี้เลย) แต่การนำไปติดตั้งนั้นเป็นไปอย่างช้ามาก เนื่องจากจะมีการอ้างว่าองค์กรที่ใช้ฮาร์ดแวร์ที่เก่ามากจะไม่สามารถอยู่บนระบบนี้ได้ต่อไป
ในปี คศ. 2012 ได้มีการจัดการทดสอบการใช้งาน IPv6 กันทั่วโลก (อ่านแผนการดำเนินการเกี่ยวกับ IPv6 และความรู้เพิ่มเติมได้ที่ http://www.mict.go.th/assets/portals/1/files/IPV6/IPv6ActPlan_6.pdf) แต่การติดตั้งจริงก็ยังไม่ได้มีความคืบหน้าใดๆ
ข้อมูลเพิ่มเติมเกี่ยวกับ IPv6 แนะนำให้ไปอ่านเพิ่มเติมได้ที่ http://www.ipv6.nectec.or.th/faq.php

https://www.it.chula.ac.th/sites/default/files/faq/showip04.jpg
ที่แสดงข้อมูลว่าเครื่องของคุณมี IP ที่สามารถเชื่อมต่อ the Internet ได้

Network ID (subnetmask) และ Gateway
เท่าที่ผ่านมาเราเพิ่งมาถึงว่า IP คือ ID ของเครื่องใน the Internet แต่การที่จะทำงานบน the Internet นั้นต้องมีองค์ประกอบที่ขาดไม่ได้คือ subnet mask
(จากรูป) ตัวอย่าง หา IP 10.100.31.9 และระบุ subnet mask เป็น 255.0.0.0 เราสามารถระบุ network id ของเครื่องเราได้ นั่นก็คือจากการ bitwise AND กันจะได้ network id เป็น 10.0.0.0 (เรียกง่ายว่า net 10 หากใช้ subnet mask 255.255.0.0 ก็จะได้ 10.100 ก็เรียก net 10.100)
หัวข้อที่แล้วค้างไว้ว่า /24 หมายถึงอะไร /24 หมายถึงจำนวน บิต ของ subnet mask ดังนั้นจากรูปสามารถเขียนได้ว่า 10.100.31.9/8
โดยปกติให้ถือว่าจำนวนบิตที่เป็น 0 ใน subnet mask คือจำนวนเครื่องที่มีได้ใน network id นั้น กล่าวคือในกรณีนี้ องค์กรที่ใช้ net id = 10 นี้ จะมีเครื่องได้ 2^24 = 16.7 ล้านเครื่อง เรื่องนี้มี 2 ประเด็นที่จะขอชี้แจง
1. มีการแบ่งเป็น class ว่าองค์กรชนิดใดควรได้ network id คลาสใด (โดยใช้จำนวน bit 1 ของ subnet mask เป็นตัวกำหนด class)
2. แต่ละองค์กรสามารถไปทำ sub network ของตนเองได้
อย่างไรก็ดีปัจจุบันมักไม่ค่อยสนใจเรื่อง class และพิจารณา net id จาก subnet mask เลย

http://www.bloggang.com/data/likecisco/picture/1313070644.gif

หากจำนวน IP ทั้งหมดหมายถึงเลขที่บ้านในประเทศไทย สิ่งที่ต้องจัดการคือทำอย่างไรให้ router รู้จักบ้านทั้ง 4 พันล้านหลัง ดังนั้น network id จะช่วยให้มีการจัดกลุ่มของบ้าน เช่นบ้านในจังหวัดชลบุรี กับบ้านในจังหวัดตรัง และจังหวัดอื่นๆ ทำให้จำนวน IP ที่ router ต้องรู้จักลดลงไปอย่างมาก นอกจากนี้การส่งข้อมูลยังใช้หลักการ broadcast นั่นหมายถึงว่าเครื่องเครื่องหนึ่งจะส่งข้อมูลด้วยการประกาศให้ทุกเครื่องใน network id เดียวกัน หากไม่ใช่จึงจะส่งออกไปยังนอก network id  (นึกภาพหากไม่มี network id ทุกเครื่องใน 4 พันล้าน ต้องรอจังหวะส่ง)
ลำดับถัดมาที่ส่วนมากจะต้องมีคือ gateway (จากรูป) เครื่อง 10.1.1.2/24 กับเครื่อง 10.1.3.1/24 ถึอว่าอยู่คนละ network กัน การจะสื่อสารกันได้ต้องมี gateway (นึกภาพประตูเมืองกั้นแต่ละจังหวัดที่อยู่ติดกัน)


http://www.cisco.com/web/about/ac123/ac147/images/ipj/ipj_9-1/91_ip_fig_02_lg.jpg
(จากรูป) ดังนั้นโดยปกติเราจะเห็นการตั้งค่าอย่างน้อย 3 ค่า (IP, subnet mask, gateway) โดย gateway เองจะมี 2 IP โดย IP แรกคือฝั่งในจังหวัดเรา (ฝั่งที่เราจะระบุให้เป็น gateway) อีก IP จะรู้จัก network ข้างบ้าน (ปกติก็คือ IP ของผู้ให้บริการอินเทอร์เน็ตเรา) ในกรณีที่เราไม่มีค่า gateway เราก็จะสามารถส่งข้อมูลได้เฉพาะภายใน network id เดียวกัน
http://pad3.whstatic.com/images/thumb/d/dc/Change-your-IP-Address-(Windows)-Step-3Bullet3-Version-2.jpg/670px-Change-your-IP-Address-(Windows)-Step-3Bullet3-Version-2.jpg

เรามีคอมพิวเตอร์ที่สามารถจะสื่อสารกันไม่ว่าจะภายใน network เดียวกัน หรือข้ามเน็ตเวิร์คแล้ว หากใครติดตามอ่านมาจนถึงตรงนี้แล้วมีคำถามว่าผมเปิดเครื่องแล้วใช้ได้เลย ไม่ต้องตั้งค่าเหล่านี้ หรือถามว่าปัจจุบันในโลกนี้อย่างไรเสียต้องมีคอมพิวเตอร์บน the Internet มากกว่าสี่พันล้านเครื่องแน่ๆ เราจะตอบคำถามเหล่านั้นต่อจากนี้

Intranet
ในแต่ละเน็ตเวิร์คนั้นจะมี IP ที่มีความหมายในตัวอยู่แล้ว (ห้ามนำไปใช้) เช่น IP แรกจะหมายถึง network เองไม่ใช่เครื่องใดเครื่องหนึ่ง หรือ IP สุดท้ายจะใช้สำหรับการ broadcast ไปยังทุกเครื่องใน network
(จากรูป) 127.0.0.1 หมายถึงเครื่องนั้นๆเอง (loopback) นอกจากนี้ยังมี network ตามช่วงต่อไปนี้
Class A 10.0.0.0 - 10.255.255.255         (10.0.0.0/8)
Class B 172.16.0.0 - 172.31.255.255     (172.16.0.0/12)
Class C 192.168.0.0 - 192.168.255.255 (192.168.0.0/16)
RFC1918 กำหนดให้เป็น private network ซึ่งหมายถึงความว่าไม่ว่า source address หรือ destination address เหล่านี้ไปปรากฎบน the Internet ระบบจะทิ้ง packet เหล่านั้น เพราะถือว่าไม่รู้จักที่อยู่เหล่านี้
private IP (IP ในช่วง private network) มีประโยชน์ เช่น สมมติว่าโรงพยาบาลหนึ่งต้องการติดตั้งระบบสารสนเทศ โรงพยาบาลสามารถติดตั้ง TCP/IP โดยไม่ต้องไปขอ public IP จากหน่วยการที่กำกับเรื่องนี้เลย ความแตกต่างของ private IP กับ public IP อยู่ที่ locally unique กับ globally unique กล่าวคือ หาก IP นั้นไม่ซ้ำกับเครื่องใดเลยใน network เดียวกัน แต่อาจไปซ้ำกับเครื่องอื่นใน network อื่น (เช่นโรงเรียนอีกแห่งก็ใช้ network id เดียวกัน ...สอง network นี้ย่อมนำมาเชื่อมกันตรงๆไม่ได้) ในขณะที่ public IP จะไม่มีวันซ้ำกับเครื่องใดเลย
เรามักจะคุ้นกับ network 10 กับ network 192.168 (แต่จะเป็น 10.0.0.0/24 หรือ 192.168.0.0/24 เพราะมักไม่อยากยุ่งกับ sub network และมักมีลูกข่ายไม่เกิน 255 เครื่อง)
(อ่าน private network เพิ่มเติมโดยเฉพาะเรื่อง IPv6 ได้ที่ https://en.wikipedia.org/wiki/Private_network)


http://image.slidesharecdn.com/1-2tcp-ipbasics-110926054356-phpapp01/95/tcpip-basics-10-728.jpg?cb=1317016815

Network Address Translation (NAT) และ Dynamic Host Configuration Protocol (DHCP)
ในกรณีที่ private network ต้องการเชื่อมต่อเข้ากับ the Internet ด้วย ก็ได้มีการสร้างกลไก NAT เพิ่มขึ้นมา โดยจากที่ gateway มีหน้าที่เพียงส่งต่อข้อมูลออกไป (จากรูป) ก็ต้องกลายเป็น NAT ด้วยการเปลี่ยนที่อยู่ที่ระบุใน packet ให้เสมือนว่าตนเองเป็นเจ้าของ packet นั้น จะเห็นว่าโมเดลนี้จะเกิดปัญหาคอขวด (ขึ้นอยู่กับจำนวนเครื่องลูกข่ายหลัง NAT) และเป็นการลดจำนวน connection ของเครื่องลูกข่ายเพราะต้องนำมาแบ่งกับลูกข่ายเครื่องอื่นๆ โมเดลนี้ NAT จะมี public IP อยู่อีกฝั่ง (เช่นเราได้ public IP ที่ router ที่เราต่อเข้ากับผู้ให้บริการอินเทอร์เน็ต)

https://upload.wikimedia.org/wikibooks/en/6/63/Network_Address_Translation_(file2).jpg
(จากรูป) ส่วน DHCP ได้รับการออกแบบมาเพื่อแจก IP แบบอัตโนมัติ ทำให้ผู้ใช้เครื่องไม่ต้องมาเป็นธุระกับเรื่องนี้ ปัจจุบันแทบจะเป็นฟีเจอร์มาตรฐานไปแล้ว

http://www.ebrahma.com/wp-content/uploads/2013/06/DHCP-img.jpg

ต่อเนื่องกับเรื่อง private IP จากหัวข้อที่แล้ว หากเครื่องของเราใช้ private IP ย่อมเป็นไปไม่ได้ที่เราจะเป็นปลายทางของการติดต่อ เช่นเราจะเป็น web server ให้เครื่องอื่นนอก network เข้ามาเชื่อมต่อไม่ได้ (แต่ปัจจุบันก็มีเทคโนโลยีมาทำให้ได้เช่นกัน)

รูปด้านล่างแสดงวิวัฒนาการของ the Internet ก่อนจบบทความนี้

http://malonemediagroup.com/wp-content/uploads/2014/02/historyoftheinternet-timeline.png

ส่งท้าย 
เราได้ครอบคลุมกรอบการทำงานของ the Internet มาเกือบครบแล้ว เราทราบแล้วว่าข้อมูลที่ต้องการส่ง/รับ จะ

  • ถูกแบ่งเป็นส่วน
  • มีการแปลงเป็นสัญญาณทางไฟฟ้าตามสื่อที่เลือก (ตอนที่แล้ว)
  • มีการจัดการความเร็วการส่งข้อมูลในมิติของปริมาณการส่งตามสภาวะของสัญญาณอินเทอร์เน็ต
  • มีการจัดการเกี่ยวที่อยู่ของผู้รับและผู้ส่ง

เราทราบถึงหน้าที่ของ subnet mask ซึ่งเป็น parameter ตัวที่สองที่ต้องมีในการติดตั้ง TCP/IP network
เราครอบคลุมถึงหน้าที่ของ gateway, และ รู้จัก NAT และ DHCP
หวังว่าที่กล่าวมาจะพอให้เป็นพื้นฐานสำหรับผู้ที่สนใจเทคโนโลยีทางนี้ ขอยกตัวอย่างเช่นปัจจุบันมี VLAN ซึ่งทำให้ switch สามารถมาจัดการระดับ IP ได้

Copy Right สันธนะ(kmitl) 2015

9 Oct 2016

/* ตอนต่อไปคงเป็นเรื่อง Domain Name Server */


1 comment:

  1. http://manager.co.th/Pjkkuan/ViewNews.aspx?NewsID=9580000112383

    ReplyDelete