AF_INET là gì và tại sao tôi cần nó?


201

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 ở vị trí 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:

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

Câu trả lời:


269

AF_INETlà một 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 (trong trường hợp này là địa chỉ Internet Giao thức v4). Khi bạn tạo một ổ cắm, bạn phải chỉ định họ địa chỉ của nó và sau đó bạn chỉ có thể sử dụng địa chỉ của loại đó với ổ cắm. Ví dụ, nhân Linux hỗ trợ 29 họ địa chỉ khác như AF_UNIXổ cắm UNIX ( ) và IPX ( AF_IPX), và cả giao tiếp với IRDA và Bluetooth ( AF_IRDAAF_BLUETOOTH, nhưng chắc chắn bạn sẽ sử dụng chúng ở mức độ thấp như vậy).

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

Hi vọng điêu nay co ich,


43

Mục đích chính của AF_INET là cho phép các giao thức mạng hoặc họ địa chỉ có thể khác (AF dành cho họ địa chỉ; PF_INET dành cho họ giao thức internet (IPv4)). 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 phổ biến hiện nay để xác định máy chủ ngang hàng trong các kết nối mạng.

Sự thay thế phổ biến cho AF_INET (mà, khi nhìn lại, đáng lẽ phải đượ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ó ở đó để cho phép thay thế và định hướng trong tương lai. Giao diện socket thực sự rất chung chung - đó là một trong những lý do khiến nó phát triển mạnh khi các giao diện mạng khác bị héo.

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


Cảm ơn câu trả lời của bạn - Tôi đang 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 giao thức mạng nào sẽ sử dụng? Bạn có thể vui lòng cụ thể hơn về các câu hỏi khác, mặc dù?
Smasher

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

15

Bạn cần các đối số như AF_UNIX hoặc AF_INET để chỉ định loại địa chỉ ổ cắm bạn sẽ sử dụng để triển khai giao tiếp ổ cắm IPC. AF là viết tắt của Địa chỉ gia đình.

Như trong BSD tiêu chuẩn Ổ cắm (được chấp nhận trong mô-đun ổ cắm Python) được trình bày như sau:

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

  2. Một 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 một tên máy chủ trong ký hiệu miền Internet như 'dared.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 để liên lạc 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à các tùy chọn khác có thể được sử dụng thay vì AF_INET .

Chủ đề này về sự khác biệt giữa AF_INET và PF_INET cũng có thể hữu ích.


14

Ổ cắm được đặc trưng bởi tên miền, loại và giao thức vận chuyển. Các miền phổ biến là:

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

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

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

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


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.