เราควรเลือกพอร์ต TCP / IP เริ่มต้นสำหรับบริการใหม่อย่างไร


110

เมื่อพัฒนาแอปที่จะรับฟังพอร์ต TCP / IP ควรเลือกพอร์ตเริ่มต้นอย่างไร สมมติว่าแอปนี้จะติดตั้งในคอมพิวเตอร์หลายเครื่องและต้องการหลีกเลี่ยงความขัดแย้งของพอร์ต


1
อันนี้ดีกว่าตอบที่นี่stackoverflow.com/questions/10476987/…
matt2000

คำตอบ:


49

ไปที่นี่และเลือกพอร์ตพร้อมคำอธิบายUnassigned


11
คุณกำลังแนะนำให้เขาเลือกพอร์ตที่ต่ำกว่า 100?
mpen

3
ฉันควรเลือกอันไหน
Owen

1
หากนักพัฒนาทุกคนใช้ตรรกะนั้นก็หมายความว่าบริการใหม่ทั้งหมดรวมตัวกันรอบ ๆ พอร์ตที่ไม่ได้กำหนด อะไรคือความน่าจะเป็นที่บริการกำลังทำงานบนพอร์ตที่กำหนดเทียบกับพอร์ตที่ไม่ได้กำหนด (ขออภัยหากฉันไม่เปิดเผยความลับทางการค้า :)
hultqvist

1
หากคุณกำลังมองหาพอร์ตที่จะใช้บนเครือข่ายภายในโปรดพิจารณาคำตอบนี้สำหรับคำถามที่คล้ายกัน: stackoverflow.com/questions/218839/…
adrianwadey

32

ขั้นตอนแรก: ดูรายชื่อ IANA :

คุณจะเห็นที่ส่วนท้ายของรายการ

"พอร์ตไดนามิกและ / หรือพอร์ตส่วนตัวคือพอร์ตตั้งแต่ 49152 ถึง 65535"

ดังนั้นสิ่งเหล่านี้จะเป็นการเดิมพันที่ดีกว่าของคุณ แต่เมื่อคุณเลือกแล้วคุณสามารถเปิด Google ได้ตลอดเวลาเพื่อดูว่ามีแอปยอดนิยมเพียงพอที่ "อ้างสิทธิ์" แล้วหรือยัง


8
แต่จะไม่ใช้พอร์ตไดนามิกปล่อยให้ฉันเปิดพอร์ตขัดแย้งเป็นระยะ ๆ (แม้ว่าจะหายาก)? บางทีอาจจะปลอดภัยกว่าหากใช้พอร์ตในช่วงที่ลงทะเบียนซึ่งไม่ได้กำหนดหรือกำหนดให้กับแอปที่คลุมเครือ
Kevin Wong

4
เว้นแต่คุณจะลงทะเบียนตัวเลือกพอร์ตของคุณอย่างชัดเจนกับ IANA คุณจะเรียกใช้อัตราความขัดแย้งเดียวกันโดยใช้ "UNASSIGNED" ฉันคิดว่า อันที่จริงแล้วเนื่องจากมีผู้ไม่ได้มอบหมายจำนวนมากที่อยู่ในระดับต่ำผู้ที่อาจจะเป็น IMHO มากกว่า
curtisk

2
เริ่มต้นด้วยช่วงที่ไม่ได้กำหนดเสมอโดยมีตัวเลือกของพอร์ตที่กำหนดค่าได้ของผู้ใช้ / ผู้ดูแลระบบเพื่อจัดการกับข้อขัดแย้งที่อาจเกิดขึ้น เฉพาะในกรณีที่แอปพลิเคชันของคุณใช้งานในวงกว้าง (เช่น BitTorrent หรือการใช้งานขนาดใหญ่อื่น ๆ ) คุณควรพิจารณาสมัครพอร์ตที่กำหนด มิฉะนั้นอยู่นอกช่วงที่กำหนด หากสิ่งนี้มีไว้สำหรับบางสิ่งบางอย่างภายใน / ส่วนบุคคลอย่างเคร่งครัดให้บันทึกพอร์ตที่ใช้งานโดยบริการต่างๆและคุณควรจะสบายดีตราบใดที่ผู้คนสามารถค้นหาได้จากที่ไหนสักแห่งทางออนไลน์ ลองนึกถึงช่วงส่วนตัว / ไดนามิกที่คล้ายกับ IP ที่ไม่สามารถกำหนดเส้นทางได้ซึ่งเหมาะสำหรับการใช้งานขนาดเล็ก / ส่วนตัว
jefflunt

3
อย่าทำผิดที่สมมติว่าแอปของคุณต้องการพอร์ตที่กำหนดโดย IANA เพราะคุณคิดว่าแอปของคุณจะระเบิดในการใช้งานก่อนที่จะเกิดขึ้นจริง :)
jefflunt

7
เกี่ยวกับไดนามิกเรนจ์ฉันคิดว่าคำถาม "ความขัดแย้ง" อาจถามว่าถ้า OS ใช้ช่วงนั้นสำหรับพอร์ตชั่วคราว (ตามที่ควรจะเป็น) จะทำให้เกิดความขัดแย้งกับพอร์ตที่คุณเลือกหาก OS สุ่มตัดสินใจ เพื่อใช้พอร์ตนั้นเช่นการเชื่อมต่อขาออก (การใช้ช่วงนี้แบบสุ่มเป็นพอร์ตชั่วคราวตามที่ฉันเข้าใจ) ดูคำถามอื่น ๆ นี้ซึ่งระบุข้อกังวลในรายละเอียดเพิ่มเติม
Garret Wilson

7

หากใช้กันอย่างแพร่หลายหมายความว่าคุณต้องการป้องกันบุคคลอื่นที่ใช้แอปนี้ในอนาคตคุณสามารถสมัครเพื่อให้ IANA ทำเครื่องหมายว่าสงวนไว้สำหรับแอปของคุณได้ที่นี่



2

คุณอาจต้องการหลีกเลี่ยงการใช้พอร์ตใด ๆ จากรายการนี้ (Wikipedia)

ฉันจะเลือกหนึ่งและเมื่อแอปถูกใช้โดยคนทั่วไปหมายเลขพอร์ตจะกลายเป็นที่รู้จักและรวมอยู่ในรายการดังกล่าว


2

ตามที่คนอื่นพูดถึงตรวจสอบ IANA

จากนั้นตรวจสอบระบบ / etc / services ในพื้นที่ของคุณเพื่อดูว่ามีพอร์ตที่กำหนดเองที่ใช้งานอยู่หรือไม่

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


1

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


1

หากนี่เป็นแอปพลิเคชันที่คุณคาดว่าจะใช้กันอย่างแพร่หลายให้ลงทะเบียนหมายเลข ที่นี่เพื่อไม่มีใครใช้

มิฉะนั้นให้เลือกอันที่ไม่ได้ใช้แบบสุ่ม

ปัญหาในการใช้หนึ่งในช่วงไดนามิกคืออาจไม่พร้อมใช้งานเนื่องจากอาจถูกใช้สำหรับหมายเลขพอร์ตไดนามิก


0

ใช้รายการ iana ดาวน์โหลดไฟล์ csv จาก:

https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.csv

และใช้เชลล์สคริปต์นี้เพื่อค้นหาพอร์ตที่ไม่ได้ลงทะเบียน:

for port in {N..M}; do if ! grep -q $port service-names-port-numbers.csv; then echo $port;fi; done;

และใส่ตัวเลข 2 ตัวแทน N และ M


-1

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

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



-1

เลือกพอร์ตเริ่มต้นที่ไม่รบกวน daemons และเซิร์ฟเวอร์ทั่วไป ตรวจสอบให้แน่ใจด้วยว่าหมายเลขพอร์ตไม่ได้อยู่ในรายการเป็นเวกเตอร์การโจมตีสำหรับไวรัสบางตัว - บาง บริษัท มีนโยบายที่เข้มงวดเพื่อบล็อกพอร์ตดังกล่าวไม่ว่าจะเกิดอะไรขึ้นก็ตาม สุดท้าย แต่ไม่ท้ายสุดตรวจสอบให้แน่ใจว่าสามารถกำหนดหมายเลขพอร์ตได้

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