เหตุใดจึงทำพอร์ต 80 สำหรับบริการเว็บเท่านั้น


54

เหตุใดจึงไม่สมเหตุสมผลที่จะอุทิศพอร์ต TCP / IP มากกว่าหนึ่งพอร์ตเป็น http แม้ว่าจะไร้เดียงสาเป็นที่ยอมรับ แต่อย่างใดมันไม่ง่ายเลยหรือที่จะคิดว่าประสิทธิภาพของเซิร์ฟเวอร์จะเพิ่มขึ้นได้


17
คุณถูกต้องอย่างแน่นอน ฉันเปลี่ยนพอร์ตเริ่มต้นเว็บเซิร์ฟเวอร์ของฉันจาก 80 เป็น 90,91,92 & 93 โหลดบนเซิร์ฟเวอร์ลดลงอย่างมาก
David Houde

17
... อาจเป็นเพราะลูกค้าไม่สามารถหาเซิร์ฟเวอร์ได้อีกต่อไป?
Marcos Gonzalez

5
80 เป็นเพียงพอร์ตที่ใช้สำหรับ http เมื่อคุณพูดว่า "something.com"; (หรือแม้กระทั่ง "something.com") เบราว์เซอร์จะทำให้เสร็จสมบูรณ์เพื่อเป็นการร้องขอไปยัง "something.com:80"; (บนพอร์ต 80 เนื่องจากเป็นพอร์ต http ที่เป็นที่รู้จักเริ่มต้น) เช่นเดียวกับ https ใน 443 หากคุณตัดสินใจที่จะเปลี่ยนคุณจะต้องพูดใน URL: "myserver.com:1280"; มิฉะนั้นเบราว์เซอร์จะลองที่พอร์ต 80 และจะไม่พบ รายการสามารถเห็นได้ในวิกิพีเดีย
Olivier Dulac

6
ขออภัย Marcos เป็นความพยายามที่ไม่ดีที่มีอารมณ์ขัน ฉันไม่เคยเก่งเรื่องนี้เลย
David Houde

3
@DavidHoude ถึงเวลาทบทวนอิโมติคอนสำหรับคุณแล้ว :-) cs.cmu.edu/~sef/sefSmiley.htm
generalnetworkerror

คำตอบ:


70

พอร์ต 80 เป็นพอร์ตที่รู้จักกันดีซึ่งหมายความว่าเป็นที่รู้จักกันดีว่าเป็นตำแหน่งที่ปกติแล้วคุณจะพบเซิร์ฟเวอร์ HTTP คุณสามารถค้นหาได้บันทึกไว้ในHTTP / 1.1 RFC

การมีค่าเริ่มต้นมีประโยชน์อย่างแม่นยำเพราะคุณไม่ต้องพิมพ์ลงในเว็บเบราว์เซอร์ด้วย URI หากคุณเรียกใช้เซิร์ฟเวอร์ HTTP (หรือบริการใด ๆ ) ในพอร์ตที่ไม่ได้มาตรฐานคุณบังคับให้ลูกค้าจำหมายเลข 16 บิตที่คุณเลือกและพิมพ์ลงไป

นอกเหนือจากความไม่เป็นมิตรนี้ไม่มีประโยชน์ด้านประสิทธิภาพ: พอร์ตเป็นเพียงส่วนหนึ่งของ(dst ip:port, src ip:port)4-tuple ซึ่งระบุการเชื่อมต่อ TCP โดยเฉพาะ หากการเชื่อมต่อสองรายการใช้ร่วมdst ip:portกันนั่นไม่ได้หมายความว่าพวกเขาแบ่งปันทรัพยากรระบบบางส่วน - พวกเขาสามารถอยู่ในเธรดที่แตกต่างกันหรือกระบวนการที่แตกต่างกัน

ตอนนี้หากคุณมีบริการที่แตกต่างกันอย่างมีเหตุผลซึ่งทั้งคู่เกิดขึ้นที่จะใช้ HTTP จะไม่มีปัญหาในการใช้งานบนพอร์ตที่ต่างกัน มันเพียง แต่ทำให้ URI อัปลักษณ์เล็กน้อย


7
แค่นั้นแหละ! พอร์ต 80 ไม่ใช่ทรัพยากร! มันเป็นเพียงส่วนหนึ่งของ tuple! ขอบคุณสำหรับการวางไว้อย่างชัดเจน
Marcos Gonzalez

2
มันไม่มีอะไรที่คุ้มค่าแม้แต่กับบริการที่แตกต่างกันการเชื่อมต่อ HTTP ที่แท้จริงมักจะได้รับบนพอร์ต 80 โดยไดรเวอร์ทั่วทั้งระบบซึ่งทำการวิเคราะห์โปรโตคอลเริ่มต้นแล้วส่งมอบให้กับบริการที่ถูกต้อง แบ่งปันพอร์ตเดียวกัน
Monstieur

1
คำตอบที่ไร้ประโยชน์ของผู้ใช้
เด็คการ์ด

26

เซิร์ฟเวอร์ไม่ต้องเปลืองทรัพยากรด้วยการจัดการการเชื่อมต่อในพอร์ตอย่างน้อยหนึ่งพอร์ต มีการจัดสรรทรัพยากรเซิร์ฟเวอร์เพื่อจัดการการเชื่อมต่อและหมายเลขพอร์ตเป็นเพียงวิธีการเชื่อมต่อโปรแกรมเฉพาะกับการเชื่อมต่อเฉพาะ

ตัวอย่างเช่น: เซิร์ฟเวอร์ HTTP รู้ว่าเขาจะฟังการเชื่อมต่อที่มาในพอร์ต 80 และเซิร์ฟเวอร์รู้ว่าเมื่อใดก็ตามที่เขาได้รับการร้องขอบนพอร์ต 80 เขาจะจัดการกับเซิร์ฟเวอร์ HTTP หลังจากนั้นเซิร์ฟเวอร์ http จะจัดการการสื่อสารและจากนั้นจะใช้ทรัพยากร


8
ฉันจะเพิ่มคำตอบนี้ว่าพอร์ต 80 ไม่ได้ถูกใช้โดยผู้ใช้ที่ส่งคำขอไป นี่คือเหตุผลที่ใช้เฉพาะพอร์ต 80 (หรือพอร์ตใด ๆ ที่เป็นที่รู้จักกันดีสำหรับโปรโตคอลขาเข้าที่คุณกำลังดู) ไม่ได้เป็นปัญหาคอขวดสำหรับการขยายขีดความสามารถ
Craig Sirkin

1
นั่นคือสิ่งที่ฉันไม่เข้าใจ แม้แต่ผู้ใช้ 100,000 รายที่เชื่อมต่อกันพร้อมกับ www.example.com:80 จะไม่ใช้พอร์ต 80 ขอบคุณสำหรับการชี้แจง ฉันพบข้อมูล @ ไร้ประโยชน์ 'ด้านล่างนี้ยังให้ความกระจ่างมาก
Marcos Gonzalez

ซอฟต์แวร์ webservers บางตัวมีข้อ จำกัด ต่ออินสแตนซ์และ / หรือกระบวนการ บางครั้งอาจเป็นความคิดที่ดีที่จะเรียกใช้หลาย ๆ อินสแตนซ์ แต่การทำเช่นนั้นบนเครื่องเดียวกันต้องใช้พอร์ตการรับฟังอื่นพอร์ตแรก (TCP80 / 443) กำลังส่งต่อการเชื่อมต่อไปยังอินสแตนซ์แรก
Remi Letourneau

22

คุณคิดว่าพอร์ตเป็นของจริง มันเป็นเพียงตัวเลขที่ไม่ได้ลงนาม 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 ต้นทางและปลายทางและพอร์ตที่มีอยู่ในส่วนหัว ระบบปฏิบัติการและแอปพลิเคชั่น (เว็บเบราว์เซอร์หรือเว็บเซิร์ฟเวอร์) สามารถใช้ทั้งสองอย่างเพื่อหาวิธีการที่เหมาะสมในการประมวลผลแพ็กเก็ต


2
+2 คะแนนถ้าฉันทำได้
Generalnetworkerror

13

พอร์ต 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) แต่นี่เป็นหัวข้ออื่นโดยสิ้นเชิง


ขอขอบคุณที่แนะนำฉันให้รู้จักกับแนวคิดของ
Marcos Gonzalez

1
หากคุณต้องการมีการ "หลอก" มือและความคิดเกี่ยวกับแนวคิดสมดุลภาระบางอย่าง F5 มีการฝึกอบรมออนไลน์ฟรีที่ university.f5.com การลงทะเบียนฟรีและช่วยให้คุณเข้าถึง LTM (Local Traffic Manager - ผู้จัดสมดุลในพื้นที่ของพวกเขา ) การฝึกอบรมที่คุณสามารถดูว่ามันมีลักษณะอย่างไรและเรียนรู้แนวคิดเกี่ยวกับการทำโหลดบาลานซ์ (เช่น IP จริง, IP เสมือน, พูล, การตรวจสุขภาพ ฯลฯ )
Remi Letourneau

คำแนะนำที่ดี!
Marcos Gonzalez

9

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

หากเซิร์ฟเวอร์ได้รับคำขอมากเกินไปเซิร์ฟเวอร์จะชะลอตัวลงอย่างแน่นอนอย่างไรก็ตามนี่ไม่ใช่ประเภทของปัญหาที่สามารถแก้ไขได้โดยการเพิ่มหมายเลขพอร์ตอื่น


s / label แล้ว / label กว่า / - ​​ฉันต้องการแก้ไข แต่ดูเหมือนว่ามีเพียงตัวเดียวเท่านั้นที่ไม่สามารถแก้ไขได้
พอลเกียร์

7

หากคุณใช้พอร์ตสุ่มผู้ใช้จะต้องเพิ่มหมายเลขพอร์ตที่ถูกต้องทุกครั้งที่เข้าสู่เว็บไซต์ของคุณ เช่น www.example.com:80; www.example.com:81; www.example.com:82 เป็นต้น

มันจะไม่เพิ่มประสิทธิภาพในการใช้พอร์ตมากขึ้น พอร์ตต้นทางสำหรับแต่ละการเชื่อมต่อพอร์ตชั่วคราวและแตกต่างกันมาก


7

การเชื่อมต่อ 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


2

อย่าเข้าใจผิดพอร์ตอื่นสำหรับการเชื่อมต่อทางกายภาพที่แตกต่างกันหรือแบนด์วิธเครือข่ายที่สูงขึ้นหรือประสิทธิภาพการประมวลผลเซิร์ฟเวอร์ สิ่งที่เซิร์ฟเวอร์ได้รับคือแพ็คเก็ต TCP หรือ UDP ซึ่งมีหมายเลขพอร์ตเป็นส่วนหนึ่งของที่อยู่ พวกเขายังคงมาสายเดียวกันผ่านฮาร์ดแวร์และไดรเวอร์เครือข่ายเดียวกันและอื่น ๆ

หากคุณต้องส่งสองแพ็คเก็ตไปยังเซิร์ฟเวอร์ในแง่ของทรัพยากรเซิร์ฟเวอร์จะประมวลผลแพ็กเก็ตสองชุดนี้ไม่สำคัญว่าหนึ่งในสองนั้นมีหมายเลขพอร์ตที่แตกต่างกันหรือหมายเลขพอร์ตเดียวกันที่เกี่ยวข้องกับพวกเขาการจัดการภายในจะ ใกล้เคียงกัน

ดังนั้นนี่ไม่ใช่วิธีการเพิ่มประสิทธิภาพ แต่อย่างใด

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


1

ตามที่ Remi พูดถึงพอร์ต 80 & 443 เป็นพอร์ต "เริ่มต้น" สำหรับ HTTP / HTTPS

เครือข่ายและไฟร์วอลล์ส่วนใหญ่จะไม่ปิดกั้นการรับส่งข้อมูลผ่านพอร์ตนี้ ดังนั้นการใช้พอร์ตนี้จึงง่ายขึ้นโดยส่วนใหญ่คุณไม่จำเป็นต้องกังวลเกี่ยวกับไฟร์วอลล์ที่ปิดกั้นบริการของคุณคุณอาจต้องผ่านการตั้งค่ากฎไฟร์วอลล์ใหม่และรับการอนุมัติจากการปฏิบัติตาม / ความปลอดภัยเช่นเดียวกัน


1
สาธุเว็บไซต์ที่ใช้พอร์ตที่ไม่เป็นมาตรฐานนั้นเป็นข้อ จำกัด ของการมีอยู่ของผู้ดูแลความปลอดภัยใด ๆ ผู้ใช้หนึ่งคนใน nedwork ของคุณจำเป็นต้องใช้เว็บไซต์หนึ่งที่มีพอร์ตแปลก = การเปลี่ยนพร็อกซีการเปลี่ยน FW การตรวจสอบความปลอดภัยเป็นต้น
wintermute000

0

ดังที่คนอื่น ๆ ที่นี่ได้กล่าวว่ามันไม่มีประโยชน์ที่จะโฮสต์เว็บเซิร์ฟเวอร์บนพอร์ตอื่นที่ไม่ใช่พอร์ต 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

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