Page 241 - Computer Network
P. 241

232                                                          บทที่ 29. APPLICATION LAYER



                     29.1 ซ็อกเก็ต (Socket)



                     การพัฒนาของระบบ UNIX เพื่อรองรับการใช้งานร่วมกันแบบแบ่งเวลา (time sharing) ทำให้เกิดการทำงานของ
                     ระบบปฏิบัติการในลักษณะที่เป็นโปรเซส (process) โดยที่แต่ละแอพพลิเคชันของผู้ใช้มีการทำงานเสมือนเป็น
                     โปรเซส โดยที่แต่ละแอพพลิเคชันติดต่อกับระบบปฏิบัติการในลักษณะที่เรียกว่า system call หรือการเรียกใช้
                     งานระบบ การเรียกใช้เพื่อการสื่อสารกับเน็ตเวิร์คจะอยู่ในลักษณะเดียวกัน แต่อยู่ในรูปแบบที่เรียกว่า ซ็อกเก็ต
                     (Socket) เสมือนเป็นไฟล์เพื่อใช้ในการเข้าถึงการเชื่อมต่อเน็ตเวิร์ค



                     29.1.1 การสร้างการเชื่อมต่อโดยซ็อกเก็ต

                     การที่แอพพลิเคชันจะร้องขอไปยังระบบปฏิบัติการเพื่อสร้างซ็อกเก็ตที่ต้องการ ผู้ใช้จำเป็นจะต้องระบุตัวแปร 3 ตัว
                     ได้แก่


                         • Protocolfamilyเพื่อใช้ระบุตระกูลของโพรโตคอลที่ใช้ทำให้ทราบรูปแบบของแอดเดรสที่ใช้เช่นAF_INET
                           เพื่อระบุ IPv4                                  book)

                         • Type of socket ระบุประเภทของซ็อกเก็ตการสื่อสารที่ใช้ เช่น SOCK_STREAM ใช้เพื่อการใช้งานแบบ
                           connnection-oriented หรือ SOCK_DGRAM เพื่อใช้งานแบบ datagram

                         • Protocol type ชนิดของโพรโตคอลที่ต้องสอดคล้องกับประเภทของซ็อกเก็ต เช่น SOCK_STREAM ต้อง

                           ใช้งานกับ IPPROTO_TCP          (partial

                     การสร้างซ็อกเก็ตสามารถทำได้โดยคำสั่ง socket โดยการเรียกใช้คำสั่งดังกล่าว ระบบจะคืนค่าของจำนวนเต็มบวก
                                               only
                     รูปแบบการเรียกใช้จะเป็น

                                     result = socket(protocol family, type of socket, protocol type)

                                    KKU
                         ตัวอย่างการการเรียกใช้ซ็อกเก็ตแสดงในตัวอย่างโค้ดที่ 29.1

                      ตัวอย่างโค้ด 29.1: การสร้างซ็อกเก็ตแบบ Connection-oriented
                     int result;
                      result = socket(AF_INET, SOCK_STREAM, PPRPOTO_TCP}
                      if(result < 0)
                      {
                       perror("SOCKET ERROR");
                       exit (1);
                      }
                      close(result);
                         จากตัวอย่างโค้ดที่ 29.1 เป็นการสร้างซ็อกเก็ตที่เป็นแบบ Connection-oriented เราสามารถสรุปขั้นตอนการ
                     สร้างได้ดังรูปที่ 29.2 จากรูปจะเห็นว่าการสร้างแบ่งเป็นสองฝั่งคือฝั่งของเซิร์ฟเวอร์และฝั่งของไคลเอนต์ โดยที่ในฝั่ง

                     ของเซิร์ฟเวอร์จะรอการร้องขอการเชื่อมต่อจากไคลเอนต์ ฟังก์ชันที่จำเป็นในฝั่งเซิร์ฟเวอร์ได้แก่

                      bind แม้ว่าจะมีการสร้างซ็อกเก็ตเรียบร้อย แต่ยังไม่ได้มีการกำหนดพอร์ตแอดเดรสและ IP address เพื่อการ
                           สื่อสาร ดังนั้นหลังจากการสร้างซ็อกเก็ต เซิร์ฟเวอร์ใช้คำสั่ง bind เพื่อกำหนดแอดเดรสตนเองและรอการ
                           ร้องขอจากไคลเอนต์ต่อไป โดยที่รูปแบบของคำสั่ง bind เป็น


                                                bind(socket, local address, address length)
   236   237   238   239   240   241   242   243   244   245   246