AF_INET คืออะไรและทำไมฉันต้องใช้


201

ฉันเริ่มต้นด้วยการเขียนโปรแกรมซ็อกเก็ตและฉันเห็นสิ่งนี้ต่อไป AF_INETต่อไป

กระนั้นฉันก็ไม่เคยเห็นสิ่งใดมาใช้แทน อาจารย์ของฉันไม่เป็นประโยชน์และพูดว่า "คุณแค่ต้องการมัน"

ดังนั้นคำถามของฉัน:

  • อะไรคือจุดประสงค์ของ AF_INETอะไร?
  • มีอะไรอีกบ้างที่เคยใช้แทนมัน?
    • ถ้าไม่ทำไมมันอยู่ที่นั่น? สำหรับการเปลี่ยนแปลงที่เป็นไปได้ในอนาคต?
    • ถ้าเป็นเช่นนั้นอะไรและทำไม

คำตอบ:


269

AF_INETเป็นตระกูลที่อยู่ที่ใช้เพื่อกำหนดประเภทของที่อยู่ที่ซ็อกเก็ตของคุณสามารถสื่อสารกับ (ในกรณีนี้คือที่อยู่ Internet Protocol v4) เมื่อคุณสร้างซ็อกเก็ตคุณต้องระบุตระกูลที่อยู่ของมันจากนั้นคุณจะสามารถใช้ที่อยู่ประเภทนั้น ๆ ได้ด้วยซ็อกเก็ต ตัวอย่างเช่นเคอร์เนล Linux สนับสนุนตระกูลที่อยู่อื่น ๆ 29 รายการเช่น UNIX ( AF_UNIX) sockets และ IPX ( AF_IPX) และการสื่อสารกับ IRDA และ Bluetooth ( AF_IRDAและAF_BLUETOOTHแต่เป็นที่น่าสงสัยว่าคุณจะใช้สิ่งเหล่านี้ในระดับต่ำ)

ส่วนใหญ่การAF_INETใช้โปรแกรมซ็อกเก็ตผ่านเครือข่ายเป็นวิธีที่ปลอดภัยที่สุด นอกจากนี้ยังมีที่อยู่AF_INET6Internet Protocol v6

หวังว่าจะช่วยได้


43

วัตถุประสงค์หลักของ AF_INET คืออนุญาตเครือข่ายโปรโตคอลหรือที่อยู่อื่น ๆ (AF สำหรับครอบครัวที่อยู่ PF_INET สำหรับครอบครัวอินเทอร์เน็ตโปรโตคอล (IPv4)) ตัวอย่างเช่นอาจมีเครือข่าย Netware SPX / IPX อยู่เล็กน้อย มีระบบเครือข่ายอื่น ๆ เช่น DECNet, StarLAN และ SNA ไม่ต้องพูดถึง ISO OSI (การเชื่อมต่อแบบเปิดระบบ) ที่ไม่เกิดขึ้นจริงและสิ่งเหล่านี้ไม่จำเป็นต้องใช้ที่อยู่ IP ที่แพร่หลายในขณะนี้เพื่อระบุโฮสต์โฮสต์ในการเชื่อมต่อเครือข่าย

ทางเลือกที่แพร่หลายสำหรับ AF_INET (ซึ่งในการหวนกลับควรมีชื่อว่า AF_INET4) คือ AF_INET6 สำหรับตระกูลที่อยู่ IPv6 IPv4 ใช้ที่อยู่แบบ 32 บิต IPv6 ใช้ที่อยู่ 128- บิต

คุณอาจเห็นค่าอื่น ๆ - แต่มันผิดปกติ มันมีเพื่อให้ทางเลือกและทิศทางในอนาคต อินเทอร์เฟซของซ็อกเก็ตนั้นมีความเป็นจริงมากโดยทั่วไป - ซึ่งเป็นหนึ่งในเหตุผลที่เฟื่องฟูที่อินเทอร์เฟซเครือข่ายอื่น ๆ ได้เหี่ยวแห้ง

ชีวิตมีความเรียบง่าย (ส่วนใหญ่) - ขอบคุณ


ขอบคุณสำหรับคำตอบของคุณ - ฉันคิดว่าคำตอบของคุณสำหรับคำถามแรกคือมีจุดประสงค์เพื่อกำหนดโปรโตคอลเครือข่ายที่จะใช้? คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับคำถามอื่น ๆ ได้ไหม?
Smashery

ข้อดีของ AF_INET6; ตระกูลที่อยู่อื่นได้รับการสนับสนุนในระบบปฏิบัติการบางระบบ
MarkR

15

คุณต้องมีอาร์กิวเมนต์เช่น AF_UNIX หรือ AF_INET เพื่อระบุประเภทของซ็อกเก็ตที่คุณต้องการใช้ในการสื่อสารซ็อกเก็ต IPC AF ย่อมาจาก Address Family

ดังที่อยู่ในซ็อกเก็ตมาตรฐาน BSD (ที่ใช้ในโมดูลซ็อกเก็ต Python) จะแสดงดังต่อไปนี้:

  1. สตริงเดียวถูกใช้สำหรับตระกูลที่อยู่ AF_UNIX / AF_LOCAL ตัวเลือกนี้ใช้สำหรับ IPC บนเครื่องท้องถิ่นที่ไม่จำเป็นต้องมีที่อยู่ IP

  2. คู่ (โฮสต์, พอร์ต) ใช้สำหรับตระกูลที่อยู่ AF_INET โดยที่โฮสต์เป็นสตริงที่แสดงชื่อโฮสต์ในรูปแบบโดเมนอินเทอร์เน็ตเช่น 'daring.cwi.nl' หรือที่อยู่ IPv4 เช่น '100.50.200.5' และพอร์ตคือ จำนวนเต็ม ใช้เพื่อสื่อสารระหว่างกระบวนการทางอินเทอร์เน็ต

AF_UNIX, AF_INET6, AF_NETLINK, AF_TIPC, AF_CAN, AF_BLUETOOTH, AF_PACKET, AF_RDSเป็นตัวเลือกอื่นที่สามารถใช้แทนAF_INET AF_INET

หัวข้อนี้เกี่ยวกับความแตกต่างระหว่าง AF_INET และ PF_INETอาจมีประโยชน์เช่นกัน


14

ซ็อกเก็ตมีเอกลักษณ์เฉพาะด้วยโดเมนประเภทและโปรโตคอลการขนส่ง โดเมนทั่วไปคือ:

  1. AF_UNIX: รูปแบบที่อยู่เป็นชื่อพา ธ ของ UNIX

  2. AF_INET: รูปแบบที่อยู่เป็นหมายเลขโฮสต์และพอร์ต

(มีตัวเลือกอื่น ๆ มากมายซึ่งสามารถใช้ที่นี่เพื่อวัตถุประสงค์เฉพาะ) โดยปกติเราใช้ AF_INET สำหรับการเขียนโปรแกรมซ็อกเก็ต

การอ้างอิง: http://www.cs.uic.edu/~troy/fall99/eecs471/sockets.html


2

มันกำหนดโปรโตคอลที่อยู่ตระกูลนี้กำหนดประเภทของซ็อกเก็ตที่สร้างขึ้น สนับสนุน pocket pc AF_INET

เนื้อหาในหน้าต่อไปนี้ค่อนข้างเหมาะสม http://etutorials.org/Programming/Pocket+pc+network+programming/Chapter+1.+Winsock/Streaming+TCP+Sockets/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.