หมายเลขพอร์ตเครือข่าย TCP / IP ที่ใหญ่ที่สุดที่อนุญาตสำหรับ IPv4 คืออะไร


คำตอบ:


565

หมายเลขพอร์ตเป็นจำนวนเต็ม 16 บิตที่ไม่ได้ลงชื่อดังนั้น 65535


216
"เฮ้จิมเราควรสนับสนุนกี่พอร์ต?" "ทำให้มันเป็น 16 บิตเพื่อการวัดที่ดีไม่มีใครจะเปิดได้มากกว่าหนึ่งร้อยครั้งในหนึ่งครั้ง"
JessieArr

3
@barlop ฉันแนะนำว่าเมื่อพวกเขาสร้างพอร์ตครั้งแรกเครื่องเดียวที่มีการเชื่อมต่อหลายร้อยอาจถือว่าเป็นกรณีที่เลวร้ายที่สุด แต่ทุกวันนี้เว็บเซิร์ฟเวอร์อุปกรณ์เครือข่าย ฯลฯ สามารถชนกับข้อ จำกัด การนับพอร์ตได้อย่างแน่นอน Microsoft เขียนบทความ Technet ที่น่าสนใจเกี่ยวกับวิธีการวินิจฉัยและหลีกเลี่ยงในสภาพแวดล้อม Windows: blogs.technet.microsoft.com/askds/2008/10/29/…
JessieArr

3
@ JessieArr ในทั้งสองกรณีนี้ไม่ใช่ปัญหา 65536 เป็นปัญหาของ A) โปรแกรมไม่ปล่อยการเชื่อมต่อปล่อยให้พวกเขาอยู่ในสถานะ "WAIT" ที่ netstat แสดงรวมกับ B) รุ่น windows รุ่นก่อนหน้าบางรุ่นจะเริ่มต้นที่ 1024-5000 เท่านั้น พอร์ตแบบไดนามิกและจากนั้นใครจะรู้ว่าสิ่งนั้นเคยเกิดขึ้นเนื่องจากไม่มีโปรแกรมใดที่รบกวนการรายงานต่อใครก็ตามที่ไม่สามารถรับพอร์ตแบบไดนามิกและไม่มี windows ดังนั้นมันจึงเป็นปัญหาที่เกิดขึ้นจริง ๆ หมายเลข 65536 เว็บเบราว์เซอร์อาจเป็นผู้ใช้ที่ใหญ่ที่สุดในการเชื่อมต่อฉันมี 297 บรรทัดในเอาต์พุต netstat ของฉัน ห่างจาก 65K
barlop

3
@JessieArr สแต็ค IP ส่วนใหญ่ใช้ tuple ของที่อยู่ IP, พอร์ตต้นทาง, ที่อยู่ IP ปลายทางและพอร์ตปลายทางเป็นตัวบ่งชี้เฉพาะสำหรับการเชื่อมต่อ ซึ่งหมายความว่าเซิร์ฟเวอร์สามารถมีการเชื่อมต่อที่ใช้งานได้จำนวนมากมากกว่าที่มีพอร์ตเปิดที่มีอยู่และจำนวนพอร์ตจะวางข้อ จำกัด เท่านั้น (แม้ว่าจะมีขนาดใหญ่มาก) บนปริมาณของการเชื่อมต่อแบบเปิดระหว่างแหล่งเดียวและปลายทางเดียว ฉันไม่คิดว่าทุกคนจะใช้เซิร์ฟเวอร์บน (หรือฟังการเชื่อมต่อ) มากกว่า 65536 พอร์ตในครั้งเดียว
jduncanator

41
@JessieArr - นั่นจะสอนให้คุณลองทำเรื่องตลกนี่เป็นเรื่องจริงจังที่คุณรู้ไม่มีเวลาสำหรับเรื่องแบบนั้นที่นี่: /
แมตต์

145

หมายเลขพอร์ตที่ใหญ่ที่สุดคือ short ที่ไม่ได้ลงชื่อ 2 ^ 16-1: 65535

พอร์ตที่ลงทะเบียนนั้นได้รับมอบหมายจาก Internet Corporation สำหรับชื่อและหมายเลขที่กำหนด (ICANN) ให้กับการใช้งานบางอย่าง แต่ละพอร์ตที่ลงทะเบียนอยู่ในช่วง 1024–49151

ตั้งแต่วันที่ 21 มีนาคม 2544 บริษัท ตัวแทนการจดทะเบียนคือ ICANN ก่อนหน้านั้น IANA

พอร์ตที่มีตัวเลขต่ำกว่าพอร์ตที่ลงทะเบียนจะเรียกว่าพอร์ตที่รู้จักกันดี พอร์ตที่มีตัวเลขมากกว่าพอร์ตที่ลงทะเบียนจะเรียกว่าพอร์ตแบบไดนามิกและ / หรือพอร์ตส่วนตัว

Wikipedia: พอร์ตที่ลงทะเบียน


71

ตามที่ฉันเข้าใจแล้วคุณควรใช้มากถึง 49151 เนื่องจากตั้งแต่ 49152 ถึง 65535 สงวนไว้สำหรับพอร์ตชั่วคราว


11
ช่วงพอร์ตชั่วคราวจะแตกต่างกันไปตามระบบ ฉันใช้ Ubuntu Linux กับเคอร์เนล 3.19.0-43 ทั่วไป ผลในการส่งออก$ cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000ถ้าหากใครควรหรือไม่ควรใช้พอร์ตในช่วงพอร์ตชั่วคราวของระบบฉันสงสัยว่ามากที่สุดหากระบบปฏิบัติการเครือข่ายสมัยใหม่ทุกวันจะข้ามพอร์ตที่ใช้งานไปแล้ว
Keith Reynolds

37

เพียงแค่การติดตามsmasheryคำตอบ 's ช่วงพอร์ตชั่วคราว (บน Linux อย่างน้อยและฉันสงสัยว่า Unices อื่นเช่นกัน) ไม่ใช่การแก้ไข สิ่งนี้สามารถควบคุมได้โดยการเขียนถึง /proc/sys/net/ipv4/ip_local_port_range

ข้อ จำกัด เพียงอย่างเดียว (เท่าที่เกี่ยวข้องกับ IANA) คือพอร์ตที่ต่ำกว่า 1024 ถูกกำหนดให้เป็นพอร์ตที่รู้จักกันดี พอร์ตด้านบนที่ให้บริการฟรี บ่อยครั้งที่คุณจะพบว่าพอร์ตที่ต่ำกว่า 1024 ถูก จำกัด ให้เข้าถึง superuser ฉันเชื่อว่าด้วยเหตุผลนี้


15

ตาม RFC 793 พอร์ตนั้นเป็นบิต 16 บิตที่ไม่ได้ลงชื่อ

ซึ่งหมายความว่าช่วงคือ 0 - 65535

อย่างไรก็ตามภายในช่วงนั้นพอร์ต 0 - 1023 จะถูกสงวนไว้สำหรับวัตถุประสงค์เฉพาะ ฉันพูดโดยทั่วไปเพราะนอกเหนือจากพอร์ต 0 ปกติแล้วจะไม่มีการบังคับใช้การจอง 0-1023 TCP / UDP การใช้งานมักจะไม่บังคับใช้นอกเหนือจากการจอง 0 คุณสามารถถ้าคุณต้องการที่จะวิ่งขึ้นพอร์ต TLS เว็บเซิร์ฟเวอร์บนพอร์ต 80 หรือ 25 หรือ 65535 แทนมาตรฐาน 443 ในทำนองเดียวกันแม้สรรพสินค้ามันเป็น มาตรฐานที่เซิร์ฟเวอร์ SMTP รับฟังพอร์ต 25 คุณสามารถเรียกใช้บน 80, 443 หรืออื่น ๆ

การใช้งานส่วนใหญ่สำรอง 0 เพื่อวัตถุประสงค์เฉพาะ - การกำหนดพอร์ตแบบสุ่ม ดังนั้นในการติดตั้งใช้งานส่วนใหญ่การพูดว่า "ฟังบนพอร์ต 0" จริงๆแล้วหมายถึง "ฉันไม่สนใจพอร์ตที่ฉันใช้เพียงแค่ให้พอร์ตที่ไม่ได้กำหนดแบบสุ่มให้ฟัง"

ดังนั้นข้อ จำกัด ใด ๆ ในการใช้พอร์ตในช่วง 0-65535 รวมถึง 0 ช่วงการสำรองชั่วคราว ฯลฯ เป็นการใช้งาน (เช่น OS / ไดรเวอร์) โดยเฉพาะอย่างไรก็ตามทั้งหมดรวมถึง 0 เป็นพอร์ตที่ถูกต้องใน RFC 793



11

หมายเลขที่ถูกต้องสำหรับพอร์ตคือ: 0 ถึง 2 ^ 16-1 = 0 ถึง 65535
นั่นเป็นเพราะหมายเลขพอร์ตมีความยาว 16 บิต

อย่างไรก็ตามพอร์ตจะแบ่งออกเป็น:
พอร์ตที่รู้จัก : 0 ถึง 1,023 (ใช้สำหรับบริการระบบเช่น HTTP, FTP, SSH, DHCP ... )
พอร์ตที่ลงทะเบียน / ผู้ใช้ : 1024 ถึง 49151 (คุณสามารถใช้กับเซิร์ฟเวอร์ของคุณได้ ระวังแอปพลิเคชั่นที่มีชื่อเสียง: เช่นเซิร์ฟเวอร์ระบบการจัดการฐานข้อมูล Microsoft SQL Server (Apache) หรือ Apache Derby Network Server กำลังใช้งานอยู่ในช่วงนี้นั่นคือไม่แนะนำให้กำหนดพอร์ตของ MSSQL ให้กับเซิร์ฟเวอร์ของคุณมิฉะนั้นถ้า MSSQL ทำงานอยู่ อาจจะไม่ทำงานเนื่องจากข้อขัดแย้งของพอร์ต) พอร์ต
แบบไดนามิก / ส่วนตัว : 49152 ถึง 65535 (ไม่ใช้สำหรับเซิร์ฟเวอร์แทนไคลเอนต์เช่นในบริการ NATing)

ในการเขียนโปรแกรมคุณสามารถใช้หมายเลข 0 ถึง 65535 สำหรับเซิร์ฟเวอร์ของคุณได้อย่างไรก็ตามคุณควรปฏิบัติตามช่วงที่ระบุไว้ข้างต้นมิฉะนั้นบริการระบบบางอย่างหรือบางแอปพลิเคชันจะไม่ทำงานเนื่องจากพอร์ตที่ขัดแย้งกัน
ตรวจสอบรายการพอร์ตส่วนใหญ่ได้ที่นี่: https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers


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