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


928

Đây là một câu hỏi được đặt ra bởi một trong những kỹ sư phần mềm trong tổ chức của tôi. Tôi quan tâm đến định nghĩa rộng nhất.


19
Chỉ cần nhắc lại, các socket không bị giới hạn trong IO mạng. Chúng có sẵn trong tất cả các loại tình huống để truyền dữ liệu giữa các ứng dụng khác nhau.
Oli

Câu trả lời:


977

Tóm lược

Một TCP socket là một endpoint dụ xác định bởi một địa chỉ IP và một cổng trong bối cảnh của một trong hai kết nối TCP cụ thể hoặc tình trạng nghe.

Một cổng là một định danh ảo xác định một điểm cuối dịch vụ (như phân biệt với một dịch vụ dụ endpoint aka định danh session).

Ổ cắm TCP không phải là kết nối , nó là điểm cuối của một kết nối cụ thể.

Có thể có các kết nối đồng thời đến điểm cuối dịch vụ , bởi vì kết nối được xác định bởi cả điểm cuối cục bộ và điểm cuối từ xa , cho phép lưu lượng truy cập được chuyển đến một phiên bản dịch vụ cụ thể.

Chỉ có thể có một ổ cắm nghe cho một kết hợp địa chỉ / cổng nhất định .

Triển lãm

Đây là một câu hỏi thú vị buộc tôi phải kiểm tra lại một số điều mà tôi nghĩ rằng tôi biết từ trong ra ngoài. Bạn sẽ nghĩ một cái tên như "ổ cắm" sẽ tự giải thích: rõ ràng nó được chọn để gợi lên hình ảnh của điểm cuối mà bạn cắm cáp mạng, có sự tương đồng về chức năng mạnh mẽ. Tuy nhiên, theo cách nói của mạng, từ "ổ cắm" mang theo rất nhiều hành lý đến mức cần phải kiểm tra lại cẩn thận.

Theo nghĩa rộng nhất có thể, một cổng là một điểm xâm nhập hoặc đi ra. Mặc dù không được sử dụng trong ngữ cảnh mạng, từ tiếng Pháp porte có nghĩa đen là cửa hoặc cổng , nhấn mạnh thêm thực tế rằng các cổng là điểm cuối giao thông cho dù bạn gửi dữ liệu hoặc thùng thép lớn.

Với mục đích của cuộc thảo luận này, tôi sẽ giới hạn xem xét đối với bối cảnh của các mạng TCP-IP. Mô hình OSI rất tốt nhưng chưa bao giờ được thực hiện hoàn toàn, ít được triển khai rộng rãi trong điều kiện căng thẳng cao lưu lượng truy cập cao.

Sự kết hợp giữa địa chỉ IP và cổng được gọi đúng là điểm cuối và đôi khi được gọi là ổ cắm. Việc sử dụng này bắt nguồn từ RFC793, đặc tả TCP gốc.

Một kết nối TCP được xác định bởi hai điểm cuối aka socket .

Một điểm cuối (ổ cắm) được xác định bởi sự kết hợp của địa chỉ mạng và mã định danh cổng . Lưu ý rằng địa chỉ / cổng không hoàn toàn xác định một ổ cắm (nhiều hơn về điều này sau).

Mục đích của các cổng là phân biệt nhiều điểm cuối trên một địa chỉ mạng nhất định. Bạn có thể nói rằng một cổng là một điểm cuối ảo hóa. Ảo hóa này làm cho nhiều kết nối đồng thời trên một giao diện mạng có thể.

Đó là cặp ổ cắm (4 tuple bao gồm địa chỉ IP của máy khách, số cổng máy khách, địa chỉ IP của máy chủ và số cổng máy chủ) chỉ định hai điểm cuối xác định duy nhất mỗi kết nối TCP trên internet. ( TCP-IP Illustrated Tập 1 , W. Richard Stevens)

Trong hầu hết các ngôn ngữ có nguồn gốc C, các kết nối TCP được thiết lập và thao tác bằng các phương thức trên một thể hiện của lớp Socket. Mặc dù thông thường hoạt động ở mức độ trừu tượng cao hơn, điển hình là một thể hiện của lớp NetworkStream, nhưng điều này thường phơi bày một tham chiếu đến một đối tượng socket. Đối với bộ mã hóa, đối tượng socket này xuất hiện để thể hiện kết nối vì kết nối được tạo và thao tác bằng các phương thức của đối tượng socket.

Trong C #, để thiết lập kết nối TCP (với trình nghe hiện có) trước tiên bạn tạo TcpClient . Nếu bạn không chỉ định điểm cuối cho hàm tạo TcpClient, nó sẽ sử dụng mặc định - bằng cách này hay cách khác, điểm cuối cục bộ được xác định. Sau đó, bạn gọi phương thức Connect trong trường hợp bạn đã tạo. Phương pháp này yêu cầu một tham số mô tả điểm cuối khác.

Tất cả điều này là một chút khó hiểu và khiến bạn tin rằng một ổ cắm là một kết nối, đó là bollocks. Tôi đã lao động dưới sự hiểu lầm này cho đến khi Richard Dorman đặt câu hỏi.

Đã đọc và suy nghĩ rất nhiều, giờ đây tôi tin chắc rằng sẽ có ý nghĩa hơn khi có một lớp TcpConnection với một hàm tạo có hai đối số là LocalEndpointRemoteEndpoint . Bạn có thể có thể hỗ trợ một đối số RemoteEndpoint khi mặc định được chấp nhận cho điểm cuối cục bộ. Điều này không rõ ràng trên các máy tính đa biến, nhưng sự mơ hồ có thể được giải quyết bằng bảng định tuyến bằng cách chọn giao diện có tuyến đường ngắn nhất đến điểm cuối từ xa.

Sự rõ ràng cũng sẽ được tăng cường trong các khía cạnh khác. Một ổ cắm không được xác định bởi sự kết hợp của địa chỉ IP và cổng:

[...] TCP phân tách các phân đoạn đến bằng cách sử dụng cả bốn giá trị bao gồm địa chỉ cục bộ và địa chỉ nước ngoài: địa chỉ IP đích, số cổng đích, địa chỉ IP nguồn và số cổng nguồn. TCP không thể xác định quá trình nào có được một phân đoạn đến bằng cách chỉ nhìn vào cổng đích. Ngoài ra, một trong những điểm cuối [khác nhau] tại [một số cổng nhất định] sẽ nhận được yêu cầu kết nối đến là điểm cuối trong trạng thái nghe. (p255, TCP-IP Minh họa Tập 1 , W. Richard Stevens)

Như bạn có thể thấy, không chỉ có khả năng mà rất có khả năng một dịch vụ mạng có nhiều ổ cắm có cùng địa chỉ / cổng, mà chỉ có một ổ cắm nghe trên một kết hợp địa chỉ / cổng cụ thể. Các triển khai thư viện điển hình trình bày một lớp socket, một thể hiện được sử dụng để tạo và quản lý một kết nối. Điều này là vô cùng đáng tiếc, vì nó gây ra sự nhầm lẫn và dẫn đến sự kết hợp rộng rãi của hai khái niệm này.

Hagrawal không tin tôi (xem bình luận) vì vậy đây là một mẫu thực sự. Tôi đã kết nối một trình duyệt web với http://dilbert.com và sau đó chạy netstat -an -p tcp. Sáu dòng cuối cùng của đầu ra chứa hai ví dụ về thực tế là địa chỉ và cổng không đủ để xác định duy nhất một ổ cắm. Có hai kết nối riêng biệt giữa 192.168.1.3 (máy trạm của tôi) và 54.252.94.236:80 (máy chủ HTTP từ xa)

  TCP    192.168.1.3:63240      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63241      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63242      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:63243      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:64161      65.54.225.168:443      ESTABLISHED

Vì một ổ cắm là điểm cuối của một kết nối, có hai ổ cắm với sự kết hợp địa chỉ / cổng 207.38.110.62:80và hai ổ cắm khác với sự kết hợp địa chỉ / cổng 54.252.94.236:80.

Tôi nghĩ rằng sự hiểu lầm của Hagrawal phát sinh từ việc tôi sử dụng từ "nhận dạng" rất cẩn thận. Tôi có nghĩa là "hoàn toàn, rõ ràng và xác định duy nhất". Trong mẫu trên có hai điểm cuối với sự kết hợp địa chỉ / cổng54.252.94.236:80 . Nếu tất cả những gì bạn có là địa chỉ và cổng, bạn không có đủ thông tin để phân biệt các ổ cắm này. Nó không đủ thông tin để xác định một ổ cắm.

Phụ lục

Đoạn hai của phần 2.7 của RFC793 nói

Một kết nối được chỉ định đầy đủ bởi cặp ổ cắm ở cuối. Một ổ cắm cục bộ có thể tham gia vào nhiều kết nối với các ổ cắm nước ngoài khác nhau.

Định nghĩa về socket này không hữu ích từ góc độ lập trình vì nó không giống với đối tượng socket , là điểm cuối của một kết nối cụ thể. Đối với một lập trình viên, và hầu hết khán giả của câu hỏi này là lập trình viên, đây là một sự khác biệt quan trọng về chức năng.

Người giới thiệu

  1. Minh họa TCP-IP Tập 1 Các giao thức , W. Richard Stevens, 1994 Addison Wesley

  2. RFC793 , Viện Khoa học Thông tin, Đại học Nam California cho DARPA

  3. RFC147 , Định nghĩa về ổ cắm, Joel M. Winett, Phòng thí nghiệm Lincoln


6
Có lẽ, một sự tương tự trong thế giới thực với ổ cắm từ khóa và cổng sẽ giúp những người bình chọn câu hỏi. Vẫn là một lời giải thích tuyệt vời!
rohitverma

5
@rationalcoder - Đọc toàn bộ câu trả lời. Có một sự khác biệt giữa việc được xác định bởi một cái gì đó và được xác định bởi nó. Ví dụ các thể hiện của một lớp được xác định bởi lớp. Họ là một phần nhưng không hoàn toàn được xác định bởi nó.
Peter Wone

6
Tôi đã không bỏ phiếu vì tôi không đồng ý với tuyên bố này - " Ổ cắm không được xác định bởi sự kết hợp giữa địa chỉ IP và cổng: " .. Đọc TCP RFC - tools.ietf.org/html/rfc793 .. Rất rõ ràng rằng Ổ cắm là sự kết hợp giữa IP và cổng, nếu bạn biết IP và cổng thì bạn đã xác định được ổ cắm hoặc điểm cuối, nếu bạn biết cặp ổ cắm tức là cổng IP + của máy khách và cổng IP + của máy chủ thì bạn đã xác định được một kết nối duy nhất ..
hagrawal

6
"Trong mẫu ở trên có hai điểm cuối với tổ hợp địa chỉ / cổng 54.252.94.236:80. Nếu tất cả những gì bạn có là địa chỉ và cổng, bạn không có đủ thông tin để phân biệt các ổ cắm này. Không đủ thông tin để xác định một ổ cắm." Không phải là cùng một ổ cắm, mà là các kết nối khác nhau, giữa hai kết nối bạn có 3 ổ cắm, 2 cục bộ và một ổ cắm máy chủ giống nhau được kết nối với; hoặc thực tế chúng là hai ổ cắm khác nhau? Sẽ không có sự khác biệt nào bởi vì chúng giống nhau, nhưng để phân biệt các kết nối, bạn sẽ cần các ổ cắm cục bộ khác nhau.
Andrew Clavin

6
-1 Câu trả lời của bạn đơn giản là sai. Bạn: "Ổ cắm TCP là ... điểm cuối của một kết nối cụ thể ." RFC 793 : "một ổ cắm có thể được sử dụng đồng thời trong nhiều kết nối ." Tôi không chắc bạn đang sử dụng thư viện nào, nhưng trong các thư viện tôi đã sử dụng, các đối tượng ổ cắm đã được xác định duy nhất bởi một IP và cổng và đã sinh ra các đối tượng kết nối cho mỗi ổ cắm từ xa.
Zaz

187

Một ổ cắm bao gồm ba điều:

  1. Địa chỉ IP
  2. Một giao thức vận chuyển
  3. Số cổng

Một cổng là một số từ 1 đến 65535, bao gồm một cổng logic trong thiết bị. Mỗi kết nối giữa máy khách và máy chủ yêu cầu một ổ cắm duy nhất.

Ví dụ:

  • 1030 là một cảng.
  • (10.1.1.2, TCP, cổng 1030) là một ổ cắm.

80
Không. Một ổ cắm bao gồm năm thứ: {giao thức, địa chỉ cục bộ, cổng cục bộ, địa chỉ từ xa, cổng từ xa}.
Hầu tước Lorne

19
@EJP Không, một lần nữa. Xem câu trả lời được chọn để biết thêm thông tin.
Kehlan Krumme

2
@KorayTugay Đó là trong tiêu đề IP. Điều gì khiến bạn nghĩ rằng lớp TCP không thể thấy điều đó?
Hầu tước Lorne

1
@EJP như tôi có thể thấy trong câu trả lời được bình chọn nhiều nhất ở trên rằng ổ cắm KHÔNG phải là kết nối mà là điểm cuối của kết nối, tại sao nó có thể bao gồm cả cổng cục bộ và cổng từ xa và địa chỉ ip. Một ổ cắm sẽ chỉ đại diện cho một bên của kết nối, tức là cổng cục bộ và địa chỉ IP cục bộ HOẶC cổng từ xa và địa chỉ ip từ xa. Vui lòng sửa tôi nếu tôi sai.
RBT

7
@EJP Still RFC 793: "Một cặp ổ cắm xác định duy nhất mỗi kết nối. Nghĩa là, một ổ cắm có thể được sử dụng đồng thời trong nhiều kết nối." Nếu một ổ cắm đã bao gồm năm điều, làm thế nào có thể có "một cặp ổ cắm" trong trích dẫn của tôi?
Gab 是

100

Một ổ cắm đại diện cho một kết nối duy nhất giữa hai ứng dụng mạng. Hai ứng dụng này thường chạy trên các máy tính khác nhau, nhưng ổ cắm cũng có thể được sử dụng để liên lạc giữa các máy tính trên một máy tính. Các ứng dụng có thể tạo ra nhiều ổ cắm để giao tiếp với nhau. Các ổ cắm là hai chiều, có nghĩa là một trong hai bên của kết nối có khả năng gửi và nhận dữ liệu. Do đó, một ổ cắm có thể được tạo ra trên lý thuyết ở bất kỳ cấp độ nào của mô hình OSI từ 2 trở lên. Các lập trình viên thường sử dụng các socket trong lập trình mạng, mặc dù gián tiếp. Các thư viện lập trình như Winsock ẩn nhiều chi tiết cấp thấp của lập trình socket. Ổ cắm đã được sử dụng rộng rãi từ đầu những năm 1980.

Một cổng đại diện cho một điểm cuối hoặc "kênh" cho truyền thông mạng. Số cổng cho phép các ứng dụng khác nhau trên cùng một máy tính sử dụng tài nguyên mạng mà không can thiệp lẫn nhau. Số cổng thường xuất hiện nhất trong lập trình mạng, đặc biệt là lập trình socket. Đôi khi, mặc dù, số cổng được hiển thị cho người dùng thông thường. Ví dụ: một số trang web mà một người truy cập trên Internet sử dụng URL như sau:

http://www.mairie-metz.fr:8080/ Trong ví dụ này, số 8080 đề cập đến số cổng được sử dụng bởi trình duyệt Web để kết nối với máy chủ Web. Thông thường, một trang web sử dụng cổng số 80 và số này không cần phải được bao gồm trong URL (mặc dù có thể như vậy).

Trong mạng IP, số cổng theo lý thuyết có thể nằm trong khoảng từ 0 đến 65535. Tuy nhiên, hầu hết các ứng dụng mạng phổ biến đều sử dụng số cổng ở đầu thấp của phạm vi (chẳng hạn như 80 cho HTTP).

Lưu ý: Thuật ngữ cổng cũng đề cập đến một số khía cạnh khác của công nghệ mạng. Một cổng có thể đề cập đến một điểm kết nối vật lý cho các thiết bị ngoại vi như cổng nối tiếp, song song và USB. Cổng hạn cũng đề cập đến một số điểm kết nối Ethernet nhất định, chẳng hạn như các điểm trên hub, bộ chuyển mạch hoặc bộ định tuyến.

ref http://compnetworking.about.com/od/basicnetworkingcon accept / l / bldef_port.htmlm

ref http://compnetworking.about.com/od/itinformationt Technology / l / bldef_socket.htmlm


2
Lớp 2 trên mô hình OSI là kết nối giữa các nút, nó không có cơ chế kết nối các quá trình. Tôi không tin rằng bạn có thể xem xét một ổ cắm hiện có tại OSI l2.
Antonio Haley

18
Một mạch là một kết nối - một ổ cắm là một điểm cuối. Một kết nối bao gồm 2 ổ cắm.
Đánh dấu Brackett

" Một ổ cắm biểu thị một kết nối duy nhất giữa hai ứng dụng mạng. " Điều đó không khớp RFC 793, Giao thức điều khiển truyền dẫn giải thích: " Để cho phép nhiều tiến trình trong một Máy chủ sử dụng đồng thời các phương tiện truyền thông TCP, TCP cung cấp một bộ địa chỉ hoặc các cổng trong mỗi máy chủ. Được kết hợp với các địa chỉ mạng và máy chủ từ lớp giao tiếp internet, điều này tạo thành một ổ cắm. Một cặp ổ cắm xác định duy nhất mỗi kết nối. "
Ron Maupin

84

Với một số tương tự

Mặc dù nhiều công cụ kỹ thuật đã được đưa ra ở trên cho ổ cắm ... Tôi muốn thêm câu trả lời của mình, chỉ trong trường hợp, nếu ai đó vẫn không thể cảm thấy sự khác biệt giữa ip, cổng và ổ cắm

Hãy xem xét một máy chủ S ,

và nói người X, Y, Z cần một dịch vụ (nói dịch vụ trò chuyện) từ máy chủ S đó

sau đó

Địa chỉ IP cho biết -> ai? là máy chủ trò chuyện 'S' mà X, Y, Z muốn liên hệ

được rồi, bạn có "máy chủ" là ai

nhưng giả sử rằng máy chủ 'S' cũng đang cung cấp một số dịch vụ khác cho người khác, giả sử 'S' cung cấp dịch vụ lưu trữ cho người A, B, C

sau đó

cảng nói ---> cái nào? dịch vụ bạn (X, Y, Z) cần dịch vụ trò chuyện chứ không phải dịch vụ lưu trữ

được rồi .., bạn làm cho máy chủ biết rằng 'dịch vụ trò chuyện' là thứ bạn muốn chứ không phải là bộ lưu trữ

nhưng

bạn là ba và máy chủ có thể muốn xác định cả ba cách khác nhau

ổ cắm

Bây giờ socket nói -> cái nào?kết nối cụ thể

đó là nói

ổ cắm 1 cho người X

ổ cắm 2 cho người Y

và ổ cắm 3 cho người Z

Tôi hy vọng nó sẽ giúp được ai đó vẫn còn bối rối :)


Vậy X, Y, Z sẽ kết nối với cùng một cổng, tức là cùng một dịch vụ, nhưng có các ổ cắm khác nhau ở phía máy chủ không? Vì vậy, khi, giả sử, X gửi một số gói đến máy chủ, nó sẽ nói: 'tìm cho tôi (giao thức, IP của X, cổng X, IP của S, cổng S) và gửi đến ứng dụng trò chuyện. Tôi giả sử phải có một ràng buộc giữa một số đối tượng cụ thể ứng dụng và đối tượng socket? Ví dụ: khi tôi nhận được một số dữ liệu từ socket-1, tôi muốn hiển thị dưới dạng tin nhắn của người dùng, nhưng ứng dụng cần biết các tin nhắn từ socket A là từ User-X.
nguyên khối

44

Đầu tiên, tôi nghĩ chúng ta nên bắt đầu với một chút hiểu biết về những gì cấu thành nên việc nhận một gói từ A đến B.

Một định nghĩa chung cho một mạng là việc sử dụng Mô hình OSI để phân tách một mạng thành một số lớp theo mục đích. Có một vài điều quan trọng, chúng tôi sẽ đề cập ở đây:

  • Lớp liên kết dữ liệu . Lớp này chịu trách nhiệm nhận các gói dữ liệu từ thiết bị mạng này sang thiết bị khác và ngay phía trên lớp thực sự truyền. Nó nói về địa chỉ MAC và biết cách tìm máy chủ dựa trên địa chỉ MAC (phần cứng) của chúng, nhưng không có gì hơn.
  • Lớp mạng là lớp cho phép bạn vận chuyển dữ liệu qua các máy và qua các ranh giới vật lý, chẳng hạn như các thiết bị vật lý. Lớp mạng về cơ bản phải hỗ trợ một cơ chế dựa trên địa chỉ bổ sung liên quan đến địa chỉ vật lý nào đó; nhập Giao thức Internet (IPv4). Một địa chỉ IP có thể nhận gói tin của bạn từ A đến B qua internet, nhưng không biết gì về cách vượt qua các bước nhảy riêng lẻ. Điều này được xử lý bởi lớp trên phù hợp với thông tin định tuyến.
  • Lớp vận chuyển . Lớp này chịu trách nhiệm xác định cách thông tin nhận được từ A đến B và bất kỳ hạn chế, kiểm tra hoặc lỗi nào đối với hành vi đó. Ví dụ: TCP thêm thông tin bổ sung vào một gói sao cho có thể suy ra nếu các gói bị mất.

TCP chứa, trong số những thứ khác, khái niệm về cổng . Đây là các điểm cuối dữ liệu khác nhau có hiệu quả trên cùng một địa chỉ IP mà Internet Socket ( AF_INET) có thể liên kết.

Khi nó xảy ra, UDP cũng vậy và các giao thức lớp vận chuyển khác. Về mặt kỹ thuật, chúng không cần phải có các cổng, nhưng các cổng này cung cấp một cách để nhiều ứng dụng trong các lớp ở trên sử dụng cùng một máy tính để nhận (và thực sự tạo ra) các kết nối đi.

Điều này đưa chúng ta đến giải phẫu của kết nối TCP hoặc UDP. Mỗi tính năng một cổng nguồn và địa chỉ, và một cổng đích và địa chỉ. Điều này là để trong bất kỳ phiên nào, ứng dụng đích có thể phản hồi, cũng như nhận được từ nguồn.

Vì vậy, các cổng về cơ bản là một cách bắt buộc đặc tả cho phép nhiều kết nối đồng thời chia sẻ cùng một địa chỉ.

Bây giờ, chúng ta cần xem xét cách bạn giao tiếp từ quan điểm ứng dụng với thế giới bên ngoài. Để làm điều này, bạn cần vui lòng hỏi hệ điều hành của mình và vì hầu hết các hệ điều hành đều hỗ trợ cách thức hoạt động của Berkeley Sockets, chúng tôi thấy chúng tôi có thể tạo ra các ổ cắm liên quan đến các cổng từ một ứng dụng như thế này:

int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...

Tuyệt quá! Vì vậy, trong các sockaddrcấu trúc, chúng tôi sẽ chỉ định cổng và bam của chúng tôi! Công việc hoàn thành! Chà, gần như, ngoại trừ:

int fd = socket(AF_UNIX, SOCK_STREAM, 0);

cũng có thể Urgh, đó là một cờ lê trong công trình!

Ok, thực sự thì không. Tất cả những gì chúng ta cần làm là đưa ra một số định nghĩa phù hợp:

  • Ổ cắm internet là sự kết hợp của địa chỉ IP, giao thức và số cổng liên kết của nó mà dịch vụ có thể cung cấp dữ liệu. Vì vậy, cổng tcp 80, stackoverflow.com là một ổ cắm internet.
  • Một ổ cắm unix là một điểm cuối IPC được thể hiện trong hệ thống tệp, ví dụ /var/run/database.sock.
  • API socket là một phương thức yêu cầu ứng dụng có thể đọc và ghi dữ liệu vào socket.

Voila! Điều đó dọn dẹp mọi thứ lên. Vì vậy, trong kế hoạch của chúng tôi sau đó,

  • Cổng là một định danh số, như một phần của giao thức lớp vận chuyển, xác định số dịch vụ sẽ đáp ứng yêu cầu đã cho.

Vì vậy, thực sự một cổng là một tập hợp con của các yêu cầu để hình thành một ổ cắm internet. Thật không may, nó chỉ xảy ra rằng ý nghĩa của ổ cắm từ đã được áp dụng cho một số ý tưởng khác nhau. Vì vậy, tôi chân thành khuyên bạn nên đặt tên cho ổ cắm dự án tiếp theo của bạn, chỉ để thêm vào sự nhầm lẫn;)


Đây là lý do tại sao đạn không rời và sẽ không rời Powerpoint; họ làm việc!
Anurag Kalia

Giới thiệu rất hay về tcp-ip và giao tiếp mạng. Người mới bắt đầu, đọc cái này trước.
Colin

32

Ổ cắm = Địa chỉ IP + một cổng (địa chỉ số)
Cùng nhau họ xác định điểm cuối cho kết nối mạng trên máy. (Có phải tôi vừa làm hỏng mạng 101 không?)


7
Tôi tin rằng cổng có ý nghĩa rộng hơn định nghĩa của bạn.
Richard Dorman

2
Và các socket không chỉ tuân theo ngăn xếp TCP / IP. Xem các socket miền UNIX hoặc các socket truyền thông liên tiến trình nói chung.
matthias krull

không chắc chắn về câu trả lời này. Bạn có thể sử dụng HTTP để liên lạc với một quá trình khác thông qua các socket mà không cần gán một cổng.
SeF

31

Nói chung, bạn sẽ nhận được rất nhiều lý thuyết nhưng một trong những cách dễ nhất để phân biệt hai khái niệm này là như sau:

Để có được một dịch vụ, bạn cần một số dịch vụ. Số dịch vụ này được gọi là một cổng. Đơn giản như thế.

Ví dụ: HTTP là một dịch vụ đang chạy trên cổng 80.

Bây giờ, nhiều người có thể yêu cầu dịch vụ và kết nối từ máy khách-máy chủ đã được thiết lập. Sẽ có rất nhiều kết nối. Mỗi kết nối đại diện cho một khách hàng. Để duy trì mỗi kết nối, máy chủ tạo một ổ cắm cho mỗi kết nối để duy trì máy khách của nó.


Có phải mỗi ổ cắm yêu cầu cổng riêng của nó?
Thứ

Tuyệt vời. Cách đơn giản nhất để trình bày một kiến ​​thức núi.
Asif Mehmood

5
Tôi không chắc câu nói của bạn: "máy chủ tạo ổ cắm trên mỗi kết nối để duy trì máy khách của nó" là chính xác.
Rushi Agrawal

1
@RushiAgrawal Sau đó tôi khuyên bạn nên tìm nó. Cụ thể, xem người đàn ông chấp nhận.
Hầu tước Lorne

1
Điều này ngụ ý rằng đối với mỗi ổ cắm mà máy chủ tạo cho mỗi kết nối để duy trì máy khách của nó có thể có cùng số cổng (chẳng hạn như cổng 80 để tiếp tục kết nối HTTP) nhưng với địa chỉ IP khác nhau của các máy khách mà các yêu cầu kết nối được gửi từ đó. đúng?
Randika Vishman

25

Dường như có rất nhiều câu trả lời tương đương ổ cắm với kết nối giữa 2 PC..những gì tôi nghĩ là hoàn toàn không chính xác. Một ổ cắm luôn là điểm cuối trên 1 PC, có thể có hoặc không được kết nối - chắc chắn tất cả chúng ta đều đã sử dụng ổ cắm nghe hoặc UDP * tại một số điểm. Phần quan trọng là địa chỉ và hoạt động. Gửi tin nhắn đến 1.1.1.1:1234 không có khả năng hoạt động, vì không có ổ cắm được xác định cho điểm cuối đó.

Các ổ cắm là giao thức cụ thể - vì vậy việc triển khai tính duy nhất mà cả TCP / IPUDP / IP sử dụng * (ipaddress: port), khác với ví dụ: IPX (Mạng, Nút và ... ahem, ổ cắm - nhưng khác Ổ cắm hơn có nghĩa là thuật ngữ "ổ cắm" chung. Số ổ cắm IPX tương đương với cổng IP). Nhưng, tất cả đều cung cấp một điểm cuối địa chỉ duy nhất.

Vì IP đã trở thành giao thức thống trị, một cổng (theo thuật ngữ mạng) đã trở nên đồng bộ với số cổng UDP hoặc TCP - là một phần của địa chỉ ổ cắm.

  • UDP không có kết nối - có nghĩa là không có mạch ảo nào giữa 2 điểm cuối được tạo. Tuy nhiên, chúng tôi vẫn coi các ổ cắm UDP là điểm cuối. Các hàm API làm rõ rằng cả hai chỉ là loại ổ cắm khác nhau - SOCK_DGRAMlà UDP (chỉ gửi tin nhắn) và SOCK_STREAMlà TCP (tạo mạch ảo).

  • Về mặt kỹ thuật, tiêu đề IP giữ Địa chỉ IP và giao thức trên đầu IP (UDP hoặc TCP) giữ số cổng. Điều này cho phép có các giao thức khác (ví dụ: ICMP không có số cổng, nhưng có thông tin địa chỉ IP).


25

Câu trả lời ngắn gọn.

Một cổng có thể được mô tả như một địa chỉ nội bộ trong một máy chủ xác định chương trình hoặc quy trình.

Một ổ cắm có thể được mô tả như một giao diện lập trình cho phép một chương trình giao tiếp với các chương trình hoặc quy trình khác, trên internet hoặc cục bộ.


3
Từ 'nội bộ' trong mô tả cổng nghe có vẻ giống như 'không công khai' đối với tôi.
Jonas N

Vì vậy, chúng ta có thể nói: Ổ cắm chạy bên trong Cổng? hoặc Cổng chạy bên trong Ổ cắm?
Gucho Ca

@GuchoCa Chúng ta không thể nói rằng một trong hai ổ cắm hoặc cổng chạy, hãy để một cái bên trong cái kia. Không rõ những gì bạn đang hỏi.
Hầu tước Lorne

16

Chúng là các thuật ngữ từ hai miền khác nhau: 'cổng' là một khái niệm từ mạng TCP / IP, 'socket' là một thứ API (lập trình). Một 'ổ cắm' được tạo ra (bằng mã) bằng cách lấy một cổng và tên máy chủ hoặc bộ điều hợp mạng và kết hợp chúng thành một cấu trúc dữ liệu mà bạn có thể sử dụng để gửi hoặc nhận dữ liệu.


Đối với câu trả lời chung nhất, đình công "được thực hiện bằng cách lấy một cổng và tên máy chủ hoặc bộ điều hợp mạng và kết hợp chúng thành một." Ví dụ, một ổ cắm UNIX là (theo mã) một cấu trúc dữ liệu (hoặc đối tượng) mà bạn có thể sử dụng để gửi hoặc nhận dữ liệu.
Josiah Yoder

14

Đây là những khái niệm mạng cơ bản vì vậy tôi sẽ giải thích chúng một cách dễ dàng nhưng toàn diện để hiểu chi tiết.

  • Một ổ cắm giống như một chiếc điện thoại (tức là thiết bị đầu cuối đến đầu cuối để liên lạc)
  • IP giống như số điện thoại của bạn (tức là địa chỉ cho ổ cắm của bạn)
  • Cổng giống như người bạn muốn nói chuyện (nghĩa là dịch vụ bạn muốn đặt hàng từ địa chỉ đó)
  • Một ổ cắm có thể là một máy khách hoặc một ổ cắm máy chủ (tức là trong một công ty, điện thoại của bộ phận hỗ trợ khách hàng là một máy chủ nhưng một điện thoại trong nhà của bạn chủ yếu là một khách hàng)

Vì vậy, một ổ cắm trong mạng là một thiết bị giao tiếp ảo được liên kết với một cặp (ip, port) = (địa chỉ, dịch vụ).

Ghi chú:

  • Một máy, máy tính, máy chủ, điện thoại di động hoặc PC có thể có nhiều địa chỉ, nhiều cổng mở và do đó có nhiều ổ cắm. Giống như trong một văn phòng, bạn có thể có nhiều điện thoại với nhiều số điện thoại và nhiều người để nói chuyện.
  • Sự tồn tại của một cổng mở / hoạt động đòi hỏi bạn phải có một ổ cắm ràng buộc với nó, bởi vì đó là ổ cắm làm cho cổng có thể truy cập được. Tuy nhiên, hiện tại bạn có thể có các cổng chưa sử dụng.
  • Cũng lưu ý, trong ổ cắm máy chủ, bạn có thể liên kết nó với (một cổng, địa chỉ cụ thể của máy) hoặc (một cổng, tất cả các địa chỉ của máy) như trong điện thoại bạn có thể kết nối nhiều đường dây điện thoại (số điện thoại) với một điện thoại hoặc một đường dây điện thoại cụ thể đến điện thoại và bạn vẫn có thể liên lạc với một người thông qua tất cả các đường dây điện thoại này hoặc thông qua một đường dây điện thoại cụ thể.
  • Bạn không thể liên kết (liên kết) một ổ cắm với hai cổng như trong điện thoại thường không phải lúc nào bạn cũng có thể có hai người sử dụng cùng một điện thoại.
  • Nâng cao: trên cùng một máy, bạn không thể có hai ổ cắm có cùng loại (máy khách hoặc máy chủ) và cùng một cổng và ip. Tuy nhiên, nếu bạn là khách hàng, bạn có thể mở hai kết nối, với hai ổ cắm, đến một máy chủ vì cổng cục bộ trong mỗi ổ cắm của các máy khách này là khác nhau)

Hy vọng nó sẽ xóa bạn nghi ngờ


Thật thú vị khi thấy tất cả những hiểu biết và sự tương tự của các địa chỉ socket / port / ip theo câu hỏi này. Và tôi thích câu trả lời này.
Bloodmoon

12

Sau khi đọc các câu trả lời được bình chọn xuất sắc, tôi thấy rằng điểm sau đây cần nhấn mạnh cho tôi, một người mới đến lập trình mạng:

Kết nối TCP-IP là các đường dẫn hai chiều kết nối một địa chỉ: kết hợp cổng với địa chỉ khác: kết hợp cổng. Do đó, bất cứ khi nào bạn mở kết nối từ máy cục bộ sang cổng trên máy chủ từ xa (giả sử www.google.com:80), bạn cũng đang liên kết số cổng mới trên máy của mình với kết nối, để cho phép máy chủ gửi những điều trở lại với bạn, (ví dụ 127.0.0.1:65234). Có thể hữu ích khi sử dụng netstat để xem xét các kết nối của máy của bạn:

> netstat -nWp tcp (on OS X)
Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  192.168.0.6.49871      17.172.232.57.5223     ESTABLISHED
...

12

Địa chỉ ổ cắm là địa chỉ IP & số cổng

123.132.213.231         # IP address
               :1234    # port number
123.132.213.231:1234    # socket address

Một kết nối xảy ra khi 2 ổ cắm được liên kết với nhau.


Không có những thứ như ràng buộc hai ổ cắm với nhau. Từ "ràng buộc" có nghĩa là một cái gì đó khác với các cổng.
Hầu tước Lorne

10

Ổ cắm là một loại xử lý tệp đặc biệt được sử dụng bởi một quy trình để yêu cầu các dịch vụ mạng từ hệ điều hành. Địa chỉ ổ cắm là bộ ba: {giao thức, địa chỉ cục bộ, quy trình cục bộ} trong đó quy trình cục bộ được xác định bởi một số cổng.

Trong bộ TCP / IP, ví dụ:

{tcp, 193.44.234.3, 12345}

Cuộc hội thoại là liên kết giao tiếp giữa hai quá trình, do đó mô tả mối liên kết giữa hai quá trình. Liên kết là 5 tuple chỉ định hoàn toàn hai quy trình bao gồm một kết nối: {giao thức, địa chỉ cục bộ, quy trình cục bộ, địa chỉ nước ngoài, quy trình nước ngoài}

Trong bộ TCP / IP, ví dụ:

{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}

có thể là một hiệp hội hợp lệ.

Liên kết nửa là: {giao thức, địa chỉ cục bộ, quy trình cục bộ}

hoặc là

{giao thức, địa chỉ nước ngoài, quy trình nước ngoài}

trong đó chỉ định mỗi nửa của một kết nối.

Hiệp hội nửa còn được gọi là ổ cắm hoặc địa chỉ vận chuyển. Đó là, một ổ cắm là một điểm kết thúc cho giao tiếp có thể được đặt tên và giải quyết trong một mạng. Giao diện ổ cắm là một trong một số giao diện lập trình ứng dụng (API) cho các giao thức truyền thông. Được thiết kế để trở thành một giao diện lập trình giao tiếp chung, lần đầu tiên nó được giới thiệu bởi hệ thống UNIX 4.2BSD. Mặc dù nó chưa được tiêu chuẩn hóa, nhưng nó đã trở thành một tiêu chuẩn công nghiệp thực tế.


Câu trả lời này là câu trả lời cho tôi. Tôi đoán đó là bởi vì không ai khác đề cập đến hiệp hội từ. Lời giải thích hay.
hợp lý

Không có số quy trình trong bất kỳ ví dụ của bạn. Từ bạn đang tìm kiếm là 'cổng'.
Hầu tước Lorne

Đọc đoạn đầu tiên .. Nó được đề cập rõ ràng ở đó. Hãy cho tôi biết bất kỳ sự mơ hồ nào bằng cách trích dẫn cụm từ chính xác .. Sẽ hữu ích cho tôi để ứng biến.
Krishna

7

Một ổ cắm là một điểm cuối truyền thông. Một socket không liên quan trực tiếp đến họ giao thức TCP / IP, nó có thể được sử dụng với bất kỳ giao thức nào mà hệ thống của bạn hỗ trợ. API socket C mong muốn bạn trước tiên nhận được một đối tượng socket trống từ hệ thống mà sau đó bạn có thể liên kết với một địa chỉ socket cục bộ (để truy xuất trực tiếp lưu lượng đến cho các giao thức không có kết nối hoặc chấp nhận các yêu cầu kết nối đến cho các giao thức hướng kết nối) hoặc rằng bạn có thể kết nối với một địa chỉ ổ cắm từ xa (cho cả hai loại giao thức). Bạn thậm chí có thể thực hiện cả hai nếu bạn muốn kiểm soát cả hai, địa chỉ ổ cắm cục bộ mà ổ cắm bị ràng buộc và địa chỉ ổ cắm từ xa mà ổ cắm được kết nối. Đối với các giao thức không có kết nối, việc kết nối một ổ cắm thậm chí là tùy chọn nhưng nếu bạn không làm điều đó, bạn ' cũng sẽ phải chuyển địa chỉ đích với mỗi gói bạn muốn gửi qua ổ cắm vì làm thế nào khác ổ cắm sẽ biết nơi gửi dữ liệu này đến đâu? Ưu điểm là bạn có thể sử dụng một ổ cắm duy nhất để gửi các gói đến các địa chỉ ổ cắm khác nhau. Khi bạn đã cấu hình ổ cắm của mình và thậm chí có thể kết nối, hãy coi nó là một ống giao tiếp hai chiều. Bạn có thể sử dụng nó để truyền dữ liệu đến một số đích và một số đích có thể sử dụng nó để truyền dữ liệu lại cho bạn. Những gì bạn viết vào một ổ cắm được gửi đi và những gì đã nhận được có sẵn để đọc. Bạn có thể sử dụng nó để truyền dữ liệu đến một số đích và một số đích có thể sử dụng nó để truyền dữ liệu lại cho bạn. Những gì bạn viết vào một ổ cắm được gửi đi và những gì đã nhận được có sẵn để đọc. Bạn có thể sử dụng nó để truyền dữ liệu đến một số đích và một số đích có thể sử dụng nó để truyền dữ liệu lại cho bạn. Những gì bạn viết vào một ổ cắm được gửi đi và những gì đã nhận được có sẵn để đọc.

Mặt khác, các cổng là thứ mà chỉ các giao thức nhất định của ngăn xếp giao thức TCP / IP mới có. Các gói TCP và UDP có cổng. Một cổng chỉ là một số đơn giản. Sự kết hợp giữa cổng nguồn và cổng đích xác định một kênh liên lạc giữa hai máy chủ. Ví dụ: bạn có thể có một máy chủ sẽ là cả hai, một máy chủ HTTP đơn giản và một máy chủ FTP đơn giản. Nếu bây giờ một gói đến địa chỉ của máy chủ đó, làm sao biết đó là gói cho HTTP hay máy chủ FTP? Chà, nó sẽ biết vì máy chủ HTTP sẽ chạy trên cổng 80 và máy chủ FTP ở cổng 21, vì vậy nếu gói đến với cổng đích 80, thì nó dành cho máy chủ HTTP chứ không phải cho máy chủ FTP. Ngoài ra gói có một cổng nguồn vì không có cổng nguồn như vậy, một máy chủ chỉ có thể có một kết nối đến một địa chỉ IP tại một thời điểm. Cổng nguồn giúp máy chủ có thể phân biệt các kết nối giống hệt nhau: tất cả chúng đều có cùng một cổng đích, ví dụ cổng 80, cùng một IP đích (IP của máy chủ) và cùng một IP nguồn, vì tất cả chúng đều đến từ cùng một máy khách, nhưng vì chúng có các cổng nguồn khác nhau, nên máy chủ có thể phân biệt chúng với nhau. Và khi máy chủ gửi trả lời lại, nó sẽ thực hiện với cổng yêu cầu đến từ đó, theo cách đó, khách hàng cũng có thể phân biệt các phản hồi khác nhau mà nó nhận được từ cùng một máy chủ.


2
Điều này là không chính xác. Một ổ cắm không phải là một điểm cuối. Một ổ cắm được xác định bởi hai điểm cuối. Mỗi điểm cuối được xác định bởi một địa chỉ mạng và một cổng. Mục đích của các cổng là phân biệt nhiều điểm cuối trên cùng một địa chỉ mạng, để có thể hỗ trợ nhiều ổ cắm đồng thời.
Peter Wone

1
Tôi nhận thấy rằng RFC793 (thông số TCP gốc) không đề cập đến sự kết hợp giữa địa chỉ mạng và cổng như một ổ cắm, vì vậy tôi có thể thấy bạn đã lấy cái này ở đâu, nhưng nó vẫn không chính xác bởi một ổ cắm được xác định bởi hai điểm cuối.
Peter Wone

2
Về phản ánh văn học là mâu thuẫn và tôi xin lỗi. Giao tiếp nói rất nghiêm ngặt không xảy ra cho đến khi kết nối TCP được thiết lập giữa hai điểm cuối (còn gọi là ổ cắm), mỗi điểm được xác định bởi một địa chỉ mạng và một cổng. Tôi từ bỏ.
Peter Wone

6

Cổng là phần dễ nhất, nó chỉ là một định danh duy nhất cho một ổ cắm. Ổ cắm là thứ mà các quá trình có thể sử dụng để thiết lập kết nối và liên lạc với nhau. Tall Jeff có một sự tương tự điện thoại tuyệt vời không hoàn hảo, vì vậy tôi quyết định sửa nó:

  • ip và cổng ~ số điện thoại
  • ổ cắm ~ thiết bị điện thoại
  • kết nối ~ cuộc gọi điện thoại
  • thiết lập kết nối ~ gọi một số
  • quy trình, ứng dụng từ xa ~ người
  • tin nhắn ~ lời nói

Làm rõ (đặc biệt là khi bạn xem xét lịch sử chuyển đổi điện thoại là một phần nền tảng của thuật ngữ mạng ..)
oɔɯǝɹ

Có một cái nhìn vào một netstatmàn hình một thời gian. Tất cả các ổ cắm được chấp nhận từ một ổ cắm nghe chia sẻ cùng một cổng. Ergo một cổng không phải là một định danh duy nhất cho một ổ cắm.
Hầu tước Lorne

6

Một ứng dụng bao gồm các cặp quy trình giao tiếp qua mạng (cặp máy khách-máy chủ). Các quy trình này gửi và nhận tin nhắn, vào và từ mạng thông qua giao diện phần mềm được gọi là socket . Xem xét sự tương tự được trình bày trong cuốn sách "Mạng máy tính: Cách tiếp cận từ trên xuống". Có một ngôi nhà muốn liên lạc với ngôi nhà khác. Ở đây, ngôi nhà tương tự như một quá trình, và cánh cửa đến một ổ cắm. Quá trình gửi giả định rằng có một cơ sở hạ tầng ở phía bên kia của cửa sẽ vận chuyển dữ liệu đến đích. Khi tin nhắn được gửi đến ở phía bên kia, nó sẽ đi qua cửa của người nhận (ổ cắm) vào nhà (xử lý). Hình minh họa này từ cùng một cuốn sách có thể giúp bạn:
nhập mô tả hình ảnh ở đây
Ổ cắm là một phần của lớp vận chuyển, cung cấp giao tiếp logic cho các ứng dụng. Điều này có nghĩa là theo quan điểm của ứng dụng, cả hai máy chủ đều được kết nối trực tiếp với nhau, mặc dù có rất nhiều bộ định tuyến và / hoặc chuyển đổi giữa chúng. Do đó, một ổ cắm không phải là một kết nối, nó là điểm cuối của kết nối. Các giao thức lớp vận chuyển chỉ được thực hiện trên các máy chủ chứ không phải trên các bộ định tuyến trung gian.
Cổngcung cấp phương tiện địa chỉ nội bộ cho một máy. Mục đích chính là cho phép nhiều quy trình gửi và nhận dữ liệu qua mạng mà không can thiệp vào các quy trình khác (dữ liệu của họ). Tất cả các ổ cắm được cung cấp với một số cổng. Khi một phân đoạn đến máy chủ lưu trữ, lớp vận chuyển sẽ kiểm tra số cổng đích của phân khúc. Sau đó, chuyển tiếp phân khúc đến ổ cắm tương ứng. Công việc phân phối dữ liệu trong phân đoạn lớp vận chuyển đến đúng ổ cắm được gọi là khử ghép kênh . Dữ liệu của phân khúc sau đó được chuyển tiếp đến quy trình được gắn vào ổ cắm.


5

Một ổ cắm là một cấu trúc trong phần mềm của bạn. Đó là ít nhiều một tập tin; Nó có các hoạt động như đọc và viết. Nó không phải là một thứ vật chất; đó là một cách để phần mềm của bạn đề cập đến những thứ vật lý.

Một cổng là một thứ giống như thiết bị. Mỗi máy chủ lưu trữ có một hoặc nhiều mạng (đó là các mạng vật lý); một máy chủ lưu trữ có một địa chỉ trên mỗi mạng. Mỗi địa chỉ có thể có hàng ngàn cổng.

Một ổ cắm chỉ có thể được sử dụng một cổng tại một địa chỉ. Ổ cắm phân bổ cổng xấp xỉ như phân bổ một thiết bị cho I / O hệ thống tệp. Khi cổng được phân bổ, không có ổ cắm nào khác có thể kết nối với cổng đó. Cổng sẽ được giải phóng khi đóng ổ cắm.

Hãy xem thuật ngữ TCP / IP .


3
Mô tả về ổ cắm này là khá cơ sở. Một socket là về kết nối giữa một cặp tuple trong đó một tuple đề cập đến cặp IP ADDR & Port. Ngoài ra, nhiều ổ cắm CÓ THỂ kết nối với cùng một cổng. Bạn nghĩ máy chủ web mất nhiều kết nối trên cổng 80 như thế nào? Đây là một câu trả lời kém
Tall Jeff

1
Lấy làm tiếc. Nhiều ổ cắm không được kết nối với cổng 80. Một ổ cắm được kết nối và sinh ra các ổ cắm bổ sung nơi chuyển giao thực sự xảy ra. Xem opengroup.org/onlinepub/009695399/fifts/listen.html .
S.Lott

1
Trên thực tế, mô tả tại opengroup.org/onlinepub/009695399/fifts/connect.html là tốt hơn. Ổ cắm ngang hàng được trả về bởi một kết nối KHÔNG ở cổng 80.
S.Lott

1
Bài này không chính xác trong một số chi tiết và sai lệch trong một số khía cạnh.
Peter Wone

@Peter Wone: Những chi tiết nào? Những khía cạnh nào? Hy vọng học hỏi từ những sai lầm của tôi.
S.Lott

5

từ Hướng dẫn Java Java :

Ổ cắm là một điểm cuối của liên kết giao tiếp hai chiều giữa hai chương trình đang chạy trên mạng. Một ổ cắm được liên kết với một số cổng để lớp TCP có thể xác định ứng dụng mà dữ liệu được gửi đến.


Đó chỉ là một hướng dẫn, và chắc chắn không phải là một tài liệu tham khảo quy phạm.
Hầu tước Lorne

"Ổ cắm là một điểm cuối của liên kết giao tiếp hai chiều" Có phải đó không phải là định nghĩa ổ cắm, Không phải là hướng dẫn java ??
nguyện

@prayagupd Tất nhiên đó là một định nghĩa, nhưng đó là từ một hướng dẫn, không phải là một đặc điểm kỹ thuật.
Hầu tước Lorne

4

Cổng và ổ cắm có thể được so sánh với Chi nhánh Ngân hàng.

Số tòa nhà của "Ngân hàng" tương tự như địa chỉ IP. Một ngân hàng có các phần khác nhau như:

  1. Bộ phận tài khoản tiết kiệm
  2. Bộ phận cho vay cá nhân
  3. Bộ phận cho vay mua nhà
  4. Bộ phận khiếu nại

Vì vậy, 1 (bộ phận tài khoản tiết kiệm), 2 (bộ phận cho vay cá nhân), 3 (bộ phận cho vay mua nhà) và 4 (bộ phận khiếu nại) là các cảng.

Bây giờ hãy để chúng tôi nói bạn đi mở tài khoản tiết kiệm, bạn đến ngân hàng (địa chỉ IP), sau đó bạn đến "bộ phận tài khoản tiết kiệm" (cổng số 1), sau đó bạn gặp một trong những nhân viên làm việc trong "bộ phận tài khoản tiết kiệm ". Hãy để chúng tôi gọi anh ấy SAVINGACCOUNT_EMPLOYEE1 để mở tài khoản.

SAVINGACCOUNT_EMPLOYEE1 là mô tả ổ cắm của bạn, vì vậy có thể có SAVINGACCOUNT_EMPLOYEE1 để SAVINGACCOUNT_EMPLOYEEN. Đây là tất cả các mô tả ổ cắm.

Tương tự như vậy, các bộ phận khác sẽ có nhân viên làm việc theo họ và họ tương tự như ổ cắm.


3

Một socket là một cơ chế I / O dữ liệu. Cổng là một khái niệm hợp đồng của một giao thức truyền thông . Một ổ cắm có thể tồn tại mà không cần một cổng. Một cổng có thể tồn tại với một ổ cắm cụ thể (ví dụ: nếu một số ổ cắm đang hoạt động trên cùng một cổng, có thể được phép cho một số giao thức).

Một cổng được sử dụng để xác định ổ cắm mà máy thu nên định tuyến gói đến, với nhiều giao thức, nhưng không phải lúc nào cũng cần và lựa chọn ổ cắm nhận có thể được thực hiện bằng các phương tiện khác - một cổng hoàn toàn là một công cụ được sử dụng bởi trình xử lý giao thức hệ thống con. ví dụ: nếu một giao thức không sử dụng cổng, các gói có thể đi đến tất cả các ổ cắm nghe hoặc bất kỳ ổ cắm nào.


3

Thuật ngữ TCP / IP tương đối là những gì tôi giả sử được ngụ ý bởi câu hỏi. Trong điều khoản của Giáo dân:

PORT giống như số điện thoại của một ngôi nhà cụ thể trong một mã zip cụ thể. Mã ZIP của thị trấn có thể được coi là địa chỉ IP của thị trấn và tất cả các ngôi nhà trong thị trấn đó.

Mặt khác, SOCKET giống như một cuộc gọi điện thoại được thiết lập giữa các điện thoại của một cặp nhà nói chuyện với nhau. Những cuộc gọi đó có thể được thiết lập giữa các ngôi nhà trong cùng một thị trấn hoặc hai ngôi nhà ở các thị trấn khác nhau. Đó là con đường được thiết lập tạm thời giữa cặp điện thoại nói chuyện với nhau, đó là SOCKET.


2
Một ổ cắm là một điểm cuối. Nó tồn tại trước khi kết nối được thiết lập (TCP) hoặc không có kết nối (UDP). Ergo nó không phải là kết nối.
Hầu tước Lorne

2

Theo nghĩa rộng, Ổ cắm - chỉ là một ổ cắm, giống như ổ cắm điện, cáp hoặc điện thoại của bạn. Một điểm mà "công cụ cần thiết" (sức mạnh, tín hiệu, thông tin) có thể đi ra và đi vào. Nó ẩn rất nhiều thứ chi tiết, không cần thiết cho việc sử dụng "những thứ cần thiết". Theo cách nói của phần mềm, nó cung cấp một cách chung để xác định cơ chế giao tiếp giữa hai thực thể (những thực thể đó có thể là bất cứ thứ gì - hai ứng dụng, hai thiết bị riêng biệt, không gian User & Kernel trong HĐH, v.v.)

Một cổng là một phân biệt đối xử điểm cuối. Nó phân biệt một điểm cuối với điểm khác. Ở cấp độ mạng, nó phân biệt ứng dụng này với ứng dụng khác, để ngăn xếp mạng có thể truyền thông tin đến ứng dụng phù hợp.


2

Đã có câu trả lời lý thuyết đã được đưa ra cho câu hỏi này. Tôi muốn đưa ra một ví dụ thực tế cho câu hỏi này, điều này sẽ làm rõ sự hiểu biết của bạn về Ổ cắm và Cổng.

Tôi tìm thấy nó ở đây

Ví dụ này sẽ hướng dẫn bạn thông qua quá trình kết nối với một trang web, chẳng hạn như Wiley. Bạn sẽ mở trình duyệt web của mình (như Mozilla Firefox) và nhập www.wiley.com vào thanh địa chỉ. Trình duyệt web của bạn sử dụng máy chủ Hệ thống Tên miền (DNS) để tra cứu tên www.wiley.com để xác định địa chỉ IP của nó. Trong ví dụ này, địa chỉ là 192.0.2.100.

Firefox tạo kết nối đến địa chỉ 192.0.2.100 và tới cổng nơi máy chủ web của lớp ứng dụng đang hoạt động. Firefox biết cổng nào mong đợi vì đây là cổng nổi tiếng. Cổng nổi tiếng cho một máy chủ web là cổng TCP 80.

Ổ cắm đích mà Firefox cố gắng kết nối được viết dưới dạng socket: port hoặc trong ví dụ này, 192.0.2.100:80. Đây là phía máy chủ của kết nối, nhưng máy chủ cần biết nơi gửi trang web bạn muốn xem trong Mozilla Firefox, vì vậy bạn cũng có một ổ cắm cho phía máy khách của kết nối.

Kết nối phía máy khách được tạo thành từ địa chỉ IP của bạn, chẳng hạn như 192.168.1.25 và số cổng động được chọn ngẫu nhiên. Ổ cắm được liên kết với Firefox trông giống như 192.168.1.25:49175. Vì các máy chủ web hoạt động trên cổng TCP 80, cả hai ổ cắm này đều là ổ cắm TCP, trong khi nếu bạn kết nối với máy chủ hoạt động trên cổng UDP, cả ổ cắm máy chủ và máy khách sẽ là ổ cắm UDP.


Trích dẫn chất lượng rất kém. Đoạn thứ ba sử dụng sai từ 'socket' như thể nó có nghĩa là 'địa chỉ IP'. Nó không.
Hầu tước Lorne

2

Ổ cắm là một bản tóm tắt được cung cấp bởi kernel cho các ứng dụng người dùng cho I / O dữ liệu. Loại ổ cắm được xác định bởi giao thức xử lý, giao tiếp IPC, v.v. Vì vậy, nếu ai đó tạo ổ cắm TCP, anh ta có thể thực hiện các thao tác như đọc dữ liệu vào ổ cắm và ghi dữ liệu vào nó bằng các phương thức đơn giản và xử lý giao thức cấp thấp hơn như chuyển đổi TCP và chuyển tiếp gói đến các giao thức mạng cấp thấp hơn được thực hiện bằng cách thực hiện ổ cắm cụ thể trong kernel. Ưu điểm là người dùng không cần phải lo lắng về việc xử lý các lỗi cụ thể của giao thức và chỉ nên đọc và ghi dữ liệu vào ổ cắm như một bộ đệm thông thường. Điều tương tự cũng đúng trong trường hợp IPC, người dùng chỉ cần đọc và ghi dữ liệu vào socket và kernel xử lý tất cả các chi tiết cấp thấp hơn dựa trên loại socket được tạo.

Cổng cùng với IP giống như cung cấp một địa chỉ cho ổ cắm, mặc dù không cần thiết nhưng nó giúp truyền thông mạng.


2

Một cổng đơn có thể có một hoặc nhiều ổ cắm được kết nối với các IP bên ngoài khác nhau giống như nhiều ổ cắm điện.

  TCP    192.168.100.2:9001     155.94.246.179:39255   ESTABLISHED     1312
  TCP    192.168.100.2:9001     171.25.193.9:61832     ESTABLISHED     1312
  TCP    192.168.100.2:9001     178.62.199.226:37912   ESTABLISHED     1312
  TCP    192.168.100.2:9001     188.193.64.150:40900   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.23.194.149:43970   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.49.73.11:38842     ESTABLISHED     1312

2

Ổ cắm là sự trừu tượng hóa SW của điểm cuối mạng, được sử dụng làm giao diện cho ứng dụng. Trong Java, C # nó được đại diện bởi đối tượng, trong Linux, Unix nó là một tệp.

Cổng chỉ là một thuộc tính của một socket mà bạn đã chỉ định nếu bạn muốn thiết lập một giao tiếp. Để nhận gói tin từ một ổ cắm, bạn phải liên kết nó với cổng cục bộ và NIC cụ thể (với địa chỉ IP cục bộ) hoặc tất cả các NIC (INADDR_ANY được chỉ định trong lệnh gọi liên kết). Để gửi gói, bạn phải chỉ định cổng và IP của ổ cắm từ xa.


1

Một socket về cơ bản là một điểm cuối cho giao tiếp mạng, bao gồm ít nhất một địa chỉ IP và một cổng. Trong Java / C #, socket là mức triển khai cao hơn ở một phía của kết nối hai chiều.

Ngoài ra, một định nghĩa trong tài liệu Java .


Trong Java Turorial, ý bạn là.
Hầu tước Lorne

1

Hải cảng:

Một cổng có thể đề cập đến một điểm kết nối vật lý cho các thiết bị ngoại vi như cổng nối tiếp, song song và USB. Cổng hạn cũng đề cập đến một số điểm kết nối Ethernet nhất định, như các điểm trên bộ tập trung, bộ chuyển mạch hoặc bộ định tuyến.

Ổ cắm:

Một ổ cắm đại diện cho một kết nối duy nhất giữa hai ứng dụng mạng. Hai ứng dụng này thường chạy trên các máy tính khác nhau, nhưng ổ cắm cũng có thể được sử dụng để liên lạc giữa các máy tính trên một máy tính. Các ứng dụng có thể tạo ra nhiều ổ cắm để giao tiếp với nhau. Các ổ cắm là hai chiều, có nghĩa là một trong hai bên của kết nối có khả năng gửi và nhận dữ liệu.


Cổng TCP hoặc UDP không đề cập đến bất kỳ vật lý nào hoặc các điểm kết nối Ethernet. Bạn chưa trả lời câu hỏi.
Hầu tước Lorne

1

Một cổng biểu thị một điểm cuối giao tiếp trong vận chuyển TCP và UDP cho giao thức mạng IP. Một socket là một phần mềm trừu tượng cho một điểm cuối giao tiếp thường được sử dụng trong việc triển khai các giao thức này (API socket). Một triển khai thay thế là API XTI / TLI.

Xem thêm:

Stevens, WR 1998, Lập trình mạng UNIX: API mạng: Ổ cắm và XTI; Tập 1, Hội trường Prentice.
Stevens, WR, 1994, TCP / IP Illustrated, Tập 1: The Protocol, Addison-Wesley.

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.