network protocols

39
บทที2 ทฤษฎีที่เกี่ยวของ 2.1 Network Protocols OSI จะเปนการกําหนดรูปแบบของ Protocol Layers จุดประสงคของแตละ layer และวิธีการ ทํางานรวมกันของแตละ layer เพื่อใหเห็นเปนรูปธรรมมากยิ่งขึ้น ในรูป 2.1 จะเปนการนําเอาชุด ของ Protocol ที่ใชงานจริง ในที่นี้คือ TCP/IP Protocol Stack มาเปรียบเทียบกับ OSI Model รูป 2.1 OSI-TCP/IP Protocol Stack อาจกลาวไดวา TCP/IP Protocol Stack เปนรูปแบบอยางงายของ OSI Model กลาวคือสามารถ มองเปน 4 Layers ได โดยในชุดของ TCP/IP Protocol จะพบวา Protocol ในชั้นบนสุด (HTTP, FTP, SMTP, RIP, DNS, etc.) นั้นจะไมสามารถจัดอยูใน Layer เพียง Layer เดียวได ทั้งนี้เพราะ Functions การทํางานของ Protocol เหลานั้นครอบคลุมทั้ง 3 Layers ของ OSI Model สําหรับ Network Protocol นี้อาจสามารถแบงออกเปนประเภทตาง ตามรูปแบบการทํางาน และจุดประสงคการใชงานไดดังนี

Upload: suriya-sila

Post on 27-Nov-2014

172 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Network Protocols

บทที่ 2

ทฤษฎีทีเ่ก่ียวของ

2.1 Network Protocols OSI จะเปนการกําหนดรูปแบบของ Protocol Layers จุดประสงคของแตละ layer และวิธีการทํางานรวมกนัของแตละ layer เพื่อใหเหน็เปนรูปธรรมมากยิ่งขึ้น ในรปู 2.1 จะเปนการนําเอาชุดของ Protocol ที่ใชงานจริง ในที่นี้คือ TCP/IP Protocol Stack มาเปรียบเทียบกับ OSI Model

รูป 2.1 OSI-TCP/IP Protocol Stack

อาจกลาวไดวา TCP/IP Protocol Stack เปนรูปแบบอยางงายของ OSI Model กลาวคือสามารถมองเปน 4 Layers ได โดยในชุดของ TCP/IP Protocol จะพบวา Protocol ในชั้นบนสุด (HTTP, FTP, SMTP, RIP, DNS, etc.) นั้นจะไมสามารถจัดอยูใน Layer เพียง Layer เดียวได ทั้งนี้เพราะ Functions การทํางานของ Protocol เหลานัน้ครอบคลุมทั้ง 3 Layers ของ OSI Model สําหรับ Network Protocol นี้อาจสามารถแบงออกเปนประเภทตาง ๆ ตามรูปแบบการทํางานและจุดประสงคการใชงานไดดังนี ้

Page 2: Network Protocols

4

2.1.1 Basic Protocols หากดใูนรูป 2.1 แลวจะพบวา Basic Protocol เหลานีจ้ะเทยีบเคียงไดกับการทํางานใน Layer 3 และ 4 ซ่ึงเปน Layer สําคัญมีหนาที่หลักในการควบคุมดูแลการสื่อสารขอมูล โดย Basic Protocols นี้ไดแก IP, TCP, UDP, ICMP และ IGMP 2.1.2 Internet Protocols

เปน Protocol ในระดบับนสุดของ TCP/IP Protocol Stack เปนชุดของ Protocol ที่นิยมใชงานกนัอยางแพรหลายบน Internet ไดแก FTP, HTTP และ HTTPS

2.2 Sockets 2.2.1 Overview

โดยทั่วไปในการติดตอส่ือสารที่เปนที่นิยมใชกันในปจจุบัน จะกระทําบนพื้นฐานของ Protocol TCP/IP และชดุของ Software ซ่ึงทํางานกับ Packets ตามมาตรฐานของ TCP/IP (ซ่ึงตอไปจะเรยีกวา TCP/IP Protocol Software) นั้นจะถูกสรางขึ้นมาเปนสวนหนึ่งของตัวระบบปฏิบัติการ ดังนั้น เมื่อ Application Software ใด ๆ ที่ตองการสื่อสารผานระบบเครือขายตามมาตรฐาน TCP/IP Protocol จะตองติดตอกบัระบบปฏิบัติการเพื่อขอรับบริการ

สําหรับทางผูพัฒนามาตรฐาน TCP/IP Protocol ไมตองการให TCP/IP Protocol ใชงานไดกับ Platformใดเปนการเฉพาะ หรือใชงานไดกับเพียงระบบปฏบิัติการระบบใดระบบหนึ่ง ดังนั้นผูพัฒนาจึงมีความระมดัระวังในการกําหนดมาตรฐานมิใหมกีารอางถึงขอมูลการเชื่อมตอภายใน ซ่ึงเปนรูปแบบเฉพาะของ Platform ใด Platform หนึ่ง หรืออางถึงวิธีการเชื่อมตอกับ Application Software ในลักษณะหรือรูปแบบเฉพาะของระบบปฏิบัติการจากผูผลิตรายใดรายหนึ่ง และดวยแนวคดิในการออกแบบที่ไมยึดตดิกับ Platform หรือระบบปฏิบัติการใด ๆ นี้ทําใหอาจกลาวไดวา Protocol TCP/IP มีลักษณะเปน Loosely Specified Protocol Software Interface

จากที่กลาวมาขางตนสามารถกลาวโดยสรุปไดวา “มาตรฐาน TCP/IP นั้นมิไดระบุรายละเอียดเกีย่วกับการเรียกใชงาน TCP/IP Protocol Software ของ Application Software หากแตมีเพียงขอแนะนาํเกี่ยวกับฟงกชันที่ควรจะมใีนชุดของ TCP/IP Protocol Software เทานั้น สวนของรายละเอียดทีน่อกเหนือจากนั้นจะเปดกวางใหนกัออกแบบระบบกําหนดและลงรายละเอียดเอง”

ขอดีของการออกแบบ TCP/IP ใหเปนแบบ Loosely Specified Protocol Software Interface นั้นคือ ความ Flexible และ Tolerance ท้ังนี้เพราะการไมกําหนดรายละเอียดปลีกยอยทําใหนักออกแบบระบบสามารถที่จะใส TCP/IP ลงในระบบปฏิบัติการไดโดยงายไมวาระบบปฏิบัติการนั้นจะเปนระบบปฏิบัติการแบบงาย ๆ อยางที่ใชกันใน Embedded System ไปจนถึงระบบปฏิบัติการที่สลับซับซอนอยางในระบบปฏิบัติการที่ใชในเครื่อง Super Computer เปนตน นอกจากนั้นดวยการที่ไมกําหนดวิธีการเชือ่มตอกับ Application Software ทําใหนกัออกแบบระบบ

Page 3: Network Protocols

5 สามารถเลือกใชรูปแบบในการเชื่อมตอไดอยางอิสระ โดยสามารถใชไดทั้งแบบ Procedural หรือ Message-Passing เปนตน แตทั้งนี้ Loosely Specified Software Interface นั้นก็ยังมีขอดอยเชนกันกลาวคือการทีน่ักออกแบบระบบมีอิสระในการใสรายละเอียดในสวนการเชื่อมตอ จงึทําใหเกิดความหลากหลายของรูปแบบการเชื่อมตอ ซ่ึงนั่นทําใหการเขียน Application Program เพื่อการใชงาน TCP/IP มีความยุงยากและซับซอนมากยิ่งขึ้น อีกทั้งยังทําให Application Program นั้นยากแกการ Port ไปยงัระบบปฏบิัติการหรือ Platform อ่ืน ๆ

แมวานกัออกแบบระบบจะสามารถใสสวนการเชือ่มตอกับซอฟแวร (Software Interface) อยางไรก็ได แตในทางปฏิบัติกลับมีรูปแบบของ TCP/IP Software Interface อยูเพียงไมกี่แบบเทานั้น และ TCP/IP Software Interface ที่นิยมมีอยูเพียง 2 รูปแบบเทานั้นคือ

2.2.1.1 Socket Interface เปน TCP/IP Software Interface ที่พัฒนาขึ้น โดย University of

Californiaat Berkley ซ่ึงในตอนตนไดพฒันารูปแบบการเชื่อมตอแบบนี้เพื่อใชกับระบบปฏิบัติการ Berkley Unix

2.2.1.2 Transport Layer Interface เปน TCP/IP Software Interface ที่พัฒนาโดย AT&T เพื่อใชงานกับ

ระบบปฏิบัติการ System V Unix 2.2.2 Interface Functionality แมวาทางผูพัฒนา TCP/IP Protocol Software Interface จะไมไดมกีารกําหนดรูปแบบ

หรือวิธีการใด ๆในการเชื่อมตอ Application Software กับ TCP/IP Protocol Software แตทางผูพัฒนาเองก็ไดมีขอแนะนําเกี่ยวกับฟงกชันตาง ๆ ที่จําเปน เปนตนวา Interface จะตองสามารถรองรับการทํางานตาง ๆ ตาม concept ดังตอไปนี ้ 1) Allocate local resources for communication 2) Specify local and remote communication end-points 3) Initiate a connection (client side) 4) Wait for an incoming connection (server side) 5) Send or receive data 6) Determine when data arrives 7) Generate urgent data 8) Handle urgent data 9) Terminate a connection gracefully 10) Handle connection terminate from the remote site 11) Abort communication

Page 4: Network Protocols

6 12) Handle error condition or a connection abort 13) Release local resources when communication finishes

นอกจาก Concept ในการทํางานดังทีไ่ดกลาวมาแลวขางตน ทางผูพัฒนามาตรฐาน TCP/IP Protocol ไดสราง Conceptual Interface ขึ้นมาเพือ่เปนแนวทางใหนกัออกแบบระบบสามารถพัฒนาซอฟแวรของตนไดงายและเร็วข้ึน โดย Conceptual Interface ที่ทางผูพัฒนามาตรฐาน TCP/IP Protocol ไดสรางขึ้นนัน้จะอยูในรูปของ Set of Procedures and Functions เหตุที่ Conceptual Interface อยูในรูปแบบของ Procedures และ Functions นั้น เนื่องมาจากในชวงเวลาที่พัฒนา Conceptual Interface ระบบปฏิบัติการตาง ๆ ในยุคนั้นนยิมใชวิธีการซึ่งเรียกกันวา Procedural Mechanism ในการเคลื่อนยายการควบคุม จาก Application Software ไปยังระบบ ปฏิบัติการ ดังนั้นจึงอาจกลาวโดยสรุปเกีย่วกับ Conceptual Interface คือ Conceptual Interface ซ่ึงถูกกําหนดโดยผูพัฒนามาตรฐาน TCP/IP นั้นจะไมระบรูุปแบบของการแทนขอมูล หรือ รายละเอียดในการเขียนโปรแกรม หากแตแสดงเพยีงตัวอยางหนึ่งของการเชื่อมตอ ซ่ึงมีความเปนไปไดในทางปฏิบัติที่ระบบปฏิบัติการจะสามารถใหบริการแก Application Software ที่ตองการใชงาน TCP/IP Protocol 2.2.3 Socket Types

Sockets สามารถแบงออกเปนประเภทตามลักษณะการรับสงขอมูลผานเครือขายไดเปน 3 ประเภท ดังนี ้ 1) Stream Sockets หรือ Connection Oriented Sockets 2) Datagram Sockets หรือ Connectionless Sockets 3) Raw Sockets 2.2.4 Working with Sockets in .Net

ใน .Net การทํางานที่เกีย่วของกับ Sockets จะตองเรียกใชงาน Namespace ที่ช่ือวา System.Net.Sockets ซ่ึงเปน Namespace ที่บรรจุ Classes ตาง ๆ ที่สนับสนุนการทํางานกับ Sockets โดย Classes ที่เกี่ยวของกับการทํางานหลกั ๆ กับ Sockets มีดังนี้ 1) MulticastOption 2) NetworkStream 3) TcpClient 4) TcpListener 5) UdpClient 6) SocketException 7) Socket

Page 5: Network Protocols

7

โดย Class Socket จะมฟีงกชัน พื้นฐานตาง ๆ ที่จําเปนสําหรับการสราง Application

ซ่ึงใชงาน Sockets สําหรับ Properties ที่สําคัญสําหรับ System.Net.Sockets.Socket ไดแก 1) AddressFamily 2) Available 3) Blocking 4) Connected 5) LocalEndPoint 6) ProtocolType 7) RemoteEndPoint 8) SocketType Method ที่สําคัญของ System.Net.Sockets.Socket มีดังนี ้ 1) Accept ( ) 2) Bind ( ) 3) Close ( ) 4) Connect ( ) 5) GetSocketOption ( ) 6) IOControl ( ) 7) Listen ( ) 8) Receive ( ) 9) Poll ( ) 10) Select ( ) 11) Send ( ) 12) SetSocketOption ( ) 13) Shutdown ( ) 2.2.5 Working with Sockets 2.2.5.1 Passive Sockets

Passive Sockets หรือ Sockets ซ่ึงใชใน Server Application นั้นมีขั้นตอนการสรางดังนี้

Page 6: Network Protocols

8

รูป 2.2 Diagram ขั้นตอนการสราง Passive Sockets

2.2.5.2 Active Sockets

Active Sockets หรือ Socket ประเภททีใ่ชงานใน Client Application มีขั้นตอนการสรางดังนี ้

รูป 2.3 Diagram ขั้นตอนการสราง Active Sockets

2.3 Stream Sockets (Connection Oriented Socket) Stream Socket หรือ Connection Oriented Socket เปน Socket ที่ใช Protocol TCP ในการส่ือสารขอมูลโดยลักษณะการทํางานจะแยกออกเปน 2 ฝงคือ Server และ Client ซ่ึงขั้นตอนการเปด Socket ใน Application ของทั้ง 2 ฝงนั้นจะมีความแตกตางกัน

Page 7: Network Protocols

9

2.3.1 ขอควรระวังในการใชงาน Stream Socket ในการใชงาน Stream Socket หรือ Connection Oriented Socket นั้น มีขอควรระวัง

อยู 2 ประการ ไดแก 1) การจดัการ buffer ในโปรแกรมไมดีพอ (Improper buffer handling)

2) การจัดการขอมูลที่สงผานระหวางเครอืขายไมดีพอ (Improper message handling)

โดยขอควรระวังทั้ง 2 ขอดังกลาวนั้นสามารถแกไขไดโดยใชเทคนิคในการเขียนปรแกรมเขามาชวยได ดังนี้ 2.3.1.1 ปญหาดานการจัดการ Buffer

สําหรับ Buffer ในการทํางานกับ Stream Socket นั้นจะแบงเปน 2 สวน สวนแรกเปน Buffer ของระบบ (เปน Buffer ของ TCP Protocol) ซ่ึงเปน Buffer ที่จะรับเอาขอมูลซ่ึงสงผานโครงขายไวเพื่อรอโปรแกรมใชคาํสั่ง Receive() เพื่ออานออกไป สําหรับ Buffer ในสวนที่ 2 นั้นจะเปน Buffer ซ่ึงเกิดจากการที่นกัเขียนโปรแกรมสรางตัวแปรขึ้นมาเพื่อใหรองรับขอมูลที่อานจาก TCP Buffer โดยคําสั่ง Receive() ซ่ึงปญหา Improper Buffer Handling นั้นจะเกิดกบั Buffer สวนที่ 2 นี้นั่นเองโดยทั่วไปโครงสรางของ TCP Buffer นั้นจะมลัีกษณะดังนี ้

รูป 2.4 แบบจาํลอง TCP Buffer

สําหรับในฝงของ Server นั้น TCP Buffer จะมไีวเพื่อรองรับการ re-

transmit ในกรณีที่ Packet ที่สงไปนั้นเกดิการสูญหายไปในโครงขาย โดยขอมูลใน Buffer จะถูกลบออกไปก็ตอเมือ่ฝง Client ตอบกลับมาวาไดรับขอมูลนั้นแลวตามกลไกของ TCP Protocol สวน TCP Buffer ในฝงของ Client นั้นมีไวเพือ่รับเอาขอมูลที่สงมาทางโครงขายไวรอการนําออกไปใชงานโดยคําสั่ง Receive( )

Page 8: Network Protocols

10

ในการอานขอมูลจาก TCP Buffer โดยใชคําสั่ง Receive( ) นั้น ปริมาณของขอมูลซ่ึงอานในแตละครั้งจะขึ้นอยูกับ 2 ปจจัย ไดแก

1) ขนาดของ data buffer ซ่ึงใสเปน parameter ใหกับคําสั่ง Receive ( ) 2) ขนาดของตัวแปรซึ่งใชเปน data buffer ซ่ึงใสเปน parameter ใหกบั

คําสั่ง Receive ( ) ในกรณีของโปรแกรมตัวอยางทั้ง 2 โปรแกรมนั้นไดกําหนดตัวแปร

data ใหเปนแบบ byte array และมีขนาด 1024 ไบต และในการใชงานคําสั่ง Receive ( ) ในโปรแกรมตัวอยางทั้ง 2 นั้น parameter เดียวที่ใสใหกับคําสั่ง Receive ไดแก ตัวแปรซึง่ใชเปน data buffer ในที่นีค้ือตัวแปร data ดังนั้นในโปรแกรมตัวอยางทั้ง 2 อาจกลาวไดวาปริมาณในการอานขอมูลจาก TCP Buffer แตละครั้งจะมีขนาดมากที่สุดไมเกินครั้งละ 1024 ไบต หรือกค็ือ ขนาดของตัวแปรที่ใชเปน data buffer นั้นคือขนาด default ของการอานขอมูลจาก TCP Buffer โดยคําสั่ง Receive ( ) นั่นเอง

เมื่อขนาดของ Data buffer มีผลกระทบตอการอานขอมูลจาก TCP Buffer ในแตละครั้งดังที่กลาวมาแลวจะไดวาถาการกําหนดขนาดของ data buffer ไมเหมาะสมกจ็ะมีผลตอการทํางานของโปรแกรมได โดยในการกําหนดขนาดของ data buffer ไมเหมาะสมนั้นกลาวได 2 นัยคือ กาํหนดขนาดไวมากเกินไป และกําหนดขนาดไวนอยเกินไป 2.3.1.2 ปญหาดานการจัดการขอมูลท่ีสงผานระหวางเครอืขาย

ในการสื่อสารขอมูลระหวางเครือขายนั้นสิ่งที่อาจเกิดขึน้ไดคือ การสูญหายหรือความลาชาของขอมูลที่สงจากตนทางไปยังปลายทาง แมวา TCP Protocol นัน้จะรับประกนัในเรื่องของการสงขอมูลวาจะไมมีเร่ืองของขอมูลสูญหายระหวางการรบัสง หรือหากเกิดการสูญหายของขอมูลขึ้น ขอมูลชุดที่สูญหายนั้นกจ็ะถูกสงใหม (retransmit) แตทั้งนี้แมขอมลูจะไมสูญหายแต TCP Protocol นั้นเมื่อรับขอมูลเขาสู TCP Buffer แลวนั้นจะทําการเรียงลําดับขอมูล แลวรวมขอมูลที่รับมานั้นเขาดวยกัน (ในกรณีที่ขอมูลนั้นมีขนาดใหญแลวถูกแบงออกเปนสวน ๆ แลวทยอยสงมาทีละสวน) หรือในกรณีที่ขอมูลมีขนาดเล็กกจ็ะนาํขอมูลนั้นมาเก็บเรียงตอกนัไปภายใน TCP Buffer โดยไมมีการทําเครื่องหมายเพื่อระบุถึงขอบเขตของขอมลูแตละชุด

จะเหน็ไดวา TCP Protocol นั้นไมมีการปองกันขอบเขตของแตละชุดขอมูล (Unprotected Message Boundary) ดังนั้นในการเขียนโปรแกรมเพื่อส่ือสารขอมูลดวย TCP Protocol จึงตองออกแบบโปรแกรมใหสามารถรองรับปญหานี้ดวย สําหรับวิธีการแกปญหาดังกลาวนั้น โดยทั่วไปนิยมใชกันอยู 3 วิธี ไดแก 1) การจํากัดขนาดของแตละชุดขอมูลที่จะสงใหมีขนาดเทากนั 2) การสงขนาดของชุดขอมูลไปพรอมกันกบัชดุขอมูลนั้น 3) การใสสัญลักษณเพื่อบอกขอบเขตของขอมูลแตละชุด

Page 9: Network Protocols

11

ซ่ึงในแตละวิธีการที่ใชแกปญหานั้นก็มีทั้งขอดแีละขอเสียในตัวเอง ดังที่จะไดกลาวถึงตอไป

1) การจํากัดขนาดของแตละชดุขอมูลที่จะสงใหมีขนาดเทากัน เปน วิธีการแกปญหาที่งายที่สุด เพราะเมื่อขนาดของขอมูลที่สงแตละชุดมีขนาดเทากนั โปรแกรมจะทราบไดทันทวีาขอมูลมาครบแลวหรือยัง โดยการตรวจสอบขนาดของชุดขอมูลนั้นนั่นเอง นอกจากนี้แมชุดขอมลูมากกวา 1 ชุดมาถึงพรอม ๆ กันก็ยังสามารถแยกชดุขอมูลออกจากกนัไดโดยการนับจํานวนไบตในขอมูลที่รับเขามานั้นเทียบกับขนาดมาตรฐานของชุดขอมูลปกติ

2) การสงขนาดขอมูลไปพรอมกันกับชดุขอมูลนั้น จากหวัขอที่แลวการสงขอมูลดวยการจํากัดขนาดของขอมูลที่จะสงใหมีขนาดเทากัน ทกุ ๆ packet นั้นจะสามารถแกปญหาในเรื่องของ message boundaries ได แตขอเสียของวิธีการดังกลาวคือ ถาขอมูลที่จะสงนั้นมีขนาดที่ยาวมาก ก็จําเปนทีจ่ะตองแบงขอมูลนั้นออก เปนสวน ๆ ที่เทา ๆ กัน และทําการสงขอมูลออกไปครั้งละ 1 ชุด ซ่ึงการสงขอมูลออกไปหลาย ๆ ชุด แทนที่จะเปนชุดเดียวยาว ๆ เชนที่ยกตัวอยางมานี้จะมีผลใหเกิดการส้ินเปลือง bandwidth ของระบบสื่อสารโดยใชเหตุดวยเชนกัน เพื่อแกปญหานี้จึงไดมกีารคิดคนวิธีการที่จะใหสามารถสงชุดขอมูลที่มีขนาดตางกนัได แตการจะสงชุดขอมูลซ่ึงมีขนาดแตกตางกันไปไดนั้น ทางฝงรับจะตองทราบขนาดของชุดขอมูลที่จะสงไปดวย ซ่ึงก็สามารถกระทําไดโดยการสงขนาดของชุดขอมูลไปรวมไปกับชดุขอมูลที่จะสงนั้น ตัวอยางเชน 9message 1 เปนตน ในที่นี้ขนาดของชุดขอมูลที่จะสงไปดวยคือ 9 สําหรับตัวขอมูลคือ message 1 แตการใชตัวอักษรเพื่อบอกขนาด ถาชุดขอมูลมีขนาดใหญกต็องใชหลายไบตในการบอกขนาด (1 ตัวอักษรตอ 1 ไบต) เพื่อลดปริมาณขอมูลที่จะสง โดยทั่วไปจึงไมใชตวัอักษรในการบอกขนาดแตจะใชขอมูลชนิดไบตในการบอกขนาดแทนเชนถาใช 2 ไบตแรกของชุดขอมูล จะไดวาชดุขอมูลนั้นสามารถมีขนาดไดมากที่สุด 216 ไบต หรือ 64 กิโลไบตนัน่เอง

3) การใสสัญลักษณเพื่อบอกขอบเขตของขอมูลแตละชุด เปนวิธีการแกไขปญหาเกีย่วกับ Message boundaries วิธีสุดทาย เปนวิธีการแกปญหาโดยการใสสัญลักษณที่ไดกําหนดไวลวงหนาเพื่อบอกจุดสิ้นสุดของขอมูลแตละชุด เมื่อรับขอมูลเขามาโปรแกรมจะตองทํา

Page 10: Network Protocols

12

การตรวจขอมลูนั้นทีละตัวอักษรเพื่อหาสญัลักษณบอกจุดสิ้นสุด สําหรับวิธีการนี้จะมีขอดอยอยู 2 ประการคือ ตองกําหนดสัญลักษณที่ใชระบุขอบเขตของชุดขอมูลซ่ึงจะตองไมซํ้ากันกับขอมลูที่จะสง และการที่จะตองตรวจสอบขอมูลที่ไดรับเขามาทีละ 1 ตัวอักษรก็จะทําใหเกิด Overhead ขึ้น

ใน C# มี Classes ซ่ึงชวยในการทํางานในลักษณะของการใสสัญลักษณเพื่อบอกขอบเขตของขอมูล โดยทีน่กัเขียนโปรแกรมไมตองเขียน code เพื่อทําการตรวจสอบตัวอักษรทีละตัวเพื่อหาสัญลักษณ Classes ซ่ึงชวยทํางานดงักลาวไดแก Class ช่ือ NetworkStream ซ่ึงทําหนาที่เปนสวนเชื่อมตอกับ Socket, Class ช่ือ StreamReader และ StreamWriter ทําหนาที่อาน/เขียนขอมูลชนิด text ที่ไดจาก NetworkStream

2.4 Datagram Sockets (Connectionless Sockets) Connectionless Sockets เปน Socket ซ่ึงใชงานกับ UDP Protocol โดยที่การสงขอมูลโดยผาน Connectionless Socket/UDP นี้ไมจําเปนตองสรางเสนทางการเชื่อมตอเสมือน กลาวเมื่อตองการจะสงขอมูลโปรแกรมก็จะทําการสงขอมูลนั้นออกไปเลย โดยไมมีการตรวจสอบสถานะเสนทางไปยังฝงที่จะรับ ดังนั้นการสูญหายของขอมูลจึงอาจเกิดขึน้ได จากคุณลักษณะของ UDP ที่ไมรับประกันในเรื่องของขอมูลสูญหายระหวางทางและการเรียงลําดับของขอมูล ดังนัน้ในโปรแกรมทีใ่ชงานกับ Connectionless Socket/UDP จะตองมีสวนของโปรแกรมที่ใชจัดการเกีย่วกับปญหาดงักลาว จึงอาจกลาวไดวา Connectionless Socket นั้นหากมองในดานการรับและสงขอมูลสามารถทําไดงายและมีกระบวนการทีซั่บซอนนอยกวา Connection Oriented Socket เปนอยางมาก หากถามองดานการจดัการขอมูลซ่ึงไดรับเขามาแลวจะพบวาตองมีกระบวนการรองรับที่ซับซอนมากกวาการใชงาน Connection Oriented Socket เนื่องจากการจัดการเกี่ยวกับขอมูลที่รับเขามาหลาย ๆอยางไมมีการรองรับโดยตัว UDP Protocol 2.4.1 การสราง Connectionless Socket ในการสราง Connectionless Socket นั้นมีกระบวนการอยู 2 ขั้นตอนคือ 1) สราง Socket Object 2) Bind the socket to a local IPEndPoint

หลังจากเสร็จสิ้น 2 ขั้นตอนนีแ้ลว Socket ที่สรางขึ้นนั้นสามารถใชรับ-สงขอมูลไดทันที ซ่ึงจะพบวามีขั้นตอนนอยกวาการสราง Connection Oriented Socket และกระบวนการตางๆ ที่ใชเพื่อการเชือ่มตอโดย TCP นั้นไมมีความจําเปนเลยสําหรับการใชงาน UDP นอกจากนั้นสําหรับโปรแกรมทําการสื่อสารโดยใช Connectionless Socket และทําหนาที่เปนผูสงเพียงอยางเดียวนั้น

Page 11: Network Protocols

13 สามารถตัดขั้นตอนการ bind socket ออกไปได เพียงสราง Socket แลวสงขอมูลทาง Socket ที่สรางขึ้นไดเลย

จากที่กลาวมาเนื่องจากลักษณะการจัดการขอมูล/การเชื่อมตอที่แตกตางออกไปของ UDP คําสั่ง Send( ) และ Receive( ) จึงไมสามารถนํามาใชงานกับ Connectionless Socket ได หากแตตองใชคําสั่งที่ถูกสรางขึ้นเพื่อรองรับการเชื่อมตอชนิดนี้คือ SendTo( ) และ ReceiveFrom( ) 2.4.1.1 SendTo( )

เปน method ซ่ึงใชในการสงขอมลูไปยังเครื่องปลายทาง โดยการใช SendTo() นั้นสามารถใส parameter ไดในหลายลักษณะ ดังนี ้

1) SendTo(byte[] data, EndPoint Remote) เปนรูปแบบอยางงายของ SendTo() คือสงขอมูลในรูปแบบของ byte array ไปยังปลายทางซึ่งถูกระบุไวในตวัแปร Remote นัน่เอง

2) SendTo(byte[] data, SocketFlags Flags, EndPoint Remote) สําหรับรูปแบบนีจ้ะรับ parameter SocketFlags เพิ่มเขามา ซ่ึง

SocketFlags นี้จะใชเพื่อระบุ UDP Socket Option ที่จะเลือกใชงาน 3) SendTo(byte[] data, int Size, SocketFlags Flags, EndPoint Remote)

จะมีการระบุจํานวนไบตที่ตองการจะสงเพิ่มเขามา โดย จํานวนไบตที่ตองการจะสงนั้นจะระบุลงในตัวแปรชนิด integer ช่ือ Size

4) SendTo(byte[] data, int Offset, int Size, SocketFlags Flags, EndPoint Remote) สามารถระบุตําแหนง offset ใน byte array data เพื่อกําหนดตําแหนงทีจ่ะเริ่มทําการสงผานขอมูลผานตัวแปรชนดิ integer ช่ือ Offset นั่นเอง

2.4.1.2 ReceiveFrom( ) เปน Method ที่ใชสําหรับการรับขอมูล โดยจะรับ parameter 2 ตัวไดแก

byte array ที่ทําหนาที่เปน data buffer และ EndPoint ของเครื่องปลายทาง โดยมีรูปแบบของการใชงาน ReceiveFrom() เปนดังนี้ 1) ReceiveFrom(byte[] data, ref EndPoint Remote) มีขอสังเกตุที ่

parameter ตัวที่ 2 จะพบวาคาที่จะสงใหนัน้เปนแบบ reference กลาวคือส่ิงที่สงไปนั้นจะเปนเพียง address ตําแหนงที่เกบ็ EndPoint Object โดยที ่ReceiveFrom( ) นั้นจะทําการใสคา EndPoint ของฝายสงที่ตําแหนง address ที่สงมาเปนคา parameter ของ ReceiveFrom( )

2.4.2 การใชงาน Connect( ) รวมกับ Connectionless Socket ในบางครั้งโปรแกรมฝง client นั้นตองการติดตอกับ server เพียงเครื่องเดียว ดังนัน้

Page 12: Network Protocols

14 การที่จะตองระบ ุEndPoint ของเครื่องปลายทางในทกุ ๆ คร้ังที่สงขอมูล หรือการที่จะตองเตรยีมตัวแปรไวรองรับคา EndPoint ฝงสงเพื่อใชกบัคําสั่ง ReceiveFrom( ) นั้นคอนขางจะเปนสิ่งที่ไมจําเปน

ใน C# เมื่อตองการใชงาน Connectionless Socket โดยใชรับ – สงขอมูลกับเครื่องปลายทางเพียงเครื่องเดียวนั้น สามารถใชคําสั่ง Connect( ) เขามาชวยได ซ่ึงจะทําใหการทํางานตางๆ ลดความยุงยากลง

2.4.3 ขอดอยของ Connectionless Sockets เมื่อเปรียบเทียบ Connectionless Sockets กับ Connection Oriented Sockets (UDP

vs. TCP) จะไดวา Connectionless Sockets นั้นมีขอดอยกวาดังตอไปนี ้ 1) Lack of Handshaking Signals 2) No Support for sessions 3) No guarantee of sequenced data delivery 4) Reduced security 5) Lack of flow control 2.4.4 ขอดีของ Connectionless Sockets

โดยขอกําหนดของ UDP ให message ทุก message ที่รับเขามานั้นไมสูญเสียขอบเขตของตัว message ดังเชนที่เกดิขึ้นใน TCP (สวนหนึ่งเนื่องจาก UDP ไมตองมี Buffer ในการรับสงและ Socket แบบ Connectionless นี้เมื่อถูกสรางขึ้นมาแลวสามารถรับขอมูลจากเครื่องใดก็ได ดังนั้นลักษณะเฉพาะของตัว UDP Packet เองจะตองบงบอกถึงผูสงและขอบเขตของ message นั้น) โดยความสามารถในการระบุขอบเขตของ message นี้สามารถทดลองไดโดยเรยีกใชงานตัวอยางโปรแกรม 4.5 และ 4.6 แลวสังเกตผลที่ได นอกจากนี ้UDP ยังมีขอดีทีเ่หนือกวา TCP ในเรื่องตางๆ ดังนี ้เมื่อใช Connect( ) จะทาํใหสามารถใชคําสั่ง Send( ) และ Receive( ) ไดอีกดวยโดยที่การส่ือสารตาง ๆ จะยงัคงใช UDP Packet เชนเดิม การใชงาน Connect( ) 1) Low overhead requirements 2) Speed 3) Topology Support 4) Smaller header size 2.4.5 ขอควรระวังในการใชงาน Connectionless Socket ในการใชงาน Connectionless Socket มีขอพึงระวังอยู 2 ขอดวยกนัคือ

1) การสูญหายของขอมูลเนื่องจากขอจํากัดบางประการของ method ช่ือ ReceiveFrom( )

2) Detecting and allowing for lost packets

Page 13: Network Protocols

15

ซ่ึงขอพึงระวังดังกลาวหากในการเขยีนโปรแกรมเพื่อส่ือสารขอมูลผาน Connectionless Socket แลวไมมีการระวัง (aware) ที่ดีพอ ก็อาจทําใหเกิดการทํางานของโปรแกรมที่ผิดเพี้ยนไปจากวัตถุประสงคที่ตั้งไวได 2.4.5.1 การปองกันขอมูลสูญหาย

ในโปรแกรมจะเปนการกําหนด Read Buffer โดยกําหนดเปน byte array หากขอมูลที่รับเขามาทาง socket มีขนาดนอยกวาหรือเทากับขนาดที่กาํหนด โปรแกรมก็จะทํางานไดอยางราบรืน่ หากขอมูลทีรั่บเขามาทาง socket นั้นมีขนาดใหญขนาดที่กําหนด ส่ิงที่เกิดขึ้นคือ Exception Error ซ่ึง Exception Error ดังกลาวจะเกิดเมื่อคําสั่ง ReceiveFrom() ทําการอานขอมูลเขามาไวใน Read Buffer แลวปรากฏวาไมสามารถอานขอมูลทั้งหมดมาใสไวใน Read Buffer ได กลาวคือยังมีขอมูลคางอยูที่ไมสามารถนํามาไดนั่นเอง ReceiveFrom() กจ็ะทําการเตือนระบบเพื่อใหรับทราบถึงสถานการณดังกลาว และเนื่องจาก UDP ไมมี Buffer แบบ TCP ดังนั้นขอมูลใดซ่ึงอานออกมาไมหมดก็จะหายไป ดังนั้นเมือ่มีการตรวจพบการสูญหายในลักษณะดังกลาวจึงตองใหอีกฝงที่สงขอมูลมาทําการสงขอมูลใหมเทานั้น

สําหรับปญหาในเรือ่งของ Exception Error นั้นสามารถแกไขไดโดยการนําเอา Try…catch มาประยกุตใชงาน นอกจากการทํา Try…Catch แลว เมื่อเกดิ Exception (Buffer Overflow) ขึ้นจะทําการเพิ่มขนาด buffer ใหใหญขึ้นไปอกี 10 bytes โดยอัตโนมัต ิซ่ึงจะสามารถทําไดโดยการกําหนดขนาดของ byte array ใหอยูในรูปของตัวแปร i 2.4.5.2 การปองกัน Packets Lost

ปญหาหลักอยางหนึง่ของการทาํงานกับ Connectionless Socket ก็คือการการสูญหายของขอมูลที่สงไปบนเน็ตเวิรค ทั้งนี้เนื่องการการสงขอมูลนั้นไมมีการสราง virtual connection ทําใหไมสามารถทราบไดวา packet นั้นสงถึงปลายทางแลวหรือไม ดังนัน้จึงไดมีการคิดคนวิธีการเพื่อชดเชยขอดอย/แกปญหาของ UDP ในสวนนี้ขึน้ 1) การใช Sockets Time-outs สําหรับโปรแกรมบางลักษณะซึ่งการสูญ

หายของ Packet มีผลกระทบตอโปรแกรมนั้นเปนอยางมาก จึงมีการออกแบบวิถีการทํางานของโปรแกรมเพื่อแกปญหาดงักลาว โดยการสรางกระบวนการรับสงให เปนไปในลกัษณะทีว่า เมื่อมีการสงขอมูลออกไป หากเครื่องปลายทางไดรับขอมูลนั้นแลวจะทําการสราง packet เพื่อตอบรับกลับมา (Acknowledge) หากไมมีการตอบกลับมาในชวงเวลาทีก่ําหนดก็จะทาํการสงขอมูลนั้นซ้ําอีกครั้งหนึ่ง โดยการจะทําเชนนั้นมีขัน้ตอนดังนี ้

2) กําหนดคา time-outs ใหกับ Socket ที่สรางขึ้นดังนี ้SetSocketOption (Socket-OptionLevel.Socket,SocketOptionName.ReceiveTimeout,

Page 14: Network Protocols

16

1234) โดย parameter ตัวแรกจะบงบอกถึงชนิดของ Socket Option ที่ตองการทํางานดวย สําหรับ parameter ตัวที่ 2 SocketOptionName จะใชสําหรับระบุ Option ที่ตองการจะกาํหนดคา และสุดทายตัวเลขจะเปนคาที่กําหนดใหสําหรับ Option นั้น ๆ ซ่ึงในบรรทัดขางตนก็จะเปนการกําหนดคา Time Out ใหกับ Socket นัน่เอง การทํางานที่เกิดขึน้เมือ่มีการกําหนด time-outs ใหกบั Socket คือ เมื่อมีการเรียกใชงาน ReceiveFrom() โปรแกรมจะรอรับขอมูลเปนเวลา (หนวยเปนมิลลิวินาที)ตามที่กําหนดไวใน SetSocketOption( ) ขางตน หาก ReceiveFrom( ) ไมไดรับขอมูลภายในเวลาดังกลาว จะมกีารสราง Exception ขึ้น

3) การรอรับคา Exception จากหวัขอที่ผานมาเมื่อมี Exception เกิดขึ้น ยอมแสดงถึงเหตุการณ Time-Outs ของ Socket ดังนั้นจงึตองมีการตั้ง Try…Catch ขึ้นมาเพื่อรอรับ Exception ที่จะเกดิขึ้น

4) Retransmission เมื่อสามารถตรวจจับการสูญหายของขอมูลไดโดยการตั้งคา Time-Outs และ Catch Exception ซ่ึงเกิดจากการ time-outs ไดก็อาจสราง method ขึ้นมาเพื่อ retransmission ซ่ึงสูญหายนั้นอกีครั้งนอกจากนั้นหาก Retransmission แลวยังเกดิ Time-Outs หรือ Error อีกก็จะทําการ Retry อีกทั้งหมด 4 คร้ัง โดย e.ErrorCode ที่เกิดขึ้นจาก Exception นั้นที่สําคัญมีดังนี้

ตาราง 2.1 e.ErrorCode ท่ีสําคัญ

Error Code Description Error Code Description 10013 Permission Denied 10042 Bad protocol option 10014 Bad Address 10043 Protocol not support 10022 Invalid Argument 10048 Address already in used 10024 Too many open socket 10050 Network is down 10035 Resource temp. unavailable 10051 Network is unreachable 10036 Operation now in progress 10054 Connection reset by peer 10038 Socket op. on a non Socket 10056 Soc. is already connected 10039 Destination Address Require 10057 Socket is not connected 10040 Message too long 10064 Host is down 10041 Protocol wrong type 11001 Host not found

Page 15: Network Protocols

17

2.5 ระบบปฏิบัติการ (Operating System: OS) ) แนะนําใหรูจักคําวาระบบปฏิบัติการ และระบบอื่น ๆ ที่เกี่ยวของ เพื่อใหเห็นเนื้อหาโดยรวม สําหรับความหมายของระบบปฏิบัติการในเบื้องตน คือ โปรแกรม ที่จดัการคอมพิวเตอรฮารดแวร โดยทําหนาที่ใหการสนับสนนุการประมวลผลในเบื้องตน และทําหนาทีอํ่านวยความสะดวกใหผูใช และคอมพิวเตอรฮารดแวรทาํงานดวยกนั อยางราบรื่น จากความหมายขางตน ทําใหทราบวาคอมพิวเตอรทกุเครื่องตองมีระบบปฏิบัติการ ซ่ึงเปนสวนประกอบสําคัญอีกสวนหนึ่ง โดยปกติคอมพิวเตอรจะมีสวนประกอบสําคัญแยกกันได 4 สวนคือ 1) ฮารดแวร ประกอบดวยทรัพยากรตางๆ ที่มีในระบบ ไดแก อุปกรณนําขอมูลเขา/ออก หนวย

ประมวลผลกลาง และหนวยความจํา นอกจากนี้ยังหมายความรวมถึง โปรแกรมภาษาเครื่อง และไมโครโปรแกรม ซ่ึงเปนสวนที่บริษทัผูผลิตสรางขึ้นเพื่อใชเปนซอฟรแวรในระดับพื้นฐาน (primitive level) โดยสามารถทํางานไดโดยตรงกับทรัพยากรระบบดวยคําสั่งงายๆ เชน ADD MOVE หรือ JUMP คําสั่งเหลานี้จะถูกกําหนดเปนขัน้ตอน การทํางานของวงจรภายในเครื่องคอมพิวเตอร ชุดคําสั่งที่ไมโครโปรแกรมตองแปลหรือตีความหมายจะอยูใน รูปแบบภาษาเครื่องและมักเปนคําสั่งในการคํานวณ เปรียบเทียบ และการควบคุมอุปกรณนําขอมูลเขา/ออก

2) ระบบปฏิบัติการ เปนโปรแกรมทีท่ํางานเปนตวักลางระหวางผูใชเครื่องและฮารดแวร โดยมีวัตถุประสงคเพื่อจดัสภาพแวดลอมใหผูใชระบบสามารถปฏิบัติงานบนเครื่องคอมพิวเตอรได โดยจะเอื้ออํานวยการพฒันาและการใชโปรแกรมตางๆ รวมถึงการจัดสรรทรัพยากรตางๆ ใหไดอยางมีประสิทธิภาพ

3) โปรแกรมประยุกต ซอฟแวรหรือโปรแกรมที่ถูกเขียนขึน้เพื่อการทํางานเฉพาะอยางทีเ่ราตองการ เชน งานสวนตวั งานทางดานธุรกจิ งานทางดานวิทยาศาสตร โปรแกรมทางธุรกิจ เกมสตางๆ ระบบฐานขอมูล ตลอดจนตัวแปลภาษา เราอาจเรียกโปรแกรมประเภทนีว้า User's Program โปรแกรมประเภทนี้โดยสวนใหญมักใชภาษาระดับสูงในการพัฒนา เชนภาษา C, C++, COBOL, PASCAL, BASIC ฯลฯ ตัวอยางของโปรแกรมที่พัฒนาขึ้นใชในทางธุรกิจ เชน โปรแกรมระบบบัญชีจายเงินเดือน (Payroll Program) โปรแกรมระบบเชาซื้อ (Hire Purchase) โปรแกรมระบบสนิคาคงหลัง (Stock Program) ฯลฯ ซ่ึงแตละโปรแกรมก็จะมีเงื่อนไขหรือแบบฟอรมที่แตกตางกัน ตามความตองการหรือกฏเกณฑของแตละหนวยงานที่ใช ซ่ึงโปรแกรมประเภทนี้เราสามารถดัดแปลงแกไขเพิ่มเติม (Modifications) ในบางสวนของโปรแกรมเองได เพื่อใหตรงกับความตองการของผูใชงานโปรแกรม โปรแกรมเหลานี้เปนตัวกาํหนดแนวทางในการใชทรัพยากรระบบ เพื่อทํางานตางๆ ใหแกผูใชหลากหลายประเภท ซ่ึงอาจเปนไดทั้งบุคคล โปรแกรม หรือเครื่องคอมพิวเตอร เชนตัวแปรภาษาตองใชทรัพยากรระบบในการแปลโปรแกรมภาษาระดบัสูง

Page 16: Network Protocols

18

ใหเปนภาษาเครื่องแกโปรแกรมเมอร ดังนัน้ ระบบปฏิบัติการตองควบคุมและประสานงานในการใชทรัพยากรระบบของผูใชใหเปนไปอยางถูกตอง

4) ผูใช ถึงแมวาระบบคอมพิวเตอรจะประกอบดวยองคประกอบทั้งทางดานฮารดแวรและซอฟแวร แตระบบคอมพิวเตอรจะไมสามารถทํางานไดถาขาดอีกองคประกอบหนึ่ง ซ่ึงไดแก องคประกอบทางดานบุคลากรที่จะเปนผูจัดการและควบคุมระบบคอมพิวเตอรใหสามารถปฏิบัติงานไดอยางราบรื่น คอยแกไขปญหาตาง ๆ ที่เกิดขึ้นกบัระบบคอมพิวเตอร พัฒนาโปรแกรมประยุกตตาง ๆ รวมไปถึงการใชงานโปรแกรมประยกุตที่ถูกพัฒนาขึน้

นิยามเกีย่วกับระบบปฏบิัติการ ไดมีผูใหนยิามไวดังนี้ 1) Andrew S. Tanenbaum : An operating system as an extended machine. 2) Milan Milenkovic : An operating system is an organized collection of software extensions

of hardware, consisting of control routines for operating a computer and for providing an environment for execution of programs.

3) H. M. Deitel : Operating systems are primarily resource managers; the main resource they manage is computer hardware in the form of processors, storage, input/output devices, communication devices and data. Operating systems perform many functions such as implementing the user interface, sharing hardware among users, allowing users to share data among themselves, preventing users from interfering with one another, scheduling resources among users, facilitating input/output, recovering from errors, accounting for resource usage, facilitating parallel operations, organizing data for secure and rapid access, and handling network communications.

4) A. Silberschatz , J. Peterson and P. Galvin : An operating system is a program that acts as an intermediary between a user of a computer and the computer hardware.

5) William S. Davis : The operating system is a set of software routines that sits between the application program and hardware. Because the operating system serves as a hardware/software interface, application programmers and users rarely communicate directly with the hardware.

6) ดร. ยรรยง เต็งอํานวย : วิธีการปฏิบัติหรือดําเนนิงานที่ซับซอนซึ่งไดรับการรวบรวมเปนแบบแผนเดียวกัน กลุมโปรแกรมซึ่งไดรับการจัดระเบียบใหเปนสวนเชื่อมโยงระหวางเครื่องและผูใช โดยจะเอื้ออํานวยการพัฒนาและการใชโปรแกรมตางๆ รวมถึงการจัดสรรทรัพยากรตางๆ ใหมีประสิทธิผลที่ดี

Page 17: Network Protocols

19 7) มงคล อัศวโกวิทกรณ : โปรแกรมที่ชวยจัดการใหการรันโปรแกรมเสร็จสิ้นสมบูรณและควบคุมการทํางานของเครื่อง กลุมโปรแกรมงานที่มีความสามารถสูง เชน ชวยในการแบงปนการใชทรัพยากรตางๆ ในระบบ และควบคุมจังหวะการทํางานของโปรแกรมที่กําลังรันอยูเพื่อมิใหเกิดขอผิดพลาดและรวมถึงควบคุม System Software

2.5.1 หนาท่ีของระบบปฏิบตัิการ 2.5.1.1 การติดตอกับผูใช หรือยูเซอรอินเทอรเฟซ (User interface)

ผูใชสามารถสั่งใหคอมพิวเตอรทํางาน จึงเปนหนาที่ของระบบปฏิบัติการในเปนตวักลาง และเตรียมสภาพแวดลอมตาง ๆ ใหกับผูใชในการสั่งงานคอมพิวเตอร หลังจากนั้นจะใชคําสั่งผานทาง System call เพื่อปฏิบัติส่ิงที่ผูใชตองการ ใชสามารถติดตอหรือควบคมุการทํางานของเครื่องคอมพิวเตอรผานทางระบบปฏิบัติการได โดยระบบปฏิบัติการจะเครื่องหมายพรอมต (prompt) ออกทางจอภาพเพื่อรอรับคําสั่งจากผูใชโดยตรง ตัวระบบปฏิบตัิการจึงเปนตวักลางที่ทําหนาที่เชื่อมโยงระหวางผูใชกบัฮารดแวรของเครื่อง นอกจากนี้ผูใชอาจเขียนโปรแกรมเพื่อใชงานกรณนีี้ผูใชก็สามารถติดตอกับระบบปฏิบัติการไดโดยผานทาง System Call

2.5.1.2 ควบุคมดูแลอุปกรณ (Control devices) ระบบปฏิบัติการมีหนาที่ควบคุมอุปกรณตาง ๆ ใหทํางานสอดคลองกับ

ความตองการ โดยไมเกิดขอผิดพลาด เชนการควบคุมดสิก จอภาพ หรือซีดีรอม เปนตน ระบบปฏิบัติการจะรับคําสั่งจากผูใช และเรียกใช System call ขึ้นมาทํางาน ใหไดผลตามตองการ ใหความสะดวกแกผูใชในการใชงานอุปกรณตางๆ ไดงาย เชน การเขาถึงขอมูลในแฟมหรือติดตอกับอุปกรณรับ/แสดงผลขอมูล จึงทําใหผูพฒันาโปรแกรมไมจําเปนตองเขียนโปรแกรมเพื่อควบคุมตัวขับดิสกเพราะระบบปฏิบตัิการจัดบริการใหมีคําสั่งสําหรับติดตอกับอุปกรณเหลานี้ไดอยางงายๆเนื่องจากผูใชเครื่องคอมพิวเตอรผานทางระบบปฏิบัติการ อาจไมมีความจําเปนตองมคีวามรูความเขาใจถึงหลักการทํางานภายในของเ คร่ือง ดังนั้น ระบบปฏิบัติการจึงมีหนาที่ควบคุมการทํางานของโปรแกรม การทํางานของอุปกรณตางๆ เพื่อใหการทํางานของระบบเปนไปอยางถูกตองและสอดคลองกัน ระบบปฏิบัติการจึงมีสวนประกอบของหนาที่ตางๆ ที่ควบคุมอุปกรณแตละชนิดที่มีหนาที่แตกตางกันไป โดยผูใชอาจเรียกใชผานทาง System Call หรือเขียนโปรแกรมขึ้นมาควบคุมอุปกรณเหลานั้น

2.5.1.3 จัดสรรทรัพยากร หรือรีซอรสระบบ (Resources management) เพราะทรัพยากรของระบบมีจํากัด และมีหลายประเภท ระบบปฏิบัติการ

ตองบริการใหผูใช ไดใชทรัพยากรตาง ๆ ใหเปนไปอยางตอเนื่อง ตัวอยางทรัพยากรที่ระบบ ปฏิบัติการตองจัดการ เชน ซีพียู หนวยความจํา ซีดีรอม เครื่องพิมพ เปนตน ทรัพยากรหลักที่ตองมีการจัดสรร ไดแก หนวยประมวลผลกลาง หนวยความจําหลัก อุปกรณรับ/แสดงผลขอมูล และ

Page 18: Network Protocols

20 แฟมขอมูล เชน การจัดลําดบัใหบริการใชเครื่องพิมพการสับหลีกงานหลายงานในหนวยความจําหลักและการจดัสรรหนวยความจําหลักใหกับโปรแกรมทั้งหลาย ทรัพยากร คือส่ิงที่ซ่ึงถูกใชไปเพื่อใหโปรแกรมดําเนินไป 2.5.2 องคประกอบของระบบปฏิบตัิการ

1) การจดัการโปรเซส (Process management) 2) การจดัการหนวยความจํา (Memory management) 3) การจดัการสื่อจัดเกบ็ขอมูล (Storage managment) 4) การจดัการอินพุต / เอาตพุต (I/O system management) 5) การจดัการไฟล (File management) 6) เน็ตเวิรค (Networking) 7) ระบบปองกัน (Protection system) 8) ระบบตัวแปลคําสั่ง (Command-interpreter system) 2.5.3 วิวัฒนาการของระบบปฏิบตัิการ 1) ยุคแรก (ค.ศ.1945 - 1954) ใชหลอดสูญญากาศ ยงัไมมี OS และใช CARD I/O

รับ-สงขอมูล 2) ยุคที่ 2 (ค.ศ.1955 - 1964) ใชทรานซิสเตอร เปน Mainframe เร่ิมใช Fortran,

Cobol โดยใช Batch processing ควบคุม 3) ยุคที่ 3 (ค.ศ.1965 - 1979) ใช IC(Integrated circuit) เร่ิมใช Basic, Pascal เร่ิมใช

Multiprogramming และ time sharing 4) ยคุที่ 4 (ค.ศ.1980 - ปจจุบัน) ใช Multi-mode และ Virtual machine เร่ิมสื่อสาร

ระหวางเครือขาย (Internet) 2.5.4 โครงสรางระบบปฏิบตัิการ

เนื่องจากหนาที่ความรับผิดชอบของระบบปฏิบัติการในการควบคุมดูแลการทํางานของระบบเครื่องคอมพิวเตอรมีมากมาย จึงทําใหโครงสรางทางโปรแกรมของระบบปฏิบัติการมีความสลับซับซอนมาก เพื่อความสะดวกในการออกแบบผูออกแบบจงึจัดแบงระบบปฏิบัติการออกเปนสวนยอยๆ หลายๆ สวน แตละสวนมีหนาที่รับผิดชอบการทํางานในแตละดานโดยไมคาบเกี่ยวกนัแตสัมพันธกัน เพื่อใหเขาใจถึงโครงสรางของระบบปฏิบัติการ เราจะแบงสวนการทํางานของระบบปฏิบัติการออกเปนชั้นๆ ตามลําดับของการทํางานที่มีความเกี่ยวของกับฮารดแวรและผูใชจากมากไปนอย

Page 19: Network Protocols

21

2.5.4.1 องคประกอบของระบบ หรือคอมโพแนนตของระบบ ระบบแบงงานออกเปนสวนยอยตาง ๆ เรียกวา component เชน input,

output หรือ function ซ่ึงหนาที่ของระบบ คือจัดการสวนยอยตาง ๆ ใหทาํงานรวมกนัไดอยางมีประสิทธิภาพ ซ่ึงมีงานหลาย ๆ อยางที่ตองจัดการ ดังนี ้

1) การจัดการโปรเซส (Process management) 2) การจัดการหนวยความจํา (Memory management) 3) การจัดการสื่อจัดเก็บขอมูล (Storage managment) 4) การจัดการอินพุต / เอาตพุต (I/O system management) 5) การจัดการไฟล (File management) 6) เน็ตเวิรค (Networking) 7) ระบบปองกัน (Protection system) 8) ระบบตัวแปลคําสั่ง (Command-interpreter system)

2.5.4.2 เซอรวิสของระบบปฏิบัติการ (Operating system services) บริการพื้นฐานที่ระบบปฏิบัติการตองมีใหกับผูใช ที่นาสนใจมีดังนี ้

1) การเอ็กซิคิวตโปรแกรม 2) การปฏิบัติกับอินพุต/เอาตพตุ 3) การจดัการกับระบบไฟล 4) การติดตอส่ือสาร 5) การตรวจจับขอผิดพลาด

6) การแชรรีซอรส 7) การปองกนั

2.5.4.3 System calls ทําหนาที่ กําหนดอินเทอรเฟสระหวาง process กับ operating system เพื่อ

การควบคุม และจัดการระบบ โดยแบงออกเปน 5 กลุม 1) การควบคุมโปรเซส 2) การจัดการกับไฟล 3) การจัดการกับไฟล 4) การจัดการดีไวซ 5) การบํารุงรักษาขอมูล 6) การบํารุงรักษาขอมูล

Page 20: Network Protocols

22

2.5.4.4 ระดับชั้นของการทํางานของ OS ถามองระดับชั้นการทํางานของโปรแกรมตางๆ ในแงผูใชเราอาจแบงไดออกเปน 3 ระดับ คือ 1) โปรแกรมทั่วไปหรือผูใชเอง 2) ระบบปฏิบัติการ (OS) 3) ฮารดแวรของเครื่องคอมพิวเตอร ซ่ึงทั้ง 3 ระดับมีความสัมพันธกนัคือระบบปฏิบัติการจะเปนตัวเชื่อมโยงระหวางผูใชและฮารดแวรของเครื่องโดยทําหนาที่ติดตอและควบคุมการทํางานของฮารดแวร เพื่อใหโปรแกรมหรือคําสั่งของผูใชทํางานสําเร็จ ลุลวงไปไดดังแสดงในรูป 2.5

รูป 2.5 ระดับชั้นการทํางานของโปรแกรม

รูป 2.6 ความสัมพันธของโปรแกรมระบบปฏิบตัิการและฮารดแวร

ในรูป 2.6 เปนอีกรูปแบบหนึ่งของการแสดงความสัมพนัธของโปรแกรมระบบปฏิบัติการและฮารดแวรของเครื่อง ที่จะกลาวตอไปนี้เปนระดับชั้นภายในตวัระบบปฏิบัติการเทานั้น ซ่ึงจะใชรูปแบบการแสดงความสมัพันธของระดับชั้นตางๆ ในลักษณะเดียวกันกับรูป 2.6

ฮารดแวร ระบบปฏิบัติการ OS

Page 21: Network Protocols

23 ช้ันที่ 1 เปนระดับชั้นที่ต่ําที่สุดมช่ืีอเรียกวา เคอรเนล (kernel) เปนชั้นที่มีหนาที่รับผิดชอบงานตาง ๆ ของโปรเซสของระบบปฏิบัติการเทานั้น เคอรเนลประกอบดวยสวนยอย ๆ พืน้ฐาน 3 สวน คือ 1) ตัวสง (dispatcher) มีหนาที่จดัการสงโปรเซสเขาไปใหซีพีย ู

2) ตัวจดัการอินเตอรรัพตขั้นแรก (first-level interrupt handler) มีหนาที่ วิเคราะหการอนิเตอรรัพตที่ เกิดขึ้น และเลอืกใชรูทีนที่เหมาะสมกับอินเตอรรัพตนัน้ๆ

3) ตัวควบคุมมอนิเตอร (monitor control) มีหนาที่ควบคมุดูแลการเขามอนิเตอรตาง ๆ ของระบบ

การทํางานของสวนยอยทั้ง 3 ของเคอรเนลตองการความเร็วในการทํางานสูงมากเพราะเปนงานขั้นพืน้ฐานและมกีารทํางานบอยมาก ดังนั้น เคอรเนลมักจะถูกเขยีนขึ้นดวยภาษาแอสเซมบลี้ และเปนสวนที่ขึ้นอยูกับฮารดแวรของเครื่อง (hardware dependent) ดวย นั่นคือ ถาโครงสรางทางฮารดแวรของเครื่องมีการเปลี่ยนแปลง สวนของเคอรแนลตองถูกนาํมาแกไขใหมดวย เพื่อใหสามารถทํางานกับฮารดแวรช้ินใหมได นอกจากหนาทีพ่ื้นฐานทั้ง 3 แลว เคอรเนลยังมีหนาที่อ่ืนๆ อีก เชน จดัการเรื่องการเขาจังเหวะของโปรเซส (process synchronization) และการติดตอระหวางโปรเซส (process communication) รูป 2.7 แสดงความสมัพันธของเคอรเนลกับฮารดแวรของเครื่อง

รูป 2.7 ความสัมพันธของเคอรเนลและฮารดแวร

ช้ันที่ 2 ผูจัดการหนวยความจํา (memory manager) มีหนาที่จัดการเกี่ยวกับหนวยความจําของระบบ เชน การทําหนวยความจําเหมือนระบบหนา เปนตน เนื่องจากการจัดการหนวยความจําบางสวนตองยุงเกี่ยวกับโครงสรางทางฮารดแวรของเครื่อง ดังนั้น ในสวนของผูจัดการหนวยความจําจึงมีลักษณะขึ้นอยูกบัฮารดแวรดวยเชนเดียวกนั บางครั้งการทํางานในชัน้นี้ก็อาศัยรูทีนบางอยางของเคอรเนลดวย ตัวอยางเชน เคอรเนลตรวจสอบพบอินเตอรรัพตที่เกิดจากความผิดพลาดในการใชงานหนวยความจํา เคอรเนลจะเลอืกและสงงานที่เหมาะสมกบัการจัดการสัญญาณอินเตอรรัพตที่เกิดขึน้มาใหผูจดัการหนวยความจาํจัดการแกไข ในรูป 2.8 แสดงตําแหนงของผูจัดการหนวยความจํา

เคอรเนล

ฮารดแวร

Page 22: Network Protocols

24

รูป 2.8 ระดับชั้นท่ี 2 ของระบบปฏิบตัิการ

ช้ันที่ 3 ระบบ ควบคุมอินพุต-เอาตพุต (input-output control system) หรือ IOCS จะมีหนาที่จัดการงานทางดานอินพตุเอาพุตของระบบ ในชั้นนีย้ังคงมีลักษณะขึ้นอยูกับฮารดแวรอยูบาง เพราะการตดิตอกับอุปกรณอินพุต-เอาตพุตตองทราบโครงสรางและการทํางานของอุปกรณนัน้ๆดวย ซ่ึงสวนนี้เปนหนาทีข่องตัวขับอุปกรณ (device driver) นอกจากนี้ IOCS ยังตองอาศัยรูทีนบางอยางทั้งจากเคอรเนล และผูจัดการหนวยความจําในการทํางานของมันอีกดวย ตัวอยางเชน เคอรเนลจัดหารูทีนที่เหมาะสมกับการเกิดอินเตอรรัพตจากอุปกรณอินพุต-เอาตพุต ให IOCS ทํางานหรือ IOCS เรียกใชรูทนีผูจดัการหนวยความจําใหชวยหาเนื้อที่ในหนวยความจําเพื่อใชทําบัฟเฟอรของอุปกรณตางๆ รูป 2.9 แสดงระดับชั้นเมื่อเพิ่มชั้นของ IOCS เขาไป

รูป 2.9 ระดับชั้นท่ี 3 ของระบบปฏิบตัิการ

ระดบัชั้นที่ 1,2 และ 3 เปนสวนทีม่ีความสําคัญและมีการถูกเรียกใชงานบอยมาก ดังนัน้ผูสรางระบบ ปฏิบัติการสวนใหญจะเขยีนโปรแกรมในสวนนี้ดวยภาษาแอสเซมบลี้หรือภาษาที่สามารถเขาถึงระบบการทํางานของเครื่องได เชน ภาษา C เปนตน ทั้งนี้เพือ่ใหโปรแกรมทํางานไดรวดเร็วและมีประสิทธิภาพสูง สงผลใหประสิทธิภาพการทํางานของระบบดีขึ้น สวนการทํางานของชั้นตางๆ ตั้งแตระดับชั้นที่ 4 ขึ้นไปจะเรียกใชรูทนีตางๆ ของ 3 ระดับแรก และลดความขึ้นอยูกับฮารดแวรลงไปเรื่อยๆ เพราะสามารถติดตอกับฮารดแวรผานทาง 3 ระดับแรกได ช้ันที่ 4 ผูจัดการไฟล (file manager) มีหนาที่จดัการงานตางๆ ที่เกี่ยวกับไฟล เชน การเก็บไฟลลงดิสก การหาไฟล การอานของมูลของไฟล เปนตน ผูจัดการไฟลนี้สามารถถูกออกแบบใหไมขึ้นกับฮารดแวร (hardware independent) ผูจัดการไฟลจะจะติดตอกับฮารดแวร

Page 23: Network Protocols

25 โดยเรียกผานรทูีนตางๆของ เคอรเนล ผูจัดการหนวยความจําและ IOCS รูป 2.10 แสดงระดับชั้นของระบบปฏิบัติการเมื่อเพิม่ระดับชั้นของ ผูจัดการไฟลเขาไป การทํางานของผูจัดการไฟลไมจําเปนตองสนใจวาการตดิตอกับดิสกเกิดขึ้นอยางไร มีขั้นตอนเชนไร มันทราบเพียงแควาระบบมีรูทีนที่ทําหนาที่นี้ไวใหใชเรียบรอยแลวในระดับชั้นทีต่่าํกวา ลักษณะเชนนี้เปนลักษณะเดนและดขีองการแบงระบบปฏิบัติการ (หรือโปรแกรมอื่นๆ ทั่วไป) ออกเปนระดับชั้นตางๆ กลาวคือในแตละชั้นถูกกาํหนดใหมหีนาที่หรือรูทีนในการทํางานทีแ่นนอนและแตละชั้นก็รูวิธีการหรือรูปแบบการเรียกใชรูทีนในชั้นต่ํากวา และขณะเดยีวกันก็มีขอกําหนดของรูปแบบหรือวธีิที่ใหช้ันที่หนือกวาเรียกใชรูทีนในชั้นของมันได ตราบใดที่หนาที่ของรูทีนและขอกําหนดของการเรียกใชรูทีนระหวางชัน้ยังคงเหมือนเดิม การเปลี่ยนแปลงวิธีการทํางานของโปรแกรมภายในชั้นหนึ่งๆ จะไมมีผลกระทบตอการทํางานของชั้นอื่นๆ เลย ตัวอยางเชน ในกรณีของผูจัดการไฟลยังคงเก็บขอมูลเปนไฟล สมมติวาเราเปลี่ยนอุปกรณเก็บขอมูลจากดิสกเปนฮารดดิสก ช้ันของผูจัดการไฟลยังคงเก็บขอมูลเปนไฟลไดเชนเดมิไมเปลี่ยนแปลง แตวิธีการเก็บไฟลในสวนของชั้น IOCS ตองถูกแกไขใหทํางานได ถูกตองตามลักษณะโครงสรางของฮารดดิสก ดังรูป 2.10

รูป 2.10 ระดับชั้นท่ี 4 ของระบบปฏิบตัิการ

ช้ันที่ 5 ตัวคิวระยะสั้น (short-term scheduler) เปนระดับชัน้แรกที่มีลักษณะไมขึ้นอยูกับฮารดแวรโดยสมบูรณ มีหนาที่จัดคิวของโปรเซสในสถานะพรอม (ready state) เมื่อใดที่สวนนี้ทํางานมันจะคัดเลือกเอาโปรเซสที่เหมาะที่สุดในคิวของสถานะพรอม เพื่อใหโปรเซสนั้นเขาไปครอบครองซีพียูที่วางอยู โดยเรยีกใชตัวสงในสวนของเคอรเนล รูป 2.11 แสดงระดับชั้นของตัวจัดคดิระยะสั้น

Page 24: Network Protocols

26

รูป 2.11 ระดับชั้นท่ี 5 ของระบบปฏิบตัิการ อาจกลาวไดวาตวัจัดคดิระยะสัน้เปนสวนที่มหีนาที่จดัสรรซีพียู ซ่ึงเปนทรัพยากรประเภทหนี่งของระบบ ช้ันที่ 6 ผูจัดการทรัพยากร (resource manager) เปนระดับชัน้ของสวนที่หนาที่จดัสรรหาทรัพยากรอื่นๆในระบบ ดงัแสดงในรูป 2.12 บางครั้งตัวจัดควิระยะส้ันและผูจัดการทรัพยากรอยูสลับที่กัน (ดังแสดงในรูป2.13 ) ทั้งนี้เพราะหลังจากที่ตัวจดัคิวระยะส้ันสงโปรเซสเขาไปในสถานะรันแลว โปรเซสนั้นอาจตองการทรัพยากรอื่นๆ ในระบบ ดังนั้นจึงตองเรียกใชรูทนีในชั้นผูจัดการทรัพยากร

รูป 2.12 ระดับชั้นท่ี 6 ของระบบปฏิบตัิการ

รูป 2.13 การสลับชั้นของตัวจัดคิดระยะสั้นและผูจัดการทรัพยากร

Page 25: Network Protocols

27 ช้ันที่ 7 ตัวจัดควิระยะยาว (long-term scheduler) เปนชั้นของระบบปฏิบัติที่เร่ิมมีความใกลชิดกับผูใชและหางไกลกบัฮารดแวรของเครื่องมากขึ้น มีหนาทีจ่ัดการและควบคมุโปรเซสตางๆ ทั้งหมดในระบบเชนสรางโปรเซสตาง ๆ ใหมเขามาในระบบและยุติโปรเซสเมื่อโปรเซสทํางานเสร็จสิ้นลง การทํางานของตัวจัดควิระยะยาวตองใชรูทีนตางๆ ในชัน้ที่ 1 ถึง 6 ชวยในการทํางาน

รูป 2.14 ระดับชั้นท่ี 7 ของระบบปฏิบตัิการ ช้ันที่ 8 เชลล (shell) หรือผูแปลคําสั่ง (command interpreter) เปนชั้นสุดทายซึ่งเปนชั้นที่ใกลชิดกบัผูใชมากที่สุด มีหนาที่ตดิตอกับผูใชโดยตรง เชน สงเครื่องหมายพรอมต (prompt) แสดงออกทางจอภาพ รับคําสั่งตางๆ ของผูใชมาตีความคําสั่งและเรียกรูทีนตางๆของชั้นลางๆ เพื่อใหไดงานตามคําสั่งที่ไดรับ รูป 2.15 แสดงตําแหนงของผูแปลคําสั่ง แและรูป 2.16 แสดงระดับทัง้หมดของโปรแกรม

รูป 2.15 ระดับชั้นท่ี 8 ของระบบปฏิบตัิการ

Page 26: Network Protocols

28

รูป 2.16 ระดับชั้นตางๆ ของโปรแกรม

2.6 Window API 2.6.1 ความหมายของฟงกชนั Window API

คําวา API มาจากคําวา Application Programming Interface หมายถึง กลุมของไลบราลี่ (Library) ซ่ึงใชเปนสวนติดตอระหวางแอพพลิเคชั่น โดยที่เราจะสนใจเฉพาะกลุมฟงกชัน API ของ Windows เทานั้น นั่นคือ กลุมฟงกชัน Windows API คือ กลุมของฟงกชัน ที่มีนามสกลุ *.dll ที่เรียกวา Dynamic Link Library ซ่ึงเปนกลไกหลักของระบบปฏิบัติการ Windows ไมวาจะเปน Windows 9x หรือ Windows NT หรือแมกระทั่ง Windows 2000 กต็าม โดยปกตมิักจะอยูในโฟลเดอร c:\Windows\System กลาวคือ กลุมฟงกชัน Windows API ก็คือ แกนหลกัของระบบปฏิบัติการ Windows นั่นเอง เนื่องจากวา กลุมฟงกชัน Windows API ถูกเขียนขึน้มาดวยภาษา C ดังนั้น ชนิดของอารกิวเมนตในกลุมฟงกชัน Windows API สวนใหญ จึงไมสามารถถูกเรียกใชงานโดย Visual Basic ไดทั้งหมด เนื่องจากวา ชนิดของขอมูล มีโครงสรางที่ตางกัน จากเหตุผลดังกลาว ผูเขียนจึงไดแยกกลุมฟงกชัน Windows API ออกเปน 3 กลุมใหญ คอื 1) กลุมฟงกชัน Windows API ที่ Visual Basic ไมสามารถเรียกใชงานไดเลย ฟงกชัน

API กลุมนี้ จะไมมีการกลาวถึง 2) กลุมฟงกชัน Windows API ที่มีหนาทีเ่หมือนหรือคลายกับฟงกชันมาตรฐาน

คําสั่ง หรือแมกระทั่งคอนโทรลใน Visual Basic กลุมนีผู้เขียน จะมีการกลาวถึงบางพอสมควร

3) กลุมฟงกชัน Window API ที่ Visual Basic สามารถเรียกใชงานไดอยางสมบูรณ ซ่ึงเปนกลุมฟงกชัน Windows API ที่มีประโยชนในการเรียกใชงานดวย Visual

Page 27: Network Protocols

29

2.6.2 ทําไมตองเรียกใชงานกลุมฟงกชัน Windows API จุดประสงคหลักในการเรยีกใชงานกลุมฟงกชัน Windows API มีอยูดวยกัน 3 ประการใหญๆ คือ 1) ขยายขดีความสามารถของ Visual Basic ถึงแมวา VB จะมีการเพิ่มเตมิฟเจอร

ตางๆ เขามามากมายกจ็ริง แตเนื่องจากวา การเรียกใชงาน Windows API เปนการเรียกใชงาน กลไกหลักของระบบปฏิบัติการ Windows สงผลใหสามารถขยายขีดความสามารถของ Visual Basic ไดทัดเทียมในระดับหนึง่ กบัระบบปฏิบัติการ Windows กลาวคือ เมื่อระบบปฏิบัติการ Windows มีฟเจอรมากขึ้น ยอมสงผลใหตองมีการเพิ่มเติมความสามารถตางๆ เขาไปที่ไลบราลี่ ซ่ึงก็คือ การเพิ่มเติมความสามารถของกลุมฟงกชัน Windows API นั่นเอง

2) ลดขนาดของแอพพลิเคชัน่ จุดดอยประการหนึ่งของแอพพลิเคชั่นทีพ่ัฒนาดวย Visual Basic ก็คือ ขนาดของไฟลที่ได มักจะมีขนาดใหญเกินความจําเปน การเรียกใชงานกลุมฟงกชัน Windows API เปนอีกหนทางหนึ่ง ที่จะชวยลดขนาดของแอพพลิเคชั่นลงไปไดมากเลยทีเดยีว ซ่ึงในยุคปจจุบนั มีแนวความคิดหนึ่งที่กําลังไดรับความนิยม นัน่คือ แอพพลิเคชั่นที่มี source code ขนาดเล็ก แตเต็มไปดวยประสิทธิภาพ ซ่ึงโดยสวนใหญแลว จะเปนกลุมฟงกชัน Windows API ที่มีหนาที่เหมือน หรือคลายกับฟงกชัน หรือคอนโทรลมาตรฐานของ Visual Basic

3) ทําใหการประมวลผลโดยรวม รวดเรว็ข้ึน เหตทุี่ทําใหภาษา C มีการประมวลผลที่ รวดเร็วกวาภาษาอื่นๆ สวนหนึ่งมาจากการที่ภาษา C มีการเรียกใชงานไลบราลี่โดยตรงนั่นเอง อาจกลาวไดวา เรากําลังใชงาน Visual Basic ในลักษณะเชนเดยีวกับภาษา C โดยมีขอแตกตางก็คือ ภาษา C สามารถเรียกใชไดทุกฟงกชัน แต Visual Basic เรียกใชไดบางสวน

กอนการใชงานฟงกชัน API ใดๆ ก็ตาม คุณจะตองประกาศ (declare) รูปแบบฟงกชัน API เสมอ อาจจะประกาศในโมดลู หรือสวนประกาศของฟอรมก็ได ซ่ึง VB มีเครื่องมือที่ชวยคณุในสวนนี้ ที่เรียกวา API Text Viewer นอกจากการนํา API มาใชสราง Mashup แลว API ยังถูกใชงานอยางแพรหลายในวัตถุประสงคตางๆ เชน เวบ็ไซตดานอีคอมเมิรซสามารถนํา PayPal API มาผนวกไวในเว็บไซตของตัวเองเพื่อใชรับชําระเงินจากลูกคา หรือ Amazon มี API ที่เปดใหเจาของเว็บทัว่ไปสามารถนําสินคาที่ขายอยูบน Amazon ไปขายในเว็บไซตตัวเอง โดยเจาของเว็บจะไดรับคอมมิสชั่นเมื่อมียอดขายเกดิขึ้น เปนตน

2.6.3 ตัวอยางฟงกชนั Window API 2.6.3.1 เซิรฟเวอร

Remote Control มี 4 ฟงกชัน

Page 28: Network Protocols

30 1) FindWindow Function เปนการคนหา handle ของวินโดร ซ่ึงคลาส

และชื่อวนิโดรจะเหมือนกนักับสตริงที่ระบุเอาไว การคนหาฟงกชันนี้ไมไดเปนแบบ case-sensitive

Syntax HWND FindWindow(LPCTSTR lpClassName,LPCTSTR

lpWindowName); Parameters

lpClassName เปนพอยเตอรที่ช้ีไปยังชื่อคลาส ซ่ึงถูกสรางโดย previous call ไปยังฟงกชัน RegisterClass และ RegisterClassEx ถา lpClassName เปน NULL มันจะหาทุกๆหนาตางที่เขากนักับพารามิเตอรของ lpWindowName

lpWindowName เปนพอยเตอรที่ช้ีไปยังชื่อวนิโดร ถาพารามิเตอรนี้ เปน NULL ทุกๆชื่อวินโดรจะเขาคูกนั

Return Value ถาฟงกชันนี้สําเร็จ มันจะคืนคาที่เปน handle ของโดรที่มีช่ือคลาส

และชื่อวนิโดร ถาฟงกชันนีไ้มสําเร็จ มันจะคืนคา NULLและไดแสดงขอมูลสวนที่ผิดพลาด

2) ShowWindow Function เปนการตั้งคาแสดงสถานะของวินโดร Syntax

BOOL ShowWindow(HWND hWnd,int nCmdShow); Parameters

hWnd เปน handle ของวินโดร nCmdShow เปนการระบวุาจะใหวนิโดรถูกแสดงอยางไร

พารามิเตอรจะถูกละทิ้งในตอนแรก ถาโปรแกรมนี้ไดเร่ิมทํางาน จะมีโครงสรางของ STARTUPINFO เขามาทาํงาน มิฉะนัน้แลวตอนแรกของการทาํงานจะไปเรียก ShowWindow ทํางานแทน

Return Value ถาหนาตางกอนหนานี้สามารถมองเห็น มันจะคืนคาทีไ่มใชศูนย ถาหนาตาวกอนหนานี้ไมสามารถมองเห็น มันจะคนืคาศูนย

Page 29: Network Protocols

31 3) GetSystemMetrics Function เปนการคืนคาระบบเมตริกหรือติดตั้ง

โครงสรางระบบ Syntax

int WINAPI GetSystemMetrics(__in int nIndex); Parameters

nInde เปนระบบเมตริกที่จะถูกคืนคา โดยสังเกตวาการคืนคานั้นถา เปนคาจริง จะเปนคาที่ไมใชศูนย แตถาเปนคาเท็จ จะเปนคาศูนย

Return Value ถาฟงกชันทํางานสําเร็จ จะคนืคาที่ระบบตองการหรือคาที่ได กําหนด

ไว ถาฟงกชันทํางานไมสําเร็จ จะคืนคาศนูย 4) SetWindowPos Function จะทําการเปลี่ยนขนาด ตําแหนงของ

หนาตาง หนาตางเหลานี้จะถูกสั่งใหทําตามที่ปรากฎบนหนาจอ Syntax

BOOL SetWindowPos(HWND Wnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy,

UINT uFlags );

Parameters hWnd เปน handle ของวินโดร hWndInsertAfter เปน handle ของวินโดรที่มากอนตําแหนงวินโดร X เปนตําแหนงใหมทางดานซายของหนาตาง Y เปนตําแหนงใหมทางดานบนของหนาตาง cx เปนตําแหนงใหมทางดานกวางของหนาตาง cy เปนตําแหนงใหมทางดานสูงของหนาตาง uFlags ระบุขนาดของหนาตางและตําแหนงของตัวช้ี Return Value

ถาวินโดรกอนหนานี้สามารถมองเห็น มันจะคืนคาที่ไมใชศูนย ถาวินโดรกอนหนานี้ไมสามารถมองเห็น มันจะคืนคาศูนย

Page 30: Network Protocols

32

File Transfer มี 1 ฟงกชัน 1) SHGetFileInfo Function เปนการคืนคาขอมูลเกี่ยวกับวตัถุในระบบ

ไฟล อยางเชน โฟลเดอร ตําแหนงหรือไดรที่เปนรูท Syntax

DWORD_PTR SHGetFileInfo(LPCTSTR pszPath, DWORD dwFileAttributes, SHFILEINFO *psfi, UINT cbFileInfo, UINT uFlags ); Parameters pszPath เปนพอยเตอรที่ช้ีไปยังสตริงที่เปน MAX_PATH ที่ยาวที่สุด

โดยบรรจุพาธและชื่อไฟล ถาพารามิเตอร uFlags รวมเอาตัวช้ี SHGFT_PIDL พารามิเตอรนี้จะตองเปนแอดแดรสของ ITEMIDLIST ที่บรรจุเอารายการของที่เหมอืนกันไว

dwFileAttributes เปนการรวมกันหนึ่งหรือมากกวาของไฟล ถา uFlags ไมไดรวมเอา SHGFI_USEFILEATTRIBUTES flag พารามิเตอรนี้จะถูกละทิ้ง

psfi เปนแอดแดรสของโครงสราง SHFILEINFO ที่จะรับไฟลขอมูล cbFileInfo เปนขนาดของโครงสราง SHFILEINFO ที่ขึ้นกับ

พารามิเตอร psfi uFlags ตัวบงชี้รายละเอียดของไฟลขอมูลที่จะรับ โดยพารามิเตอรนี้

สามารถรวมกันเปนคาตางๆ Return Value การคืนคาจะขึ้นอยูกับตวัช้ีของพารามิเตอร ถา uFlags ไมไดบรรจุ SHGFI_EXETYPE หรือ

SHGFI_SYSICONINDEX จะคืนคาที่ไมเปนศูนย ถาทาํสําเร็จ ถา uFlags บรรจุ SHGFI_EXETYPE จะคืนคาที่เปนไฟลประมวลผล

Page 31: Network Protocols

33

2.6.3.2 ไคลเอนต Remote Control มี 5 ฟงกชัน 1) mouse_event Function เปนการรวมเขากนัระหวางการเคลื่อนไหวเมาส

กับการกดปุม Syntax

VOID mouse_event(DWORD dwFlags,DWORD dx, DWORD dy,

DWORD dwData, ULONG_PTR dwExtraInfo ); Parameters dwFlags ระบกุารเคลื่อนไหวของเมาสและการกดปุม พารามิเตอรนี้

สามารถถูกรวมกันกับคาอื่นๆได dx ตําแหนงของเมาสในแนวแกน x หรือเปนจํานวนการเคลื่อนที่ตั้งแต

การกระทําของเมาสคร้ังลาสุดที่ถูกสรางขึ้นมา แตวาจะขึ้นอยูกับการตั้งคาของ MOUSEEVENTF_ABSOLUTE

dy ตําแหนงของเมาสในแนวแกน y หรือเปนจํานวนการเคลื่อนที่ตั้งแตการกระทําของเมาสคร้ังลาสุดที่ถูกสรางขึ้นมา แตวาจะขึ้นอยูกับการตั้งคาของ MOUSEEVENTF_ABSOLUTE

dwData ถา dwFlags บรรจุ MOUSEEVENTF_WHEEL จากนั้น dwData ระบุจํานวนของการเคลื่อนไหน

dwExtraInfo เปนคาที่เกี่ยวของกับเหตกุารณของเมาส โดยแอพพลิเคชัน่จะเรียก GetMessageExtraInfo เพื่อที่จะบรรจุขอมูลพิเศษ

Return Value ฟงกชันนี้ไมมีการคนืคา 2) SetCursorPos Function การเคลื่อนที่ของเคอรเซอรในพิกดัของจอภาพ

ถาพิกัดใหมไมไดอยูในสี่เหล่ียมผืนผา ระบบจะปรับปรงุพิกัดเพื่อทีจ่ะใหเคอรเซอรอยูภายในสี่เหล่ียมผืนผา

Syntax BOOL SetCursorPos(int X,int Y);

Page 32: Network Protocols

34

Parameters x ระบุพิกัดแนวแกน x ใหม Y ระบุพิกัดแนวแกน Y ใหม Return Value

คืนคาไมใชศนูยในกรณีทีท่าํสําเร็จหรือถาเปนศูนยจะมีขอมูลผิดพลาด แสดง โดยไปเรียก GetLastError

3) GetCursorPos Function คืนคาตําแหนงของเคอรเซอรในพิกัดของจอภาพ

Syntax BOOL GetCursorPos(LPPOINT lpPoint);

Parameters IpPoint เปนพอยเตอรที่รับพิกัดจอภาพของเคอรเซอร Return Value

คืนคาไมใชศนูยในกรณีทีท่าํสําเร็จหรือถาเปนศูนยจะมีขอมูลผิดพลาดแสดง โดยไปเรียก GetLastError

4) keybd_event Function สรางการเคาะแปนพิมพ โดยระบบสามารถใชการแคนแปนพิมพที่จะสรางแมสเซส WM_KEYUP หรือ WM_KEYDOWN มี handler ของคียบอรดไปเรียกฟงกชัน keybd_event

Syntax VOID keybd_event(BYTE bVk,

BYTE bScan, DWORD dwFlags, PTR dwExtraInfo ); Parameters

bVk ระบุโคดเสมือน โดยโคดจะมีคาอยูระหวาง 1 ถึง 254 bScan ระบุโคดสแกนของคีย

dwFlags ระบลัุกษณะการทาํงานของฟงกชัน พารามิเตอรนี้สามารถ เปนไดมากกวาหนึ่งคา

dwExtraInfo ระบุคาที่เกี่ยวของกันกับการเคาะแปนพิมพ

Page 33: Network Protocols

35

Return Value ฟงกชันนี้ไมมีการคืนคา 5) VkKeyScan Function ทําการแปลงตัวอักษรตางๆใหไปเปนโคดเสมือน Syntax

SHORT VkKeyScan(TCHAR ch); Parameters ch ระบุตัวอักษรทีจ่ะถูกแปลงในโคดเสมือน Return Value

ถาฟงกชันนี้ทาํงานสําเร็จ ไบตที่เปน low-order ของการคืนคาจะบรรจ ุ โคดเสมือนและไบตที่เปน high-order บรรจุสถานะ ซ่ึงสามารถรวมกัน ตามบิตที่ไดบงชี้ไว ถาฟงกชันไมสามารถหาคียที่จะแปลงตัวอักษร ไบตเปน low-order และ high-order จะบรรจุเลข –1

การสนทนาระหวางเซิรฟเวอรและไคลเอนต มี 1 ฟงกชัน 1) FlashWindowEx Function กระพริบที่หนาตาง มันไมไดเปลี่ยนเปน

active state ของหนาตาง Syntax

BOOL WINAPI FlashWindowEx( __in PFLASHWINFO pfwi); Parameters pfwi เปนพอยเตอรโครงสรางของ FLASHWINFO Return Value

คาที่คืนออกมาจะเปนสถานะของหนาตางกอนที่จะถูกเรยีกฟงกชัน FlashWindowEx ถาสวนอธิบายของหนาตางเปนแอ็คทีฟ (active) กอนที่จะเรียก คาที่คืนออกมาจะไมเปนศูนย มิฉะนัน้แลวคาที่คนืออกมาจะเปนศูนย

จับเวลานับถอยหลัง มี 5 ฟงกชัน 1) CreateDesktop Function ทําการสรางเดสทอป (desktop) อันใหม ซ่ึง

จะเกี่ยวของกบั window station ของ calling process และกําหนดใหมันเพื่อที่จะเปน calling thread โดย calling process ตองมีความเกี่ยวของกับ window station

Syntax HDESK WINAPI CreateDesktop( __in LPCTSTR lpszDesktop,

Page 34: Network Protocols

36

__reserved LPCTSTR lpszDevice, __reserved DEVMODE *pDevmode,

__in DWORD dwFlags, __in ACCESS_MASK dwDesiredAccess, __in_opt LPSECURITY_ATTRIBUTES lpsa

); Parameters

lpszDesktop ช่ือของเดสทอป (desktop) ที่ถูกสรางขึ้นมา โดยช่ือเดสทอป (desktop) เปน case-insensitive และอาจจะไมใส backslash characters(\)

lpszDevice ตองเปน NULL pDevmode ตองเปน NULL dwFlags พารามิเตอรนี้สามารถเปนศูนยหรือคาตางๆได

dwDesiredAccess พารามิเตอรนี้ตองรวมเอา DESKTOP_CREATEWINDOW เพราะวา ภายใน CreateDesktop ใช handle ที่ไวสรางหนาตาง lpsa เปนพอยเตอรที่กําหนดคา handle ซ่ึงสามารถถูกสืบทอดโดยโพรเซสยอย ถา lpsa เปน NULL คา handle จะไมสามารถสืบทอดได

Return Value ถาฟงกชันทํางานสําเร็จ คาที่คืนออกมาจะเปน handle ที่สรางเดส

ทอป ที่มีอยูแลว ถาเปนการระบุเดสทอป ที่มีอยูแลว ฟงกชันจะสําเร็จและคืนคา

handle ของเดสทอป (desktop) ที่มีอยู เมือ่คุณไดทํางานเสร็จโดยทีใ่ช handle จะทําการเรียก CloseDesktop เพื่อที่จะปด handle

2) SetThreadDesktop Function มอบหมายใหเดสทอป ทําการ calling thread โดยทั้งหมดของการทํางานเดสทอป จะใชการอนุญาตไปยังเดสทอป

Syntax BOOL WINAPI SetThreadDesktop( __in HDESK hDesktop);

Page 35: Network Protocols

37

Parameters HDesktop โดยที่ handle จะถูกมอบหมายใหทําการ calling thread ซ่ึง handle นี้ถูกคืนคาโดยฟงกชัน CreateDesktop, GetThreadDesktop, OpenDesktop และ OpenInputDesktop

Return Value ถาฟงกชันทํางานสําเร็จ คาที่คืนจะไมใชศูนย ถาฟงกชันทํางานลมเหลว จะคืนคาเปนศูนย 3) GetThreadDesktop Function ทําการคืนคา handle ของเดสทอป )

มอบหมายใหระบุเทรด Syntax

HDESK WINAPI GetThreadDesktop( __in DWORD dwThreadId); Parameters

dwThreadId เปน handle ของเทรด โดยฟงกชัน GetCurrentThreadId และ CreateProcess จะคืนคาเฉพาะเทรด ออกมา

Return Value ถาฟงกชันทํางานสําเร็จ คาที่คืนจะเปน handle ของเดสทอป

ซ่ึงจะเกีย่วของกับการระบุเทรด โดยที่ไมตองไปเรียกฟงกชัน CloseDesktop เพื่อที่จะปดคาที่คืนของ handle

ถาฟงกชันทํางานลมเหลว คาทีค่ืนออกมาจะเปน NULL 4) GetCurrentThread Function คืนคา handle ของ calling thread Syntax

HANDLE WINAPI GetCurrentThread(void); Parameters ฟงกชันนี้ไมมีพารามิเตอร Return Value คาที่คืนออกมาเปน handle สําหรับเทรด ปจจุบนั 5) SwitchDesktop Function ทําการระบุเดสทอป ที่สามารถมองเห็น โดย

สามารถรับอินพุทจากผูใชได และการ calling process ตองมี DESKTOP_SWITCHDESKTOP ถึงจะทาํงานสําเร็จ

Page 36: Network Protocols

38

Syntax BOOL WINAPI SwitchDesktop(__in HDESK hDesktop);

Parameters hDesktop เปน handle ของเดสทอป โดยจะถูกคืนคาออกมาจากฟงกชัน

CreateDesktop และ OpenDesktop Return Value ถาฟงกชันทํางานสาํเร็จ คาที่คืนจะไมใชศนูย ถาฟงกชันทํางานลมเหลว จะคืนคาเปนศูนย การควบคุมการใชคียบอรดและเมาส มี 1 ฟงกชัน 1) BlockInput Function เปนการบล็อกคียบอรดและเมาสที่เขามา

จากแอพพลิเคชั่น Syntax

BOOL BlockInput(BOOL fBlockIt); Parameters

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

Return Value ถาฟงกชันทําสําเรจ็ จะคืนคาทีไ่มใชศูนย ถาอินพุทถูกบล็อกเรียบรอยแลว คาที่คืนจะเปนศูนย

การควบคมุการใชงานเวปไซต มี 5 ฟงกชัน 1) PfCreateInterface Function ทําการกําหนดคาเริ่มตนใหกับอินเตอรเฟส Syntax

public static extern int PfCreateInterface( int dwName, PFFORWARD_ACTION inAction, PFFORWARD_ACTION outAction, bool UseLog, bool MustBeUnique, ref IntPtr ppInterface);

Page 37: Network Protocols

39

2) PfBindInterfaceToIPAddress Function ทําการนําไอพแีอดแดรสมาติดตอกับอินเตอรเฟส

Syntax public static extern int PfBindInterfaceToIPAddress(

IntPtr Interface_handle, PFADDRESSTYPE pfatType, ref int ip_address );

3) PfAddFiltersToInterface Function กําหนดวาจะใหหมายเลขไอพีแอด แดรสอันไหนผานไดบาง

Syntax public static extern int PfAddFiltersToInterface( IntPtr interface_handle, int cInFilters, [MarshalAsAttribute(UnmanagedType.Struct)] ref PPF_FILTER_DESCRIPTOR pfiltIn, int cOutFilters, [MarshalAsAttribute(UnmanagedType.Struct)] ref PPF_FILTER_DESCRIPTOR pfiltOut, [MarshalAsAttribute(UnmanagedType.Struct)] ref PPF_FILTER_DESCRIPTOR pfHandle

); 4) PfDeleteInterface Function ทําการลบขอมูลทุกอยางทีอ่ยูใน

อินเตอรเฟส Syntax

public static extern int PfDeleteInterface( IntPtr pInterface );

Page 38: Network Protocols

40

5) PfRemoveFiltersFromInterface Function ทําการลบขอมูลที่ไดฟลเตอร เอาไวกอนหนานี ้

Syntax public static extern int PfRemoveFiltersFromInterface( IntPtrih, int cInFilters, [MarshalAsAttribute(UnmanagedType.Struct)] ref PPF_FILTER_DESCRIPTOR pfiltIn, int cOutFilters, [MarshalAsAttribute(UnmanagedType.Struct)] ref PPF_FILTER_DESCRIPTOR pfiltOut ); 2.6.4 ตัวอยางของเว็บไซตท่ีมี API 1) Amazon 2) Digg 3) eBay 4) Facebook 5) FedEx 6) Flickr 7) Google Maps 8) Hi5 9) Twitter 10) NokNok

2.7 ตัวอยาง Desktop Management ท่ีมีใชในปจจุบัน 2.7.1 Netop School 6 Netop School 6 เปนโปรแกรมระบบบริหารเครื่องคอมพิวเตอรที่ถูกออกแบบมาเพื่อรองรับการบริหารระบบคอมพิวเตอรภายในองคกรทุกขนาด ไมวาจะเปนองคกรขนาดเล็กที่มีเครื่องคอมพิวเตอรตัง้แต 50 เครื่องไปจนถึงองคกรขนาดใหญทีม่ีเครื่องคอมพิวเตอรหลายพนัเครื่อง โดยสามารถใชงานไดอยางงายดาย ดวยฟงกชันที่ใชงานที่หลากหลายและครอบคลุมการทํางานเพื่อการบริหารระบบสารสนเทศภายในองคกรไดอยางมีประสิทธิภาพ

Page 39: Network Protocols

41

โปรแกรมระบบบริหารเครื่องคอมพิวเตอร Netop School 6 มีการปรับปรุงและพัฒนาอยางตอเนื่อง เพื่อใหมั่นใจไดวา Netop School 6 สามารถใชงานไดอยางครอบคลุม ตรงตามความตองการของทุกองคกรในการบริหารงานระบบคอมพิวเตอร เพื่อประสิทธิภาพสูงสุดในการใชงานโปรแกรมระบบบริหารเครื่องคอมพิวเตอรอยางแทจริง คุณลักษณะของ Netop School 6 1) การควบคุมเครื่องลูกขายระยะไกล 2) สรางแผนผังที่นั่งเรียนแบบจําลองสําหรับหองเรียนได 3) ดูหนาจอผูเรียนแบบภาพเล็ก (thumbnails)ได 4) สามารถแพรภาพหนาจอผูสอน ไปยังหนาจอที่เหลือทั้งหมด 5) สามารถ Chat ไดทั้งขอความ และเสียง 6) สามารถสง Message ไปยังเครื่องคอมพิวเตอรของผูเรียนที่ระบ ุ 7) สามารถล็อคแปนพิมพ หนาจอ เมาสของผูเรียน 8) สามารถสั่ง logoff shutdown หรือ restart เครื่องผูเรียนคนใดคนหนึ่ง หรือ ทั้งหมด 9) แจกจายไฟลแกกลุมผูเรียนโดยใชไดแรกทอรีที่ระบุตามความตองการได 10) จัดเก็บไฟลจากกลุมผูเรียนจากไดแรกทอรีที่ระบุตามความตองการได 11) สามารถควบคุมการใชโปรแกรมในเครื่องของผูเรียน โดยกําหนดไดวาจะอนญุาต หรือไมอนุญาต ใหใชโปรแกรมใด 12) สามารถควบคุมการเชื่อมตออินเตอรเน็ตในเครื่องของผูเรียน โดยกําหนดไดวาจะ อนุญาต หรือไมอนุญาต ใหเชื่อมตอ URL ใด 13) สามารถบันทึกกิจกรรม หรือการทํางานบนจอภาพคอมพิวเตอรของผูเรียนพรอม เสียงและสญัลักษณ 14) ผูเรียนสามารถขอความชวยเหลือ โดยการสงขอความแบบออนไลนได 15) ทํา multicast communication ภายใต TCP/IP ได 16) การล็อคอิน (login) ของผูสอน ผูสอนแตละคนสามารถมีโปรไฟลตางๆ กัน และ ตรวจสอบรหัสผานกับระบบการจัดการรักษาความปลอดภัยของวินโดวสได 17) ปองกนัการติดตั้งระบบดวยรหัสผานเพื่อปองกันการแกไขจากผูไมมีสิทธิ