it-swarm-vi.com

Một ổ cắm là gì?

Ai đó có thể giải thích cho tôi một ổ cắm là gì? Tôi thấy nó trong nhiều từ viết tắt trong bối cảnh SSL, v.v.

Ngoài ra, tại sao nó được gọi là ổ cắm? Có phải hoàn toàn bởi vì đó là cái mà họ đã phát minh ra? Hay đó là cái tên đầu tiên họ nghĩ ra?

57
chrisjlee

Một ổ cắm chỉ là một điểm cuối hợp lý cho giao tiếp. Chúng tồn tại trên lớp vận chuyển. Bạn có thể gửi và nhận mọi thứ trên một ổ cắm, bạn có thể liên kết và lắng nghe một ổ cắm. Một ổ cắm dành riêng cho một giao thức, máy và cổng và được xử lý như vậy trong tiêu đề của gói.

Các hướng dẫn của Beej về Lập trình mạngGiao tiếp giữa quá trình cả hai đều có thông tin tốt về cách sử dụng ổ cắm và thậm chí trả lời chính xác câu hỏi này .

48
Shawn J. Goff

Nói một cách đơn giản nhất, socket là một tệp giả đại diện cho kết nối mạng. Khi một ổ cắm đã được tạo (sử dụng các nguyên hàm thích hợp và các tham số thích hợp để xác định Máy chủ khác), ghi vào ổ cắm được chuyển thành các gói mạng được gửi đi và dữ liệu nhận được từ mạng có thể được đọc từ ổ cắm.

Về một khía cạnh, ổ cắm rất giống với đường ống: chúng trông giống như các tệp cho các chương trình sử dụng chúng, nhưng không dẫn đến việc đọc hoặc ghi vào đĩa; thay vào đó, họ cho phép giao tiếp với một chương trình khác (cục bộ trong trường hợp đường ống và có thể từ xa trong trường hợp ổ cắm). Họ cũng cung cấp, như bạn đề cập, giao tiếp hai chiều (giống như một cặp đường ống được kết nối đúng cách có thể).

Cuối cùng, thông thường các chương trình trên một máy sẽ giao tiếp bằng các giao thức mạng tiêu chuẩn, chẳng hạn như TCP; Sẽ thật lãng phí nếu đi tất cả các phần cứng mạng (nếu có!), kiểm tra điện toán, v.v., chỉ để quay lại cùng một Máy chủ: đó là nơi mà các ổ cắm tên miền Unix xuất hiện. Chúng giống như các ổ cắm thông thường, ngoại trừ họ kết nối các quy trình trên cùng một Máy chủ chứ không phải các quy trình từ xa và hoàn toàn không cố gắng sử dụng bất kỳ tài nguyên mạng nào. Theo cách này, chúng là một phương tiện giao tiếp giữa các quá trình.

Như tripleee đã đề cập, trong quá trình lịch sử của BSD, các đường ống được giới thiệu sớm hơn các ổ cắm và được thực hiện lại bằng cách sử dụng các ổ cắm một khi chúng tồn tại. Cùng một tham chiếu, Thiết kế và triển khai hệ điều hành FreeBSD, đề cập rằng các đường ống sau đó được hoàn nguyên thành triển khai không có ổ cắm vì lý do hiệu suất: điều này chắc chắn nhấn mạnh thực tế là các đường ống có chung điểm tương đồng.

74
dhag

Bây giờ, nó là gì?

Một ổ cắm, hoặc "ổ cắm" có thể là một số điều:

Trước hết, đó là một mô hình suy nghĩ và một giao diện lập trình ứng dụng (API) . Điều đó có nghĩa là bạn có một bộ quy tắc bạn cần tuân theo và một bộ chức năng mà bạn có thể sử dụng để viết các chương trình làm một việc gì đó, theo một hợp đồng được chỉ định chính xác. Trong trường hợp cụ thể này, một cái gì đó có nghĩa là trao đổi dữ liệu với một chương trình khác.

API socket chỉ tóm tắt rộng rãi các chi tiết về "giao tiếp" nói chung. Nó gói gọn những người bạn nói chuyện và làm thế nào, tất cả thông qua một (gần như) mẫu cắt cookie nhất quán và giống hệt nhau.
[.__.] Bạn có thể tạo các ổ cắm trong các "miền" khác nhau (ví dụ: "ổ cắm unix" hoặc "ổ cắm internet") và của các loại giao tiếp khác nhau (ví dụ: ổ cắm "datagram" hoặc ổ cắm "luồng") và nói chuyện với những người nhận khác nhau, và mọi thứ hoạt động giống hệt nhau (tốt, 99%, rõ ràng có những khác biệt nhỏ mà bạn sẽ phải tính đến).

Bạn không cần biết (và thậm chí bạn không muốn biết!) Cho dù bạn nói chuyện với một chương trình khác trên cùng một máy tính hoặc trên một máy tính khác, hoặc liệu có mạng IPv4 hoặc IPv6 ở giữa các máy tính đó hay có thể một số khác giao thức mà bạn chưa bao giờ nghe nói đến.

socket cũng là tên của hàm thư viện (hoặc syscall) tạo ra "ổ cắm", đây là một loại tệp đặc biệt (mọi thứ trong Unix là một tập tin).

Làm thế nào để nó so sánh với ...

ổ cắm rơi vào cùng loại với ống và tên ống

Một ống là một phương tiện một cách giao tiếp giữa người đọc và người viết (cả hai đều là chương trình) trên cùng một máy tính. Nó mô phỏng a stream dữ liệu (giống như ví dụ TCP).
[.__.] Nghĩa là, không có "thông điệp" hoặc "khối dữ liệu" riêng lẻ nào tồn tại theo quan điểm của đường ống. Bạn có thể sao chép bất kỳ lượng dữ liệu nào vào "một đầu" và người khác có thể đọc bất kỳ lượng dữ liệu nào (không nhất thiết phải giống nhau và không nhất thiết trong một lần) ở "đầu kia" theo cùng thứ tự byte như bạn đã đẩy nó vào.

A tên pipe là, đơn giản là ống sở hữu một tên trong hệ thống tập tin. Đó là, một cái gì đó trông và hoạt động giống như một tệp, nó xuất hiện trong danh sách thư mục và bạn có thể mở nó, ghi vào nó, v.v. Lưu ý rằng bạn cũng có thể tạo các tệp đặc biệt của ổ cắm (đó sẽ là một ổ cắm có tên) .

Mặt khác, một ổ cắm là một phương tiện của giao tiếp hai chiều ("song công"), có nghĩa là bạn có thể viết và đọc từ cùng ổ cắm và bạn không cần hai ổ cắm riêng biệt để liên lạc hai chiều.
[.__.] Ngoài ra, một ổ cắm có thể hoạt động như một luồng (giống hệt với đường ống) hoặc nó có thể gửi các tin nhắn rời rạc, không đáng tin cậy hoặc nó có thể gửi các tin nhắn rời rạc, có trật tự (hai đầu tiên hoạt động trên bất kỳ miền nào, chỉ cuối cùng trên "tên miền unix"). Nó có thể gửi tin nhắn (hoặc mô phỏng một luồng) cho ai đó trên một máy tính hoàn toàn khác. Một ổ cắm thậm chí có thể thực hiện một hình thức giao tiếp một-nhiều (multicast) trong một số điều kiện.

Với ý nghĩ đó, rõ ràng là các socket làm điều gì đó phức tạp hơn nhiều và nói chung có nhiều chi phí hơn các đường ống (về cơ bản không nhiều hơn một memcpy đến và từ một bộ đệm!), nhưng nếu bạn tạo ổ cắm cục bộ (tức là trên cùng một máy tính), hệ điều hành thường áp dụng đường dẫn nhanh được tối ưu hóa mạnh mẽ, do đó thực sự không có nhiều sự khác biệt.

giao tiếp giữa các quá trình đôi khi được đề cập liên quan đến các mạng

Có, ổ cắm là một cách có thể của giao tiếp giữa các quá trình (bộ nhớ dùng chung và đường ống là ví dụ về các lựa chọn thay thế). Tất cả cùng một lúc, chúng đang được sử dụng để "kết nối", như đã giải thích ở trên.

8
Damon

Một ổ cắm trừu tượng. Nó cung cấp giao diện cho các ứng dụng sử dụng tài nguyên hệ thống (trong trường hợp này là kết nối mạng) theo cách cho phép hệ điều hành làm trung gian và tổ chức sử dụng tài nguyên giới hạn bởi bất kỳ số lượng ứng dụng nào.

Nếu dữ liệu được gửi qua ổ cắm có thể được coi là phong bì thư, thì ổ cắm sẽ là hộp thư của bạn. Bạn đính kèm một hộp thư (ổ cắm) vào nhà của bạn (chương trình) và đặt thư đi (dữ liệu) của bạn vào đó. Tại một thời điểm theo lịch trình, người đưa thư (hệ điều hành) xuất hiện và nhận thư đi của bạn và bỏ bất kỳ thư đến nào trong cùng một hộp thư. Thư gửi đi của bạn được chuyển thay mặt bạn đến người nhận thông qua xe tải của người đưa thư (kết nối mạng) cùng với tất cả thư của hàng xóm của bạn. Điều này cho phép bạn tương ứng với những người ở xa mà không cần chi phí, thời gian, khó khăn, v.v. để tự mình gửi thư.

Về lý do tại sao chúng được gọi là 'ổ cắm' tốt, khái niệm rằng các nhà phát minh có thể gọi nó là bất cứ điều gì họ muốn có thể đóng một vai trò lớn ở đó. Mặc dù, đó không phải là một tên xấu theo ý kiến ​​của tôi :)

7
Andrew Lambert

Đối với udp hoặc tcp qua IP,

Địa chỉ ổ cắm là sự kết hợp của địa chỉ IP và số cổng.

Địa chỉ IP là địa chỉ của một máy trên internet, ví dụ: unix.stackexchange.com has address 198.252.206.140

Tuy nhiên, mỗi máy phải có khả năng cung cấp nhiều hơn một dịch vụ, vì vậy hầu hết các máy sẽ cung cấp http (trang web) trên cổng 80 và ssh trên cổng 22, v.v.

Vì thế unix.stackexchange.com:80 Hải cảng 80 của unix.stackexchange.com (một ổ cắm) là điểm truy cập của trang web này.

Tuy nhiên, có các loại ổ cắm khác, xem ý kiến ​​dưới đây.

2
ctrl-alt-delor

Tôi tin rằng bạn đã hỏi về mạng. Vì vậy, TCP dịch vụ sử dụng ổ cắm làm điểm để liên lạc và được tạo thành từ địa chỉ IP, giao thức và số cổng.

0
Dragos Alexe