2011-01-24 32 views
15

Tôi đã đọc về lập trình mạng cơ bản, nhưng có một thời gian khó khăn để tìm giải thích thẳng về chính xác và ổ cắm là gì và cách nó liên quan đến ngăn xếp OSI hoặc TCP/IP.Hiểu cơ bản về socket

  1. Ai đó có thể giải thích cho tôi biết ổ cắm là gì? Nó là một cấu trúc dữ liệu được lập trình hoặc API xác định, hay nó là một thiết bị phần cứng trên một card mạng?

  2. Lớp nào của các mô hình mạng được đề cập đối phó với ổ cắm "thô"? Lớp vận chuyển? Lớp mạng?

  3. Xét về dữ liệu họ truyền giữa chúng, có phải là văn bản trên ổ cắm hoặc nhị phân không?

  4. thay thế để lập trình mạng dựa trên ổ cắm không? Hoặc làm tất cả các ứng dụng mạng sử dụng một số hình thức của ổ cắm?

Nếu tôi có thể hiểu được điều này, tôi cần phải hiểu rõ mọi thứ khác mà tôi đang đọc. Cảm ơn vì bất kì sự giúp đỡ!

Trả lời

7

câu trả lời ngắn:

  1. Ổ cắm là một sự trừu tượng của một kết nối thiết bị đầu cuối IP - vì vậy nếu bạn nghĩ về nó như một cơ cấu API, bạn không phải là rất xa. Vui lòng đọc http://en.wikipedia.org/wiki/Internet_socket
  2. Internet layer tức là Giao thức IP. Trong thực tế, bạn thường sử dụng các ổ cắm rõ ràng liên kết với một tham số lớp vận chuyển (datagram/UDP hoặc stream/TCP)
  3. Ổ cắm gửi dữ liệu, theo thứ tự byte mạng - cho dù đó là văn bản hay nhị phân, phụ thuộc vào giao thức tầng trên.
  4. Về mặt lý thuyết, có thể có - nhưng trong thực tế tất cả lưu lượng IP được thực hiện sử dụng 'cắm'
+0

Cảm ơn Kimvais! Vì vậy, nó là an toàn để nói rằng một ai đó thực hiện một cấu trúc socket phải cho phép nó phù hợp với giao thức IP? – Eugie

+0

... Ngoài ra, nếu ổ cắm là cấu trúc cấp IP, thì sự khác biệt giữa một socket thực hiện IPv4 hoặc IPSec là gì? – Eugie

+0

Ổ cắm không (thường) triển khai IPSec - bạn (thường) chỉ sử dụng ổ cắm TCP hoặc UDP 'bình thường' để tạo lưu lượng và mức thấp hơn của ngăn xếp mạng (có thể trên một nút mạng khác) xử lý biến đổi ESP cho IPSec . Từ quan điểm của người lập trình ứng dụng, sẽ không có sự khác biệt giữa các ổ cắm IPv4 và IPv6 loại bỏ các địa chỉ bạn cần sử dụng khi mở ổ cắm. – Kimvais

4

Ổ cắm là một cơ chế phần mềm do hệ điều hành cung cấp. Giống như tên gọi của nó, bạn có thể nghĩ nó giống như một "ổ cắm điện" hoặc một đầu nối điện, mặc dù ổ cắm không phải là một thiết bị vật lý, mà là một cơ chế phần mềm. Trong thế giới thực khi bạn có hai đầu nối điện, bạn có thể kết nối chúng với một sợi dây. Trong cùng một cách trong lập trình mạng, bạn có thể tạo một ổ cắm trên một máy tính và một ổ cắm khác trên một máy tính khác và sau đó kết nối các ổ cắm đó. Và khi bạn ghi dữ liệu vào một trong số chúng, bạn sẽ nhận được dữ liệu trên một cái khác. Ngoài ra còn có một vài loại ổ cắm khác nhau. Ví dụ nếu bạn đang lập trình một phần mềm máy chủ, bạn muốn có một ổ cắm nghe không bao giờ gửi hoặc nhận dữ liệu thực nhưng chỉ nghe và chấp nhận các kết nối đến và tạo một ổ cắm mới cho mỗi kết nối mới.

+0

Ai chịu trách nhiệm gửi dữ liệu từ đầu này đến đầu kia? –

3

Một ổ cắm, trong C cách nói, là một cấu trúc dữ liệu trong không gian hạt nhân, tương ứng với một điểm kết thúc của một UDP hoặc phiên TCP (Tôi đang sử dụng phiên rất một cách lỏng lẻo khi nói về UDP). Nó thường được kết hợp với một số cổng duy nhất ở phía bên trong và hiếm khi có nhiều hơn một số "nổi tiếng" ở hai bên của phiên.

"Ổ cắm thô" là điểm kết thúc, ít nhiều, vận chuyển vật lý. Chúng hiếm khi được sử dụng trong lập trình ứng dụng, nhưng đôi khi được sử dụng cho nhiều thứ chẩn đoán khác nhau (traceroute, ping, có thể là những người khác) và có thể yêu cầu đặc quyền nâng cao để mở.

Ổ cắm, trong bản chất của chúng, là một phương tiện vận chuyển octet nhị phân.Nó không phải là không phổ biến để điều trị ổ cắm (TCP socket, ít nhất) như là dòng văn bản dựa trên.

Tôi chưa thấy mô hình lập trình không liên quan đến thứ gì đó như ổ cắm, nếu bạn đào sâu đủ, nhưng chắc chắn đã có các mô hình khác làm mạng. Hệ thống tập tin giả "/ net /", nơi mở "/net/127.0.0.0.1/tcp/80" (hoặc "tcp/www") sẽ cung cấp cho bạn một tệp xử lý nơi ghi kết thúc trên máy chủ web trên máy chủ cục bộ nhưng là một.