ฉันจะทำให้ชื่อโฮสต์ของโพรโทคอล foo ทราบได้อย่างไร


10

นี่เป็นคำถามที่ยอมรับได้เกี่ยวกับการรับรู้ชื่อโฮสต์และการใช้พร็อกซี่

ฉันรู้ว่าโปรโตคอลบางตัวรู้จักชื่อโฮสต์ นั่นคือเมื่อฉันเชื่อมต่อกับเซิร์ฟเวอร์ HTTP ที่www.example.comรู้ว่าฉันต้องการwww.example.comบริการ HTTP ไม่ใช่www.example.netแม้ว่าพวกเขาจะอยู่ในที่อยู่ IP เดียวกัน ฉันจะทำสิ่งนี้เพื่อโปรโตคอลfoo ได้อย่างไร

(หมายเหตุชั่วคราว: คำถามนี้ปรากฏขึ้นตามการสนทนาเมตา )

คำตอบ:


14

เพื่อให้เข้าใจถึงสิ่งที่เกิดขึ้นคุณจำเป็นต้องรู้เกี่ยวกับ DNS เล็กน้อย

เมื่อไคลเอนต์ต้องการเชื่อมต่อกับบริการบนโฮสต์ที่กำหนดจะค้นหาชื่อโฮสต์ผ่านโครงสร้างพื้นฐาน DNS ภายในเครื่องและรับที่อยู่ IP ในการตอบสนอง จากนั้นจะเชื่อมต่อกับที่อยู่ IP นั้นและร้องขอบริการในลักษณะที่กำหนดโดย procotol ที่สร้างขึ้นเพื่อนำไปใช้งาน

ในบางกรณีส่วนหนึ่งของ procotol นั้นเกี่ยวข้องกับการส่งชื่อโฮสต์ครั้งที่สองซึ่ง แต่เดิมค้นหาซึ่งในกรณีนี้ถูกส่งไปยังเซิร์ฟเวอร์มากกว่าโครงสร้างพื้นฐาน DNS ในกรณีของ HTTP สิ่งนี้ถูกเพิ่มเข้ามาเป็นส่วนหนึ่งของ HTTP / 1.1 ในRFC 2616 ; ในกรณีของ HTTPS สิ่งนี้ถูกนำไปใช้เป็นServer Name Indication (SNI) ในRFC 4366 ; และในกรณีของ FTP สิ่งนี้จะถูกเพิ่มโดยHOSTคำสั่งในRFC 7151 (แต่ดูคำเตือนในภายหลัง) หากการส่งครั้งที่สองดังกล่าวไม่เกิดขึ้นเซิร์ฟเวอร์จะไม่มีทางรู้ว่าชื่อโฮสต์ใดที่ไคลเอ็นต์ป้อนไปยัง DNS ในเครื่องเพื่อรับที่อยู่ IP ของเซิร์ฟเวอร์

โปรดทราบว่าในทุกกรณีจำเป็นต้องมีการเปลี่ยนแปลงโปรโตคอลเพื่อทำการส่งในครั้งที่สองนี้และทำให้ชื่อเซิร์ฟเวอร์การตอบโต้การโต้ตอบของไคลเอ็นต์กับเซิร์ฟเวอร์ หลังจากเปลี่ยนโพรโทคอลแล้วต้องมีการอัปเดตรหัสเซิร์ฟเวอร์เพื่อใช้งาน และในที่สุดลูกค้าจะต้องได้รับการปรับปรุงเพื่อพูดคุยโปรโตคอลใหม่กับเซิร์ฟเวอร์ ขั้นตอนสุดท้ายนั้นอาจช้าเป็นพิเศษ ในกรณีของ SNI นั้น Internet Explorer บน Windows XP ไม่เคยดำเนินการดังนั้นจึงไม่สามารถใช้โปรโตคอลได้ในขณะที่ยังมีผู้ใช้ IE-on-XP จำนวนมากอยู่และใช้เวลาประมาณสิบปีพอที่จะใช้ ปิดและ / หรือรับการอัพเกรดที่ SNI สามารถใช้งานได้อย่างน่าเชื่อถือ

ดังนั้นนี่คือสิ่งที่จะทำให้ชื่อโฮสต์ของโปรโตคอลที่ไม่ทราบชื่อโฮสต์ทราบ มันไม่ใช่การตั้งค่าการตั้งค่าสถานะง่าย ๆ หรือการเปลี่ยนแปลงการกำหนดค่า เรามีคำตอบเฉพาะโปรโตคอลที่จัดการกับสถานะของกิจการและมาตรการบรรเทาผลกระทบที่เป็นไปได้สำหรับโปรโตคอลนั้นโดยเฉพาะ: สำหรับ SSH (และเช่น SFTP) และ FTP (ซึ่งชี้ให้เห็นว่าHOSTการสนับสนุน FTP ในปัจจุบันอยู่ในหย่อม - สนับสนุนเฟสและดังนั้นจึงยังไม่สามารถพึ่งพาได้)

คำตอบสั้น ๆ คือถ้าโปรโตคอลของคุณไม่ได้ใช้ชื่อโฮสต์ - การรับรู้ด้วยการสนับสนุนที่ดีในหมู่ลูกค้าและเซิร์ฟเวอร์ลืมมัน: มันไม่ใช่สิ่งที่คุณสามารถทำได้


6
ฉันคิดว่าฉันจะตอบคำตอบนี้ด้วยความจริงที่ว่าโปรโตคอลบางตัวใช้สำหรับผลิตภัณฑ์ใหม่หรือมีในท้องถิ่นมากพอที่ บริษัท หนึ่งจะควบคุมอินสแตนซ์ทั้งหมดของเซิร์ฟเวอร์และลูกค้า ในกรณีเหล่านั้นการเพิ่มคำสั่งชื่อโฮสต์หรือแพ็กเก็ตนั้นง่ายมากและง่ายต่อการใช้งาน คุณอธิบายถึงความยากลำบากในการเพิ่มคุณสมบัติใหม่ใด ๆ ให้กับโปรโตคอลที่มีอยู่ซึ่งมีการใช้งานอย่างกว้างขวางโดยผู้ขายหลายราย
JPhi1618

4
@ JPhi1618 ฉันได้ยินคุณ แต่ในความเห็นของฉัน "โปรโตคอล" ใด ๆ ที่สร้างและดำเนินการโดย บริษัท เดียวและไม่ได้ฝังอยู่ใน RFC นั้นไม่ได้เป็นโปรโตคอลเลย มันเป็นการตัดสินใจทางวิศวกรรมภายในและฉันไม่สนใจผลิตภัณฑ์ที่เป็นกรรมสิทธิ์ดังกล่าว ในขณะที่คุณชี้ให้เห็นผู้ขายสามารถเปลี่ยนสิ่งต่าง ๆ เพื่อนำชื่อโฮสต์ - การรับรู้มาใช้ได้ทันทีถ้าเลือกเช่นนั้น แต่เนื่องจากไม่มีใครอื่นนอกจากผู้ขายสามารถทำเช่นนั้นฉันไม่เห็นว่ามันเป็นเรื่องที่น่าสนใจสำหรับ OP
MadHatter

ฉันคิดว่าคำถามที่เกี่ยวข้องคือคุณกำลังออกแบบโปรโตคอลใหม่หรือถามวิธีการเปลี่ยนโปรโตคอลที่มีอยู่
Barmar

โปรโตคอลที่เป็นกรรมสิทธิ์ยังคงเป็นโปรโตคอล
Barmar

@ บาร์มาร์นั่นอาจไม่ใช่การสนทนาที่ดีที่จะเข้าไปที่นี่ คำถามนี้เกี่ยวกับการเปลี่ยนโพรโทคอลที่มีอยู่และตามที่ฉันได้กล่าวไว้ก่อนหน้านี้หากbazเจ้าของและผู้ดำเนินการทางวิศวกรรมสามารถเปลี่ยนแปลงการตัดสินใจ / โพรโทคอลเฉพาะเจ้าของได้ดังนั้นวิธีเดียวที่จะทำให้โฮสต์ทราบ แต่นั่นไม่ได้ทำให้คำตอบ SF ที่น่าสนใจและยิ่งไปกว่านั้นไม่ใช่ (ในใจของฉัน) ในหัวข้อ " ฉันจะออกแบบโปรโตคอลที่รับรู้ชื่อโฮสต์ได้อย่างไร " เป็นคำถามอีกข้อหนึ่งโดยสิ้นเชิงและไม่ใช่คำถามที่ฉันสนใจถาม
MadHatter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.