2009-10-20 55 views
130

Vì vậy, tôi đang bắt đầu lập trình socket và tôi tiếp tục thấy điều này AF_INET. Tuy nhiên, tôi chưa bao giờ thấy bất cứ điều gì khác được sử dụng tại chỗ của nó. Các giảng viên của tôi không hữu ích, và chỉ nói "Bạn chỉ cần nó". Vì vậy, câu hỏi của tôi:AF_INET là gì và tại sao tôi cần nó?

  • Mục đích của AF_INET là gì?
  • Có gì khác được sử dụng thay cho nó không?
    • Nếu không, tại sao lại ở đó? Đối với những thay đổi có thể xảy ra trong tương lai?
    • Nếu có, thì sao và tại sao?

Trả lời

163

AF_INET là họ địa chỉ được sử dụng để chỉ định loại địa chỉ mà ổ cắm của bạn có thể giao tiếp với (trong trường hợp này là địa chỉ Giao thức Internet v4). Khi bạn tạo một socket, bạn phải chỉ định gia đình địa chỉ của nó, và sau đó bạn chỉ có thể sử dụng các địa chỉ kiểu đó với socket. Hạt nhân Linux, ví dụ, hỗ trợ 29 gia đình địa chỉ khác như UNIX (AF_UNIX) ổ cắm và IPX (AF_IPX), và cũng liên lạc với IRDA và Bluetooth (AF_IRDAAF_BLUETOOTH, nhưng nghi ngờ bạn sẽ sử dụng chúng ở mức thấp như vậy cấp độ).

Đối với hầu hết các phần, gắn bó với AF_INET để lập trình socket qua mạng là tùy chọn an toàn nhất. Ngoài ra còn có AF_INET6 cho địa chỉ Giao thức Internet v6.

Hy vọng điều này sẽ giúp,

35

Mục đích chính của AF_INET là để cho phép giao thức mạng hoặc gia đình địa chỉ khác có thể (AF là dành cho gia đình địa chỉ; PF_INET là cho (gia đình giao thức IPv4) Internet). Ví dụ, có thể có một vài mạng Netware SPX/IPX xung quanh; đã có các hệ thống mạng khác như DECNet, StarLAN và SNA, chưa kể đến ISO OSI (Kết nối Hệ thống Mở), và chúng không nhất thiết phải sử dụng địa chỉ IP hiện tại để xác định máy chủ đồng đẳng trong các kết nối mạng.

Phương án thay thế phổ biến cho AF_INET (trong đó, nhìn lại, nên được đặt tên là AF_INET4) là AF_INET6, cho họ địa chỉ IPv6. IPv4 sử dụng địa chỉ 32 bit; IPv6 sử dụng địa chỉ 128 bit.

Bạn có thể thấy một số giá trị khác - nhưng chúng không bình thường. Nó là để cho phép lựa chọn thay thế và hướng tương lai. Giao diện ổ cắm thực sự là rất chung chung - đó là một trong những lý do nó đã phát triển mạnh nơi các giao diện mạng khác bị héo.

Cuộc sống (chủ yếu) trở nên đơn giản hơn - hãy biết ơn.

+0

Cảm ơn phản hồi của bạn - Tôi suy luận rằng câu trả lời của bạn cho câu hỏi đầu tiên của tôi là mục đích của nó là để xác định những gì giao thức mạng sử dụng không? Mặc dù vậy, bạn có thể cụ thể hơn về các câu hỏi khác không? – Smashery

+0

Điểm tốt về AF_INET6; các gia đình địa chỉ khác được hỗ trợ trên một số hệ điều hành. – MarkR

11

Ổ cắm được đặc trưng bởi tên miền, loại và giao thức truyền tải của chúng. lĩnh vực phổ biến là:

  1. AF_UNIX: định dạng địa chỉ là UNIX tên đường dẫn

  2. AF_INET: định dạng địa chỉ là máy chủ và số cổng

(có thực sự nhiều lựa chọn khác có thể được sử dụng ở đây cho các mục đích chuyên ngành).thường chúng tôi sử dụng AF_INET cho lập trình socket

tham khảo: http://www.cs.uic.edu/~troy/fall99/eecs471/sockets.html

13

Bạn cần lập luận như AF_UNIX hoặc AF_INET để xác định các loại ổ cắm địa chỉ bạn sẽ được sử dụng để thực hiện giao tiếp ổ cắm IPC. AF là viết tắt của Address Family.

Như trong tiêu chuẩn BSD Socket (áp dụng trong mô-đun ổ cắm Python) địa chỉ được biểu diễn như sau:

  1. Một chuỗi duy nhất được sử dụng cho việc/gia đình địa chỉ AF_LOCAL AF_UNIX. Tùy chọn này được sử dụng cho IPC trên các máy cục bộ mà không yêu cầu địa chỉ IP.

  2. Cặp (máy chủ, cổng) được sử dụng cho họ địa chỉ AF_INET, trong đó máy chủ là một chuỗi đại diện cho tên máy chủ trong ký hiệu tên miền Internet như 'daring.cwi.nl' hoặc địa chỉ IPv4 như '100.50.200.5 ', và cổng là một số nguyên. Được sử dụng để giao tiếp giữa các quá trình qua Internet.

AF_UNIX, AF_INET6, AF_NETLINK, AF_TIPC, AF_CAN, AF_BLUETOOTH, AF_PACKET, AF_RDS là tùy chọn khác có thể được sử dụng thay cho AF_INET.

Điều này thread about the differences between AF_INET and PF_INET cũng có thể hữu ích.

Các vấn đề liên quan