Sự khác biệt giữa một ổ cắm và một cổng


121

Ai đó có thể vui lòng giải thích khá rõ sự khác biệt giữa một cổng và ổ cắm. Tôi biết rằng một cổng đóng vai trò là cửa vào mạng cho một quy trình ứng dụng và quy trình ứng dụng sử dụng kết nối ổ cắm với số cổng đã cho để xử lý giao tiếp mạng nhưng khi bạn có nhiều quy trình lắng nghe trên một số cổng duy nhất, tôi đang tìm thật khó để hiểu sự khác biệt giữa ổ cắm và cổng và cách tất cả chúng khớp với nhau.


9
Cổng là một địa chỉ vật lý, trong khi socket là một đối tượng.
superM

14
Nếu một gói trúng túi trên một ổ cắm trên cổng ...
user16764

Câu trả lời:


116

S là một chương trình máy chủ: giả sử đó là máy chủ HTTP, vì vậy nó sẽ sử dụng số cổng nổi tiếng cho HTTP , là 80. Tôi chạy nó trên một máy chủ có địa chỉ IP 10.0.0.4, vì vậy nó sẽ lắng nghe các kết nối 10.0.0.4:80(vì đó là nơi mọi người sẽ mong đợi để tìm thấy nó).

Bên trong S , tôi sẽ tạo một ổ cắmliên kết nó với địa chỉ đó: bây giờ, HĐH biết rằng các kết nối đến 10.0.0.4:80sẽ được chuyển đến quy trình S của tôi thông qua ổ cắm cụ thể đó.

  • đầu ra netstat một khi ổ cắm bị ràng buộc:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    

    Lưu ý địa chỉ cục bộ là tất cả các số 0 vì S không quan tâm đến cách khách hàng tiếp cận nó

Khi S đã ổ cắm này bị ràng buộc, nó sẽ chấp nhận các kết nối - mỗi lần một khách hàng mới kết nối, accepttrả về một mới ổ cắm, đó là cụ thể cho khách hàng

  • đầu ra netstat sau khi kết nối được chấp nhận:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    tcp        0      0 10.0.0.4:80                 10.0.0.5:55715             ESTABLISHED
    
    • 10.0.0.4:80đại diện cho kết thúc của S của kết nối và được liên kết với ổ cắm được trả về bởiaccept
    • 10.0.0.5:55715là kết thúc của máy khách và được liên kết với ổ cắm mà máy khách được truyền để kết nối . Cổng của khách hàng không được sử dụng cho bất cứ điều gì ngoại trừ các gói định tuyến trên kết nối TCP này theo đúng quy trình: nó được gán ngẫu nhiên bởi nhân của máy khách từ phạm vi cổng phù du.

Bây giờ, S có thể vui vẻ tiếp tục chấp nhận nhiều kết nối máy khách hơn ... mỗi người sẽ có một ổ cắm riêng, mỗi ổ cắm sẽ được liên kết với một kết nối TCP duy nhất và mỗi kết nối sẽ có một địa chỉ từ xa duy nhất. S sẽ theo dõi trạng thái máy khách (nếu có) bằng cách liên kết nó với ổ cắm.

Vì vậy, đại khái:

  • địa chỉ IP dùng để định tuyến giữa các máy chủ trên mạng
  • cổng để định tuyến đến đúng ổ cắm trên máy chủ
    • Tôi gần như đã nói đúng quy trình , nhưng thực sự có thể có nhiều quy trình (thường là con) tất cả chấp nhận trên cùng một ổ cắm ...
    • tuy nhiên, mỗi khi một trong các acceptcuộc gọi đồng thời trả về, nó chỉ thực hiện trong một quy trình, mỗi ổ cắm của kết nối đến là duy nhất cho một phiên bản của máy chủ
  • ổ cắm là đối tượng mà một quá trình sử dụng để nói chuyện với HĐH về một kết nối cụ thể, giống như một bộ mô tả tệp
    • như đã đề cập trong các bình luận, có rất nhiều cách sử dụng khác cho các socket không sử dụng cổng nào cả: ví dụ, socket socket tạo ra một cặp socket được kết nối với nhau mà không có sơ đồ địa chỉ nào cả quá trình được gọi socketpairlà con của quá trình đó và kế thừa một hoặc được thông qua một trong các ổ cắm từ quy trình đó

1
@Usless Điều đáng nói là các socket không cần phải dựa trên IP như câu trả lời chỉ ra. Nó không chính xác liên quan đến OP nhưng một lời giải thích về các họ ổ cắm sẽ giúp làm tròn câu trả lời này.
hafichuk

Điểm hay - Tôi đã quan tâm đến creep scope khi tôi bắt đầu viết về các máy chủ đa quy trình. Vui lòng chỉnh sửa nó và nếu bạn không, tôi sẽ làm tròn nó vào một lúc nào đó ...
Vô dụng

11
điều này hoàn toàn không vô dụng
l --'''''--------- '' '' '' '' '' ''

Tôi cố gắng hiểu ổ cắm trong thiết bị điện tử, một máy chủ liên kết ổ cắm với số cổng giống như đặt ổ cắm trên tường chờ một số thiết bị điện tử cắm plugin để sạc pin. Nhưng khi được chấp nhận, một ổ cắm mới được trả lại? Tại sao? Một ổ cắm mới được đặt một bức tường? Xin hãy giúp tôi hiểu ý nghĩa của nó bằng một số tương tự.
Aaron Shen

3
Vấn đề ở đây là sự tương tự của bạn là sai. Quên những gì một ổ cắm có nghĩa là trong thế giới vật lý - nó không phải là một phép ẩn dụ cho một cái gì đó khác, chỉ là một thuật ngữ kỹ thuật cho một khái niệm phần mềm kỹ thuật cụ thể. Nó thậm chí không liên quan nhiều đến các cổng hoặc ổ cắm mạng vật lý - bạn chỉ cần hiểu nó, trong miền này, như là một khái niệm theo các thuật ngữ riêng của nó.
Vô dụng

49

Hãy nghĩ về máy của bạn như một tòa nhà chung cư:

  • Một cổng là một số căn hộ.

  • Một ổ cắm là cửa của một căn hộ.

  • Địa chỉ IP là địa chỉ đường phố của tòa nhà.


3
Tôi thích sự tương tự này mặc dù bây giờ tôi đang nghĩ đến việc ở trong căn hộ đó nhìn vào một hành lang dài vô tận với rất nhiều cánh cửa. Tôi không thể ra ngoài. Tôi không thể ra ngoài! :)
Daniel Hollinrake

1
@Caleb A socket is the door of an apartment.Nhưng không thể có nhiều ổ cắm mở tại một cổng?
Suhail Gupta

3
@suhail Đôi khi một căn hộ có nhiều hơn một cửa. Tất cả đều có cùng số căn hộ, nhưng chúng là những cánh cửa khác nhau.
Caleb

45

Một cổng là một phần của địa chỉ trong giao thức TCP và UDP. Nó được sử dụng để giúp HĐH xác định ứng dụng nào sẽ nhận được dữ liệu nhận được. Một hệ điều hành phải hỗ trợ các cổng để hỗ trợ TCP và UDP vì các cổng là một phần nội tại của TCP và UDP.

Ổ cắm là một phần của giao diện mà HĐH trình bày cho các ứng dụng để cho phép chúng gửi và nhận dữ liệu mạng. Hầu hết các cài đặt socket đều hỗ trợ nhiều giao thức ngoài TCP và UDP, một số trong đó không có khái niệm về cổng. Một hệ điều hành không phải hỗ trợ các socket để hỗ trợ TCP hoặc UDP; nó có thể cung cấp một giao diện khác cho các ứng dụng sử dụng. Một socket chỉ đơn giản là một cách gửi và nhận dữ liệu trên một cổng cụ thể.


Một socket về cơ bản là 4 tuple được tạo thành từ: IP nguồn: Port-Dest IP: Port.
Tony The Lion

ý bạn là cổng chỉ tồn tại trong giao thức TCP và UDP ??? Còn http và các giao thức khác thì sao?
Hosein Aqajani

HTTP là một giao thức lớp ứng dụng chạy trên các giao thức lớp vận chuyển như TCP hoặc UDP. Nó không có khái niệm riêng về các cổng, nó thừa hưởng chúng từ giao thức lớp vận chuyển bên dưới.
Dirk Holsopple

8

Một máy tính có một địa chỉ IP xác định nó là một thực thể riêng biệt trên mạng. Chúng tôi thêm một số bổ sung vào đó để cho phép chúng tôi phân biệt giữa các kết nối với máy tính đó. Đây là số cổng. Về phía hệ điều hành của kết nối, bạn cần bộ đệm, trạng thái kết nối, v.v ... Đối tượng logic này là ổ cắm.


0

Một ổ cắm là một đường dẫn truyền thông đến một cổng. Khi bạn muốn chương trình của mình giao tiếp qua mạng, bạn đã cho nó một cách để giải quyết cổng và điều này được thực hiện bằng cách tạo một ổ cắm và gắn nó vào cổng. Về cơ bản, socket = IP + cổng Ổ cắm cung cấp quyền truy cập vào cổng + ip


-1

Địa chỉ IP xác định thiết bị tức là địa chỉ của thiết bị cụ thể, khi bạn đến máy bằng cổng IP ngay bây giờ sẽ xác định quá trình nào trong máy đó sẽ giao tiếp.

Vì vậy, để giao tiếp thực tế diễn ra, bạn cần cả cổng + IP được gọi là socket.

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.