คำอธิบายอย่างง่ายของซ็อกเก็ต Unix


20

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


เขียนแอปทดสอบขนาดเล็กบางตัวโดยใช้ คุณไม่จำเป็นต้องใช้สองเครื่องเพียงแค่สองแอพเล็ก ๆ เพื่อเริ่มต้น การเล่นชนิดหนึ่ง
Patrick Hughes

คำแนะนำของ Beej ในการเขียนโปรแกรมเครือข่ายดูเหมือนจะเป็นข้อความแนะนำยอดนิยมในซ็อกเก็ต Unix ถึงแม้ว่าฉันไม่สามารถบอกได้ว่าฉันชอบมัน
Nemanja Trifunovic

ฉันได้อัปเดตคำตอบ @DanielPittman แล้วหากฉันต้องเขียนฉันจะต้องเขียนคำตอบเดียวกัน แต่ถ้าคุณต้องการความช่วยเหลือเพิ่มเติมฉันจะขยาย โปรดแก้ไขคำถามของคุณใส่พื้นหลังเกี่ยวกับสิ่งที่คุณรู้และสิ่งที่คุณไม่ทำและแจ้งให้เราทราบด้วยว่าคุณกำลังมองหาความช่วยเหลือในการใช้งานอย่างไรพวกเขาทำงานอย่างไรภายในหรือตามทฤษฎี (การออกแบบโปรโตคอล) หรือคุณพยายาม การประเมินเพื่อจุดประสงค์บางอย่าง?
Dipan Mehta

นี่คือหนังสือ: การเขียนโปรแกรมระบบปฏิบัติการยูนิกซ์เครือข่าย ทุกคนในโลกที่จะตอบคำถามนี้จะได้เรียนรู้จากแม่นี้ อ่านหนังสือเล่มนี้คำถามของคุณจะดีขึ้น
Dipan Mehta

คุณหมายถึง BSD sockets หรือไม่ ซ็อกเก็ต Unix ทำงานในพื้นที่เท่านั้น
imel96

คำตอบ:


15

ให้ฉันยกตัวอย่าง: สมมติว่าคุณต้องการสื่อสาร / แชทกับเพื่อนของคุณที่ไม่ได้อยู่ที่คุณอยู่ เพื่อที่จะเกิดขึ้นคุณต้องสร้าง "ช่องทางการสื่อสาร" สมมติว่าคุณต้องการสื่อสารด้วยโทรศัพท์ คุณรู้ว่ามีเครือข่ายสายโทรศัพท์ในเมืองที่ขยายไปทุกบ้าน

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

ในการเขียนโปรแกรมคุณมีสองกระบวนการ (ใช้งานโปรแกรม) ที่ต้องการสื่อสารซึ่งกันและกัน เพื่อที่พวกเขาจะต้องสร้างการเชื่อมโยงการสื่อสารระหว่างพวกเขา อีกครั้งมีเครือข่ายที่มีอยู่พวกเขาเพียงแค่ต้องเชื่อมต่อกับเครือข่ายนี้โดยใช้ซ็อกเก็ตบางประเภท ซ็อกเก็ต Unix เป็นหนึ่งซ็อกเก็ตดังกล่าวที่ให้การเชื่อมต่อนี้ / pluggability ไปยังเครือข่าย ดังนั้นในแต่ละโปรแกรมทั้งสองคุณจะมีรหัสบางส่วนที่ทำหน้าที่เชื่อมต่อกับเครือข่ายผ่านซ็อกเก็ต

ส่วนที่เหลือเป็นรายละเอียด


2
ฉันจะลงคะแนนถ้าฉันมีชื่อเสียงเพียงพอ ข้อความของคุณไม่ได้อธิบายว่าซ็อกเก็ตทำงานอย่างไร ข้อความทั่วไปเช่นเดียวกับใน Wikipedia ซ็อกเก็ตฟังอย่างไร ซ็อกเก็ตโทรศัพท์ของคุณสามารถรับฟังการเชื่อมต่อได้อย่างไร
สีเขียว

21

ซ็อกเก็ต Unix เป็นซ็อกเก็ตสองทิศทางเช่นเดียวกับซ็อกเก็ตที่ใช้ IP ซึ่งคุณอาจคุ้นเคยกับและชนิดที่คล้ายกับไพพ์ซึ่งคุณอาจคุ้นเคย

พวกเขามีชุดเล็ก ๆ ของคุณสมบัติที่น่าสนใจ:

  • พวกเขาอยู่ในโดเมนของ "โฮสต์ท้องถิ่น" เท่านั้น - คุณไม่สามารถเข้าถึงพวกเขาผ่านเครือข่ายได้เฉพาะในเครื่องท้องถิ่น
  • คุณสามารถสร้างพวกเขาในโหมด "สตรีม" ซึ่งพวกเขาเพียงแค่ส่งข้อมูลเช่นไพพ์เป็นสตรีมของไบต์
  • คุณสามารถสร้างพวกมันในโหมด "ดาตาแกรม" ซึ่งมันจะรักษาขอบเขตระหว่างการส่ง วิธีนี้ช่วยให้คุณสามารถคงเฟรมภาพไว้ได้โดยไม่ต้องสร้างโปรโตคอลการกำหนดเฟรมภาพของคุณเองที่ด้านบนของสตรีมไบต์
  • พวกเขาใช้ระบบไฟล์หรือบน Linux "ชื่อนามธรรม" เป็น "ที่อยู่"
  • คุณอาจสามารถเลียนแบบส่วนอื่น ๆ ระบุซอฟต์แวร์ที่เชื่อมต่อได้อย่างปลอดภัยหรือผ่านการจัดการไฟล์ผ่านซ็อกเก็ตขึ้นอยู่กับระบบปฏิบัติการของคุณ

โดยพื้นฐานแล้วพวกเขาจะเทียบเท่ากับซ็อกเก็ตอื่น ๆ - พวกเขามีคุณสมบัติที่น่าสนใจกว่าท่อเล็กน้อย แต่ไม่แตกต่างกันอย่างสิ้นเชิง โดยทั่วไปแล้วพวกเขาจะมีเวลาแฝง IPC สูงกว่าแบบไปป์และบัฟเฟอร์ขนาดใหญ่กว่า - แม้ว่าคุณจะสามารถปรับแต่งมันได้และมันก็ขึ้นอยู่กับแพลตฟอร์ม

คุณสมบัติที่น่าสนใจขั้นสุดท้ายที่ต้องจำคือพวกเขาใช้ระบบไฟล์เป็น namespace ของพวกเขา - ดังนั้นจึงเป็นเหมือนไพพ์ที่มีชื่อแทนที่จะเป็นไพพ์นิรนามในซอฟต์แวร์ที่ไม่มีความสัมพันธ์ก่อนหน้านี้สามารถสื่อสารได้ (ซ็อกเก็ต namespace บทคัดย่อเหมือนกัน แต่เส้นทาง "ไฟล์" ไม่จำเป็นต้องมีอยู่)

ไม่มีอะไรที่ลึกกว่านั้น - พวกเขาไม่มีคุณสมบัติซ่อนเร้นลับที่ทำให้พวกเขาแตกต่างอย่างสิ้นเชิงจากไพพ์ทั่วไปหรือการเชื่อมต่อ TCP ไปยังโลคอลโฮสต์


3
ขอบคุณ แต่ฉันยังคงพบว่ามันซับซ้อนและเต็มไปด้วย argot
Elzo Valugi

2
โปรดอย่าโกรธเคืองเมื่อลองใช้คำตอบเดียวเพื่อดูว่าช่วยได้ดีกว่า: "คุณรู้หรือไม่ว่าซ็อกเก็ต TCP / IP และ UDP / IP ทำงานอย่างไรสิ่งเหล่านี้เหมือนกันโดยไม่มีส่วนของ IP"
Daniel Pittman

ฉันไม่ได้โกรธเคืองฉันแค่อยากจะเข้าใจ ขอบคุณ ฉันจะศึกษารายละเอียดเพิ่มเติมเหล่านั้น
Elzo Valugi

4
การกำหนดคำโดยใช้คำนั้น (เช่น: "ซ็อกเก็ต Unix เป็นซ็อกเก็ตสองทิศทาง") ไม่ได้อธิบายอะไรกับคนที่ไม่รู้ว่าซ็อกเก็ตเริ่มต้นด้วยอะไร
ไบรอัน Oakley

1

การเขียนโปรแกรมซ็อกเก็ต Linux ตอนที่ 1: การใช้ TCP / IPทำงานได้ค่อนข้างดีสำหรับฉัน มันเริ่มต้นด้วยการแนะนำเครือข่าย IP และเลเยอร์เครือข่ายจากนั้นดำเนินการต่อโดยการแสดงวิธีการใช้เซิร์ฟเวอร์ echo และไคลเอนต์อย่างง่ายทั้งใน C และ Python

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.