ซ็อกเก็ต Unix และ TCP / IP แตกต่างกันอย่างไร


คำตอบ:


191

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

IP sockets (โดยเฉพาะ TCP / IP sockets) เป็นกลไกที่ช่วยให้การสื่อสารระหว่างกระบวนการผ่านเครือข่าย ในบางกรณีคุณสามารถใช้ซ็อกเก็ต TCP / IP เพื่อพูดคุยกับกระบวนการที่ทำงานบนคอมพิวเตอร์เครื่องเดียวกัน (โดยใช้อินเทอร์เฟซแบบย้อนกลับ)

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

แก้ไข: ตามความคิดเห็นของ Nils Toedtmann : ซ็อกเก็ตโดเมน UNIX อยู่ภายใต้การอนุญาตของระบบไฟล์ในขณะที่ซ็อกเก็ต TCP สามารถควบคุมได้เฉพาะในระดับตัวกรองแพ็คเก็ต


12
อาจเพิ่มที่ซ็อกเก็ตโดเมน UNIX อยู่ภายใต้การอนุญาตของระบบไฟล์ในขณะที่ซ็อกเก็ต TCP ไม่ได้ ด้วยเหตุนี้จึงง่ายต่อการควบคุมว่าผู้ใช้รายใดที่สามารถเข้าถึงซ็อกเก็ตโดเมน UNIX ได้มากกว่าซ็อกเก็ต TCP
Nils Toedtmann

@pQd เพื่อนคุณสามารถเรียกมันว่า Unix IPC แทนที่จะเป็น Unix Sockets ได้หรือไม่
Pacerier

4
@Pacerier Unix sockets เป็นเพียงวิธีหนึ่งในการรับ unix IPC (หน่วยความจำ Interprocess ที่ใช้ร่วมกันระหว่างกลุ่มอื่น ๆ ) ดังนั้นจึงไม่ถูกต้องที่จะเรียก unix sockets unix IPC
fyquah95

TCP จัดการซ็อกเก็ตโดย Unix ด้วยหรือไม่ TCP sockets เป็นส่วนหนึ่งของข้อกำหนดโปรโตคอล TCP หรือโปรโตคอลใด ๆ ที่สามารถใช้ IP Sockets ได้
Federico

@Federico ฉันโพสต์คำตอบซึ่งพยายามตอบคำถามของคุณหากคุณต้องการข้อมูลเพิ่มเติมกรุณาโพสต์คำถามใหม่
Peter Green

28

คุณสามารถแสดงรายการซ็อกเก็ตยูนิกซ์โลคัลของเครื่องของคุณเองด้วยคำสั่งต่อไปนี้:

netstat -a -p --unix

มีความสุข!


9
Unix sockets ไม่มีอยู่ใน Windows netstatทำงานบน Windows ได้อย่างไร
Mark Tomlin

4
@apache สิ่งที่คล้ายกันใน Windows ชื่อ "Named pipes"
ผู้เชี่ยวชาญ

5
มีชื่อท่ออยู่บน Linux เช่นกัน
Sahil Singh

9
@ ประสบการณ์, ไปป์ที่มีชื่อใน Windows จะเท่ากับไปป์ที่มีชื่อใน Unix ซ็อกเก็ต IPC ใน Unix ไม่มีความเท่าเทียมกันใน Windows
Pacerier

2
Windows 10 รองรับซ็อกเก็ต Unix มีข้อ จำกัด บางประการ แต่มีให้บริการ: blogs.msdn.microsoft.com/commandline/2017/12/19/…
Tyson

12

ซ็อกเก็ต Unix และ TCP / IP แตกต่างกันอย่างไร

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

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

นอกจากนี้กระบวนการที่ยอมรับการเชื่อมต่อบนซ็อกเก็ต Unix สามารถกำหนด ID ผู้ใช้ของกระบวนการที่เชื่อมต่อได้ สิ่งนี้สามารถหลีกเลี่ยงความต้องการขั้นตอนการพิสูจน์ตัวตน แทนที่จะสร้างรหัสผ่านสำหรับเซิร์ฟเวอร์ฐานข้อมูลของคุณและรวมถึงสำเนาในรหัสของ webapp คุณสามารถบอกเซิร์ฟเวอร์ฐานข้อมูลว่าผู้ใช้ที่เรียกใช้ webapp สามารถเข้าถึงบัญชีผู้ใช้ที่สอดคล้องกันในฐานข้อมูล


TCP จัดการซ็อกเก็ตโดย Unix ด้วยหรือไม่

แน่นอน

TCP sockets เป็นส่วนหนึ่งของข้อกำหนดคุณสมบัติโปรโตคอล TCP

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

"sockets API" ที่เรารู้ว่ามันถูกนำเสนอโดย BSD แต่ต่อมาถูกคัดลอกไปทั่วสถานที่และรวมเป็นส่วนหนึ่งของมาตรฐาน posix สิ่งพื้นฐานสำหรับซ็อกเก็ต TCP และ UDP มีแนวโน้มที่จะเหมือนกันมากในแพลตฟอร์มที่แตกต่างกัน แต่สิ่งที่สูงขึ้นและสิ่งที่โต้ตอบกับส่วนอื่น ๆ ของระบบปฏิบัติการที่แตกต่างกันไปตัวอย่างเช่นในระบบยูนิกซ์ซ็อกเก็ต สามารถอ่าน / เขียนโดยไฟล์ API นี่ไม่ใช่กรณีบน windows

ส่วนขยายบางส่วนไปยัง sockets API ได้รับการบันทึกไว้ใน rfcs แล้ว แต่ RFC เหล่านั้นเป็นเพียง "ข้อมูล" เท่านั้น

หรือโปรโตคอลใดสามารถใช้ IP Sockets ได้

เมื่อแอปพลิเคชันสร้างซ็อกเก็ตอย่างชัดเจนโดยใช้ฟังก์ชั่น "ซ็อกเก็ต" (ซ็อกเก็ตยังถูกสร้างโดยฟังก์ชั่นการยอมรับ) มันจะผ่านพารามิเตอร์สามตัวคือ "โดเมน", "ประเภท" และ "โปรโตคอล" ระหว่างพารามิเตอร์ทั้งสามนี้สามารถใช้เพื่อเลือกซ็อกเก็ตหลายประเภท

  • โดเมนจะเลือกตระกูลของโปรโตคอล / ที่อยู่ที่ใช้งานอยู่เช่น AF_INET สำหรับ ipv4, AF_INET6 สำหรับ ipv6, AF_Unix สำหรับเส้นทางระบบไฟล์ยูนิกซ์เป็นต้น
  • type เลือกความหมายของการสื่อสารส่วนที่สำคัญคือดาตาแกรมและสตรีม แต่ก็มีประเภทพิเศษอื่น ๆ อีกมากมาย
  • โปรโตคอลเลือกโปรโตคอลที่จะใช้หากตั้งค่าเป็น 0 โปรโตคอลเริ่มต้นสำหรับการรวมโดเมนและประเภทจะถูกใช้

"การฟังซ็อกเก็ตอยู่ในลำดับชั้นของระบบไฟล์และการเข้าถึงซ็อกเก็ตนั้นสามารถควบคุมได้โดยการอนุญาตของระบบไฟล์" นี่หมายความว่าเซิร์ฟเวอร์สองเครื่องที่สามารถเข้าถึงระบบไฟล์เดียวกันอาจสามารถสื่อสารผ่านซ็อกเก็ตได้หรือไม่
user5359531

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