ใครช่วยอธิบายให้ฉันรู้ว่าซ็อกเก็ตคืออะไร? ฉันเห็นมันในหลาย ๆ คำย่อในบริบทของ SSL เป็นต้น
ทำไมมันถึงเรียกว่าซ็อกเก็ต? มันล้วนๆเพราะเป็นชื่อที่พวกเขาคิดค้น? หรือเป็นชื่อแรกที่พวกเขาสร้างขึ้นมาด้วย?
ใครช่วยอธิบายให้ฉันรู้ว่าซ็อกเก็ตคืออะไร? ฉันเห็นมันในหลาย ๆ คำย่อในบริบทของ SSL เป็นต้น
ทำไมมันถึงเรียกว่าซ็อกเก็ต? มันล้วนๆเพราะเป็นชื่อที่พวกเขาคิดค้น? หรือเป็นชื่อแรกที่พวกเขาสร้างขึ้นมาด้วย?
คำตอบ:
ซ็อกเก็ตเป็นเพียงจุดปลายตรรกะสำหรับการสื่อสาร มีอยู่ในชั้นการขนส่ง คุณสามารถส่งและรับสิ่งต่าง ๆ บนซ็อกเก็ตคุณสามารถผูกและฟังซ็อกเก็ต ซ็อกเก็ตมีความเฉพาะเจาะจงกับโปรโตคอลเครื่องและพอร์ตและมีการระบุเช่นนี้ในส่วนหัวของแพ็คเก็ต
คู่มือ Beej ในการเขียนโปรแกรมเครือข่ายและการสื่อสารระหว่างกระบวนการทั้งสองมีข้อมูลที่ดีเกี่ยวกับวิธีการใช้ซ็อกเก็ตและแม้กระทั่งการตอบคำถามนี้แน่นอน
ในเงื่อนไขที่ง่ายที่สุดซ็อกเก็ตเป็นไฟล์หลอกที่แสดงถึงการเชื่อมต่อเครือข่าย เมื่อซ็อกเก็ตถูกสร้างขึ้น (ใช้ primitives ที่เหมาะสมและพารามิเตอร์ที่เหมาะสมเพื่อระบุโฮสต์อื่น) การเขียนไปยังซ็อกเก็ตจะเปลี่ยนเป็นแพ็กเก็ตเครือข่ายที่ส่งออกและข้อมูลที่ได้รับจากเครือข่ายสามารถอ่านได้จากซ็อกเก็ต
ในแง่หนึ่งซ็อกเก็ตมีความคล้ายกับไพพ์: ดูเหมือนกับไฟล์ไปยังโปรแกรมที่ใช้ แต่ไม่ส่งผลให้เกิดการอ่านหรือเขียนลงดิสก์ ค่อนข้างจะอนุญาตให้สื่อสารกับโปรแกรมอื่น (ในกรณีของท่อและอาจเป็นระยะไกลในกรณีของซ็อกเก็ต) นอกจากนี้ยังมีการสื่อสารแบบสองทิศทาง (เช่นเดียวกับท่อที่เชื่อมต่ออย่างเหมาะสม)
ในที่สุดมันเป็นเรื่องปกติสำหรับโปรแกรมบนเครื่องเดียวที่จะสื่อสารโดยใช้โปรโตคอลเครือข่ายมาตรฐานเช่น TCP; มันจะเป็นการสิ้นเปลืองที่จะไปถึงฮาร์ดแวร์เครือข่าย (ถ้ามี!), การตรวจสอบการคำนวณ ฯลฯ เพื่อกลับไปยังโฮสต์เดียวกัน: นั่นคือที่ซ็อกเก็ตโดเมนของ Unix เข้ามาพวกมันเหมือนกับซ็อกเก็ตทั่วไปยกเว้น พวกเขาเชื่อมต่อกระบวนการในโฮสต์เดียวกันมากกว่ากระบวนการระยะไกลและอย่าพยายามใช้ทรัพยากรเครือข่ายใด ๆ เลย ด้วยวิธีนี้พวกเขาเป็นสื่อกลางของการสื่อสารระหว่างกระบวนการ
ดังที่มีการกล่าวถึง tripleee ในประวัติศาสตร์ของ BSD ท่อถูกนำมาใช้ก่อนหน้าซ็อกเก็ตและถูกนำมาใช้อีกครั้งโดยใช้ซ็อกเก็ตเมื่อมีอยู่ การอ้างอิงเดียวกันการออกแบบและการใช้งานระบบปฏิบัติการ FreeBSDกล่าวว่าท่อนั้นถูกเปลี่ยนกลับไปใช้งานแบบไม่ใช้ซ็อกเก็ตด้วยเหตุผลด้านประสิทธิภาพ: นี่เป็นการเน้นย้ำถึงข้อเท็จจริงที่ว่าท่อมีความคล้ายคลึงกัน
ซ็อกเก็ตที่เป็นนามธรรม มีอินเทอร์เฟซสำหรับแอปพลิเคชันเพื่อใช้ทรัพยากรระบบ (ในกรณีนี้คือการเชื่อมต่อเครือข่าย) ในลักษณะที่ช่วยให้ระบบปฏิบัติการเป็นสื่อกลางและจัดการการใช้ทรัพยากรที่ จำกัด ด้วยแอปพลิเคชันจำนวนเท่าใดก็ได้
หากข้อมูลที่ถูกส่งผ่านซ็อกเก็ตอาจจะคิดว่าเป็นซองจดหมายของซ็อกเก็ตแล้วซ็อกเก็ตจะเป็นกล่องจดหมายของคุณ คุณแนบกล่องจดหมาย (ซ็อกเก็ต) กับบ้านของคุณ (โปรแกรม) และใส่จดหมายขาออก (ข้อมูล) ลงในกล่อง ในเวลาที่กำหนดบุรุษไปรษณีย์ (ระบบปฏิบัติการ) จะเข้ามารับจดหมายขาออกของคุณและส่งจดหมายขาเข้าใด ๆ ในกล่องจดหมายเดียวกัน จดหมายขาออกของคุณจะถูกส่งในนามของคุณไปยังผู้รับผ่านทางรถบรรทุกของบุรุษไปรษณีย์ (การเชื่อมต่อเครือข่าย) พร้อมกับอีเมลเพื่อนบ้านทั้งหมดของคุณ สิ่งนี้ช่วยให้คุณสามารถติดต่อกับคนที่อยู่ห่างไกลโดยไม่จำเป็นต้องเสียค่าใช้จ่ายเวลาความยากลำบาก ฯลฯ ในการส่งจดหมายด้วยตัวคุณเอง
สำหรับเหตุผลที่พวกเขาถูกเรียกว่า 'ซ็อกเก็ต' เป็นอย่างดีความคิดที่ว่านักประดิษฐ์จะเรียกมันว่าอะไรก็ตามที่พวกเขาต้องการอาจมีบทบาทใหญ่ในนั้น แม้ว่ามันไม่ใช่ชื่อที่ไม่ดีในความคิดของฉัน :)
ซ็อกเก็ตหรือ "ซ็อกเก็ต" อาจมีหลายสิ่ง:
ครั้งแรกของทั้งหมดมันเป็นรูปแบบความคิดและอินเตอร์เฟซการเขียนโปรแกรมประยุกต์ (API) นั่นหมายความว่าคุณมีชุดของกฎที่คุณต้องทำตามและชุดของฟังก์ชันที่คุณสามารถใช้เพื่อเขียนโปรแกรมที่ทำอะไรบางอย่างตามสัญญาที่ระบุไว้อย่างแม่นยำ ในกรณีนี้โดยเฉพาะอย่างยิ่งสิ่งที่หมายถึงการแลกเปลี่ยนข้อมูลกับโปรแกรมอื่น
API ของซ็อกเก็ตบทคัดย่ออย่างกว้างขวางรายละเอียดของ "การสื่อสาร" โดยทั่วไป มันแค็ปซูลที่คุณพูดคุยด้วยและวิธีทั้งหมดผ่านรูปแบบคุกกี้คัตเตอร์ตัดเดียว (เกือบ) สอดคล้องและเหมือนกัน
คุณสามารถสร้างซ็อกเก็ตใน "โดเมน" ที่แตกต่างกัน (เช่นเช่น "ยูนิกซ์ซ็อกเก็ต" หรือ "อินเทอร์เน็ตซ็อกเก็ต") และการสื่อสารประเภทต่าง ๆ (เช่นซ็อกเก็ต "ดาตาแกรม" หรือซ็อกเก็ต "สตรีม") และพูดคุยกับผู้รับต่างๆ และทุกอย่างทำงานเหมือนกันหมด (อย่างดี 99% มีความแตกต่างอย่างชัดเจนในนาทีที่คุณต้องพิจารณา)
คุณไม่จำเป็นต้องรู้ (และคุณไม่ต้องการที่จะรู้ด้วย!) ไม่ว่าคุณจะพูดคุยกับโปรแกรมอื่นบนคอมพิวเตอร์เครื่องเดียวกันหรือบนคอมพิวเตอร์เครื่องอื่นหรือว่ามีเครือข่าย IPv4 หรือ IPv6 อยู่ระหว่างคอมพิวเตอร์เหล่านั้น โปรโตคอลที่คุณไม่เคยได้ยิน
socket
เป็นชื่อของฟังก์ชันไลบรารี (หรือ syscall) ซึ่งสร้าง"ซ็อกเก็ต " ซึ่งเป็นไฟล์ชนิดพิเศษ (ทุกอย่างใน Unix เป็นไฟล์)
ซ็อกเก็ตจัดอยู่ในประเภทเดียวกันกับไพพ์และไพพ์เนม
ไปป์เป็นวิธีการสื่อสารทางเดียวระหว่างผู้อ่านและนักเขียน (ทั้งสองเป็นโปรแกรม) บนคอมพิวเตอร์เครื่องเดียวกัน มันจำลองการไหลของข้อมูล (เช่น TCP)
นั่นคือไม่มี "ข้อความ" หรือ "บล็อกข้อมูล" อยู่ในมุมมองของไปป์ คุณสามารถคัดลอกจำนวนข้อมูลใด ๆ ลงใน "ปลายด้านหนึ่ง" และคนอื่นสามารถอ่านจำนวนข้อมูลใด ๆ (ไม่จำเป็นต้องเหมือนกันและไม่จำเป็นต้องไปในครั้งเดียว) ที่ "ปลายอื่น ๆ " ในลำดับไบต์เดียวกันตามที่คุณ ผลักมันเข้า
ชื่อท่อคือดีเพียงท่อซึ่งเป็นเจ้าของชื่อในระบบแฟ้มที่ นั่นคือมันเป็นสิ่งที่มีลักษณะและมีลักษณะเหมือนกับไฟล์มันปรากฏในรายชื่อไดเรกทอรีและคุณสามารถเปิดเขียนมัน ฯลฯ ฯลฯ โปรดทราบว่าคุณยังสามารถสร้างไฟล์พิเศษของซ็อกเก็ต (ซึ่งจะเป็นซ็อกเก็ตที่มีชื่อ) .
ในทางกลับกันซ็อกเก็ตเป็นวิธีการสื่อสารสองทาง ("ดูเพล็กซ์") ซึ่งหมายความว่าคุณสามารถเขียนและอ่านจากซ็อกเก็ตเดียวกันได้และคุณไม่จำเป็นต้องใช้ซ็อกเก็ตสองตัวแยกกันสำหรับการสื่อสารสองทาง
นอกจากนี้ซ็อกเก็ตสามารถทำหน้าที่เป็นสตรีม (เหมือนไปป์) หรือสามารถส่งข้อความที่ไม่ต่อเนื่องไม่น่าเชื่อถือหรือสามารถส่งข้อความที่ไม่ต่อเนื่องสั่งซื้อ (ทั้งสองทำงานแรกในโดเมนใด ๆ สุดท้ายเท่านั้นใน "โดเมน unix" ) มันสามารถส่งข้อความ (หรือจำลองกระแส) ไปยังใครบางคนในคอมพิวเตอร์ที่แตกต่างกันโดยสิ้นเชิง ซ็อกเก็ตสามารถทำรูปแบบของการสื่อสารแบบหนึ่งต่อหลายคน (มัลติคาสต์) ภายใต้เงื่อนไขบางอย่าง
โดยที่ในใจมันเป็นที่ชัดเจนว่าซ็อกเก็ตทำสิ่งที่ซับซ้อนมากขึ้นและโดยทั่วไปจะมีค่าใช้จ่ายมากกว่าท่อ (ซึ่งโดยทั่วไปจะไม่ง่ายกว่าmemcpy
ไปและกลับจากบัฟเฟอร์!) แต่ถ้าคุณสร้างซ็อกเก็ตในท้องถิ่น คอมพิวเตอร์) ระบบปฏิบัติการมักจะใช้เส้นทางที่เร็วที่สุดซึ่งได้รับการปรับให้เหมาะสมอย่างมากดังนั้นจึงมีความแตกต่างไม่มาก
บางครั้งการสื่อสารระหว่างกระบวนการที่กล่าวถึงเกี่ยวกับเครือข่าย
ใช่ซ็อกเก็ตเป็นวิธีหนึ่งที่เป็นไปได้ของการสื่อสารระหว่างกระบวนการ (หน่วยความจำที่ใช้ร่วมกันและไพพ์เป็นตัวอย่างของทางเลือก) ในเวลาเดียวกันพวกเขาจะถูกใช้สำหรับ "เครือข่าย" ตามที่อธิบายไว้ข้างต้น
สำหรับ udp หรือ tcp over IP
ที่อยู่ซ็อกเก็ตคือการรวมกันของที่อยู่ IP และหมายเลขพอร์ต
ที่อยู่ IP คือที่อยู่ของเครื่องบนอินเทอร์เน็ตเช่น unix.stackexchange.com has address 198.252.206.140
อย่างไรก็ตามเครื่องแต่ละเครื่องจะต้องสามารถให้บริการได้มากกว่าหนึ่งบริการดังนั้นเครื่องส่วนใหญ่จะให้ http (หน้าเว็บ) บนพอร์ต 80 และ ssh บนพอร์ต 22 และอื่น ๆ
ดังนั้นunix.stackexchange.com:80
พอร์ต80
ของunix.stackexchange.com
(ซ็อกเก็ต) จึงเป็นจุดเข้าใช้งานของเว็บไซต์นี้
อย่างไรก็ตามมีซ็อกเก็ตประเภทอื่น ๆ ดูความคิดเห็นด้านล่าง
AF_INET
) โดยเฉพาะ
ฉันเชื่อว่าคุณถามเรื่องระบบเครือข่าย ดังนั้นบริการ TCP จึงใช้ซ็อกเก็ตเป็นจุดสำหรับการสื่อสารและประกอบด้วย IP address, โปรโตคอลและหมายเลขพอร์ต