Sự khác biệt giữa ổ cắm Unix và ổ cắm TCP / IP là gì?


Câu trả lời:


191

Một ổ cắm UNIX là một cơ chế giao tiếp liên quá trình cho phép trao đổi dữ liệu hai chiều giữa tiến trình đang chạy trên cùng một máy.

Ổ cắm IP (đặc biệt là ổ cắm TCP / IP) là một cơ chế cho phép giao tiếp giữa các quá trình qua mạng. Trong một số trường hợp, bạn có thể sử dụng ổ cắm TCP / IP để nói chuyện với các tiến trình đang chạy trên cùng một máy tính (bằng cách sử dụng giao diện loopback).

Các socket miền UNIX biết rằng chúng đang thực thi trên cùng một hệ thống, vì vậy chúng có thể tránh một số kiểm tra và thao tác (như định tuyến); mà làm cho chúng nhanh hơn và nhẹ hơn ổ cắm IP. Vì vậy, nếu bạn có kế hoạch giao tiếp với các quy trình trên cùng một máy chủ, đây là một lựa chọn tốt hơn so với ổ cắm IP.

Chỉnh sửa: Theo nhận xét của Nils Toedtmann : Ổ cắm tên miền UNIX phải tuân theo quyền hệ thống tệp, trong khi ổ cắm TCP chỉ có thể được kiểm soát ở cấp độ bộ lọc gói.


12
Có thể thêm rằng các socket miền UNIX phải tuân theo các quyền của hệ thống tệp, trong khi các socket TCP thì không. Kết quả là, việc điều chỉnh người dùng nào có quyền truy cập vào ổ cắm tên miền UNIX dễ dàng hơn nhiều so với ổ cắm TCP.
Nils Toedtmann

@pQd, bạn có thể gọi nó là Unix IPC thay vì Unix Sockets không?
Pacerier

4
Ổ cắm @Pacerier Unix chỉ đơn giản là một cách để đạt được IPC unix (bộ nhớ Inter Process được chia sẻ giữa những người khác), vì vậy sẽ không đúng khi gọi các ổ cắm unix unix IPC.
fyquah95

Ổ cắm TCP cũng được xử lý bởi Unix? Ổ cắm TCP là một phần của đặc tả giao thức TCP hoặc bất kỳ giao thức nào có thể sử dụng Ổ cắm IP?
Federico

@Federico Tôi đã đăng một câu trả lời cố gắng giải quyết câu hỏi của bạn, nếu bạn cần thêm chiều sâu, vui lòng gửi câu hỏi mới.
Peter Green

28

Bạn có thể liệt kê các ổ cắm unix cục bộ của máy bằng lệnh sau:

netstat -a -p --unix

Chúc vui vẻ!


9
Ổ cắm Unix không tồn tại trên Windows. netstattuy nhiên không hoạt động trên Windows.
Đánh dấu Tomlin

4
@apache, điều tương tự trong Windows có tên là "Các đường ống được đặt tên".
chuyên gia

5
Các ống được đặt tên cũng có mặt trên Linux.
Sahil Singh

9
@expert, các ống có tên trong Windows bằng với các ống được đặt tên trong Unix. Ổ cắm IPC trong Unix không có sự tương đương trong Windows
Pacerier

2
Windows 10 có hỗ trợ cho ổ cắm Unix. Có một số hạn chế, nhưng nó có sẵn: blog.msdn.microsoft.com/commandline/2017/12/19/ mẹo
Tyson

12

Sự khác biệt giữa ổ cắm Unix và ổ cắm TCP / IP là gì?

Ổ cắm TCP / IP được sử dụng để liên lạc qua các mạng TCP / IP. Ổ cắm TCP được kết nối được xác định bởi sự kết hợp của IP cục bộ, cổng cục bộ, IP từ xa và cổng từ xa. Một ổ cắm TCP nghe được xác định bởi cổng cục bộ và có thể là IP cục bộ. AIUI ít nhất trên các socket TCP / IP linux luôn dẫn đến việc tạo và giải mã các gói TCP / IP, ngay cả khi máy khách và máy chủ nằm trên cùng một máy.

Một ổ cắm miền unix (đôi khi được rút ngắn thành ổ cắm unix) mặt khác hoạt động trên một máy duy nhất. Ổ cắm nghe nằm trong hệ thống phân cấp hệ thống tập tin và quyền truy cập vào chúng có thể được kiểm soát bởi các quyền của hệ thống tập tin.

Hơn nữa, một quá trình chấp nhận kết nối trên ổ cắm Unix có thể xác định ID người dùng của quá trình kết nối. Điều này có thể tránh sự cần thiết cho một bước xác thực. Thay vì tạo mật khẩu cho máy chủ cơ sở dữ liệu của bạn và bao gồm một bản sao của mật khẩu trong mã ứng dụng web của bạn, bạn chỉ có thể nói với máy chủ cơ sở dữ liệu rằng người dùng đang chạy ứng dụng web có quyền truy cập vào tài khoản người dùng tương ứng trong cơ sở dữ liệu.


Ổ cắm TCP cũng được xử lý bởi Unix?

Tất nhiên

Ổ cắm TCP là một phần của đặc tả giao thức TCP

Thông số kỹ thuật giao thức Internet chỉ có xu hướng liên quan đến những gì xảy ra trên dây, thông số TCP chứa định nghĩa về Ổ cắm nhưng định nghĩa đó không giống với cách thuật ngữ được sử dụng bởi "API socket".

"API socket" như chúng ta biết, nó được BSD giới thiệu nhưng sau đó đã được sao chép khắp nơi và được đưa vào như một phần của tiêu chuẩn posix. Các công cụ cơ bản cho các socket TCP và UDP có xu hướng giống nhau trên các nền tảng khác nhau nhưng những thứ cao cấp hơn và những thứ tương tác với các bộ phận khác của HĐH khác nhau, ví dụ như trên các hệ thống giống như unix, một socket được xác định bởi một tay cầm tệp và có thể được đọc / ghi bởi các API tệp, đây không phải là trường hợp trên windows.

Một số phần mở rộng cho API socket đã được ghi lại bằng rfcs nhưng những RFC đó chỉ là "thông tin".

hoặc bất kỳ giao thức nào có thể sử dụng IP Sockets?

Khi một ứng dụng tạo ra một socket rõ ràng bằng chức năng "socket" (socket cũng được tạo bởi hàm accept), nó sẽ truyền ba tham số, "domain", "type" và "Protocol". Giữa chúng, ba tham số này có thể được sử dụng để chọn nhiều loại ổ cắm khác nhau.

  • tên miền chọn họ các giao thức / địa chỉ đang sử dụng, ví dụ: AF_INET cho ipv4, AF_INET6 cho ipv6, AF_Unix cho các đường dẫn hệ thống tập tin unix, v.v.
  • loại chọn ngữ nghĩa giao tiếp, loại chính là datagram và luồng nhưng cũng có các loại chuyên dụng khác.
  • Giao thức chọn giao thức để sử dụng, nếu nó được đặt thành 0, giao thức mặc định cho sự kết hợp giữa Tên miền và loại sẽ được sử dụng.

"Các ổ cắm nghe nằm trong hệ thống phân cấp hệ thống tập tin và quyền truy cập vào chúng có thể được kiểm soát bởi các quyền của hệ thống tập tin." Điều này có nghĩa là hai máy chủ có quyền truy cập vào cùng một hệ thống tệp có thể có thể giao tiếp qua một ổ cắm?
dùng5359531

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.