เหตุใดจึงไม่สมเหตุสมผลที่จะอุทิศพอร์ต TCP / IP มากกว่าหนึ่งพอร์ตเป็น http แม้ว่าจะไร้เดียงสาเป็นที่ยอมรับ แต่อย่างใดมันไม่ง่ายเลยหรือที่จะคิดว่าประสิทธิภาพของเซิร์ฟเวอร์จะเพิ่มขึ้นได้
เหตุใดจึงไม่สมเหตุสมผลที่จะอุทิศพอร์ต TCP / IP มากกว่าหนึ่งพอร์ตเป็น http แม้ว่าจะไร้เดียงสาเป็นที่ยอมรับ แต่อย่างใดมันไม่ง่ายเลยหรือที่จะคิดว่าประสิทธิภาพของเซิร์ฟเวอร์จะเพิ่มขึ้นได้
คำตอบ:
พอร์ต 80 เป็นพอร์ตที่รู้จักกันดีซึ่งหมายความว่าเป็นที่รู้จักกันดีว่าเป็นตำแหน่งที่ปกติแล้วคุณจะพบเซิร์ฟเวอร์ HTTP คุณสามารถค้นหาได้บันทึกไว้ในHTTP / 1.1 RFC
การมีค่าเริ่มต้นมีประโยชน์อย่างแม่นยำเพราะคุณไม่ต้องพิมพ์ลงในเว็บเบราว์เซอร์ด้วย URI หากคุณเรียกใช้เซิร์ฟเวอร์ HTTP (หรือบริการใด ๆ ) ในพอร์ตที่ไม่ได้มาตรฐานคุณบังคับให้ลูกค้าจำหมายเลข 16 บิตที่คุณเลือกและพิมพ์ลงไป
นอกเหนือจากความไม่เป็นมิตรนี้ไม่มีประโยชน์ด้านประสิทธิภาพ: พอร์ตเป็นเพียงส่วนหนึ่งของ(dst ip:port, src ip:port)
4-tuple ซึ่งระบุการเชื่อมต่อ TCP โดยเฉพาะ หากการเชื่อมต่อสองรายการใช้ร่วมdst ip:port
กันนั่นไม่ได้หมายความว่าพวกเขาแบ่งปันทรัพยากรระบบบางส่วน - พวกเขาสามารถอยู่ในเธรดที่แตกต่างกันหรือกระบวนการที่แตกต่างกัน
ตอนนี้หากคุณมีบริการที่แตกต่างกันอย่างมีเหตุผลซึ่งทั้งคู่เกิดขึ้นที่จะใช้ HTTP จะไม่มีปัญหาในการใช้งานบนพอร์ตที่ต่างกัน มันเพียง แต่ทำให้ URI อัปลักษณ์เล็กน้อย
เซิร์ฟเวอร์ไม่ต้องเปลืองทรัพยากรด้วยการจัดการการเชื่อมต่อในพอร์ตอย่างน้อยหนึ่งพอร์ต มีการจัดสรรทรัพยากรเซิร์ฟเวอร์เพื่อจัดการการเชื่อมต่อและหมายเลขพอร์ตเป็นเพียงวิธีการเชื่อมต่อโปรแกรมเฉพาะกับการเชื่อมต่อเฉพาะ
ตัวอย่างเช่น: เซิร์ฟเวอร์ HTTP รู้ว่าเขาจะฟังการเชื่อมต่อที่มาในพอร์ต 80 และเซิร์ฟเวอร์รู้ว่าเมื่อใดก็ตามที่เขาได้รับการร้องขอบนพอร์ต 80 เขาจะจัดการกับเซิร์ฟเวอร์ HTTP หลังจากนั้นเซิร์ฟเวอร์ http จะจัดการการสื่อสารและจากนั้นจะใช้ทรัพยากร
คุณคิดว่าพอร์ตเป็นของจริง มันเป็นเพียงตัวเลขที่ไม่ได้ลงนาม 16 บิต (0-65535) ที่ฉลากในส่วนหัวของแพ็คเก็ต IP สิ่งนี้จะช่วยในการมัลติเพล็กซ์ระดับแอปพลิเคชัน เมื่อแพ็กเก็ตขาเข้ามาถึงการ์ดเครือข่ายระบบปฏิบัติการจะได้รับการแจ้งเตือน มันตรวจสอบว่าพอร์ตใดที่แพ็กเก็ตขาเข้าถูกส่งไปยังและจากนั้นส่งต่อแพ็กเก็ตไปยังแอปพลิเคชันที่เหมาะสมเท่านั้น หากคุณใช้งานเว็บเซิร์ฟเวอร์ (nginx) เพื่อฟังบนพอร์ต 80 เฉพาะ nginx เท่านั้นที่รับแพ็กเก็ตที่ส่งไปยังพอร์ต 80
เมื่อไคลเอนต์ (IP: 100.200.100.200) ทำการร้องขอ HTTP ไปยังเซิร์ฟเวอร์ (55.55.55.55) พวกเขาทำการร้องขอนั้นไปยังพอร์ตปลายทาง 80 บนเซิร์ฟเวอร์ (55.55.55.55:80) แต่พอร์ตต้นทางถูกสุ่มเลือกโดย ระบบปฏิบัติการสำหรับเว็บเบราว์เซอร์ (เช่น 45490) HTTP การตอบสนองจากเว็บเซิร์ฟเวอร์นั้นมาจาก (55.55.55.55:80) แต่ส่งไปยังปลายทาง (IP ของคุณ) (100.200.100.200:45490) ระบบปฏิบัติการของคอมพิวเตอร์ของคุณรู้ว่าต้องมีแพ็กเก็ตขาเข้าที่พอร์ต 45490 (จาก 55.55.55.55:80) ไปยังเว็บเบราว์เซอร์ที่ทำการร้องขอ เนื่องจากแต่ละการเชื่อมต่อที่ไม่ซ้ำกับเว็บไซต์จากไคลเอนต์จะได้รับพอร์ตสุ่มที่ไม่ซ้ำกันดังนั้นคุณสามารถมีเว็บเบราว์เซอร์หลายตัวเชื่อมต่อกับเว็บไซต์เดียวกันและเมื่อมีการโหลดหน้าใหม่ในเบราว์เซอร์หนึ่งหน้าต่างอื่น ๆ จะไม่ได้รับผลกระทบ
แต่ละแพ็คเก็ต IP มีทั้งที่อยู่ IP ต้นทางและปลายทางและพอร์ตที่มีอยู่ในส่วนหัว ระบบปฏิบัติการและแอปพลิเคชั่น (เว็บเบราว์เซอร์หรือเว็บเซิร์ฟเวอร์) สามารถใช้ทั้งสองอย่างเพื่อหาวิธีการที่เหมาะสมในการประมวลผลแพ็กเก็ต
พอร์ต 80 & 443 เป็นพอร์ต "เริ่มต้น" สำหรับ HTTP / HTTPS
ซึ่งหมายความว่าคุณไม่จำเป็นต้องระบุพอร์ต ( http://www.example.com:80 , https://www.example.com:443 ) เมื่อใช้เว็บเบราว์เซอร์
หากคุณต้องการให้เว็บเซิร์ฟเวอร์ฟังพอร์ตอื่น ๆ ผู้ใช้จะต้องเพิ่มพอร์ตไปยัง URL ด้วยตนเองหรือต้องเข้ารหัสในลิงค์ใด ๆ ไปยังพอร์ตนั้น
นอกจากนี้พร็อกซีและไฟร์วอลล์ส่วนใหญ่จะไม่อนุญาตให้เชื่อมต่อกับพอร์ตเหล่านั้นเว้นแต่ว่าจะมีการกำหนดค่าโดยเฉพาะ (โดยไม่มีการกำหนดค่าพร็อกซีขาออกจะไม่ฟังพอร์ตที่ไม่ใช่ค่าเริ่มต้นดังนั้นจะไม่ส่งต่อคำขอไปยัง webservers บล็อกความพยายามในการเชื่อมต่อที่ไม่ใช่ TCP80 / 443)
ทั้งหมดนี้ จำกัด สิ่งที่สามารถทำได้ในระดับ TCP / IP
วิธีหนึ่งในการเพิ่มประสิทธิภาพคือการมีการโหลดอุปกรณ์ / บริการฟัง TCP80 / 443 ซึ่งจะเปลี่ยนเส้นทางการร้องขอไปยังเซิร์ฟเวอร์บนพอร์ตต่าง ๆ และ / หรือ ip (Local Balancing) หรือแม้แต่ไซต์ระยะไกลที่แตกต่างกัน (Global Balancing) แต่นี่เป็นหัวข้ออื่นโดยสิ้นเชิง
การเพิ่มพอร์ตพิเศษไม่ได้เพิ่มแบนด์วิดท์พิเศษหรืออะไรอย่างนั้นพอร์ตนั้นมีป้ายกำกับมากกว่าไพพ์คุณสามารถ "ขยาย" ได้กว้างเท่าที่คุณต้องการโดยไม่ทำให้ช้าลงเนื่องจากไพพ์เต็ม
หากเซิร์ฟเวอร์ได้รับคำขอมากเกินไปเซิร์ฟเวอร์จะชะลอตัวลงอย่างแน่นอนอย่างไรก็ตามนี่ไม่ใช่ประเภทของปัญหาที่สามารถแก้ไขได้โดยการเพิ่มหมายเลขพอร์ตอื่น
หากคุณใช้พอร์ตสุ่มผู้ใช้จะต้องเพิ่มหมายเลขพอร์ตที่ถูกต้องทุกครั้งที่เข้าสู่เว็บไซต์ของคุณ เช่น www.example.com:80; www.example.com:81; www.example.com:82 เป็นต้น
มันจะไม่เพิ่มประสิทธิภาพในการใช้พอร์ตมากขึ้น พอร์ตต้นทางสำหรับแต่ละการเชื่อมต่อพอร์ตชั่วคราวและแตกต่างกันมาก
การเชื่อมต่อ TCP / IP แต่ละครั้งมีแหล่งที่มา IP: sourcePort และปลายทาง IP: ปลายทางPort
เมื่อคุณเริ่มการเชื่อมต่อคุณจะใช้ 80 เป็นพอร์ตปลายทางเสมอ (ซึ่งสมเหตุสมผลเนื่องจากเซิร์ฟเวอร์จำเป็นต้องฟังบนพอร์ต 80 สำหรับ HTTP เท่านั้นและไม่ได้ใช้กับหลายพอร์ต) เคล็ดลับคือ sourcePort นั้นเป็นแบบไดนามิกสำหรับการเชื่อมต่อแต่ละครั้ง
ตัวอย่าง:
user1: 1.1.1.1:29999 ถึง 2.2.2.2:80
user2: 1.1.1.2:45333 ถึง 2.2.2.2:80
อย่าเข้าใจผิดพอร์ตอื่นสำหรับการเชื่อมต่อทางกายภาพที่แตกต่างกันหรือแบนด์วิธเครือข่ายที่สูงขึ้นหรือประสิทธิภาพการประมวลผลเซิร์ฟเวอร์ สิ่งที่เซิร์ฟเวอร์ได้รับคือแพ็คเก็ต TCP หรือ UDP ซึ่งมีหมายเลขพอร์ตเป็นส่วนหนึ่งของที่อยู่ พวกเขายังคงมาสายเดียวกันผ่านฮาร์ดแวร์และไดรเวอร์เครือข่ายเดียวกันและอื่น ๆ
หากคุณต้องส่งสองแพ็คเก็ตไปยังเซิร์ฟเวอร์ในแง่ของทรัพยากรเซิร์ฟเวอร์จะประมวลผลแพ็กเก็ตสองชุดนี้ไม่สำคัญว่าหนึ่งในสองนั้นมีหมายเลขพอร์ตที่แตกต่างกันหรือหมายเลขพอร์ตเดียวกันที่เกี่ยวข้องกับพวกเขาการจัดการภายในจะ ใกล้เคียงกัน
ดังนั้นนี่ไม่ใช่วิธีการเพิ่มประสิทธิภาพ แต่อย่างใด
ข้อยกเว้นที่เป็นไปได้เพียงข้อเดียวคือถ้าคุณต้องเชื่อมโยงปีศาจที่แตกต่างกันสองตัว (หรือสำเนาสองชุดที่เหมือนกัน) ที่ทำงานพร้อมกันกับหมายเลขพอร์ตที่แตกต่างกันสองพอร์ตและถ้าปีศาจเหล่านี้แต่ละตัว ซึ่งโดยทั่วไปจะไม่เป็นเช่นนั้น
ตามที่ Remi พูดถึงพอร์ต 80 & 443 เป็นพอร์ต "เริ่มต้น" สำหรับ HTTP / HTTPS
เครือข่ายและไฟร์วอลล์ส่วนใหญ่จะไม่ปิดกั้นการรับส่งข้อมูลผ่านพอร์ตนี้ ดังนั้นการใช้พอร์ตนี้จึงง่ายขึ้นโดยส่วนใหญ่คุณไม่จำเป็นต้องกังวลเกี่ยวกับไฟร์วอลล์ที่ปิดกั้นบริการของคุณคุณอาจต้องผ่านการตั้งค่ากฎไฟร์วอลล์ใหม่และรับการอนุมัติจากการปฏิบัติตาม / ความปลอดภัยเช่นเดียวกัน
ดังที่คนอื่น ๆ ที่นี่ได้กล่าวว่ามันไม่มีประโยชน์ที่จะโฮสต์เว็บเซิร์ฟเวอร์บนพอร์ตอื่นที่ไม่ใช่พอร์ต 80 ... เว้นแต่คุณจะโฮสต์มันจากที่บ้าน ISP จำนวนมากพอร์ต TCP / UDP ขาออก 80 และ 443 ( IANAกำหนดเป็นHTTPและHTTPSตามลำดับ) และในกรณีนี้การใช้พอร์ตเหล่านั้นจะเบี่ยงเบนจากความเร็วในการโหลดเว็บไซต์เป็นต้นอย่างไรก็ตามIANAได้กำหนดพอร์ตHTTP-ALT 3 พอร์ตสำหรับ ทั้ง TCP และ UDP เหล่านี้คือ: 591, 8008 และ 8080 การใช้พอร์ตเหล่านี้ก็เป็นที่ยอมรับเช่นกัน แต่คุณจะทำให้ชีวิตของผู้ดูแลระบบเซิร์ฟเวอร์แย่ลง
แหล่งที่มาของหมายเลขพอร์ต: https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml